/ Hex Artifact Content
Login

Artifact 67297342e0cbac5af4d5bc94c5b8460757a11213:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65 64  endif../* Needed
0760: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65 66   for various def
0770: 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23  initions... */.#
0780: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
0790: 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  C__) && !defined
07a0: 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a 23 20  (_GNU_SOURCE).# 
07b0: 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52  define _GNU_SOUR
07c0: 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  CE.#endif..#if d
07d0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
07e0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
07f0: 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20 64  _BSD_SOURCE).# d
0800: 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52 43  efine _BSD_SOURC
0810: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
0820: 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b  For MinGW, check
0830: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 63 61   to see if we ca
0840: 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20 68 65  n include the he
0850: 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74 61 69  ader file contai
0860: 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65 72 73  ning its.** vers
0870: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ion information,
0880: 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74 68 69   among other thi
0890: 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20  ngs.  Normally, 
08a0: 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69  this internal Mi
08b0: 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  nGW.** header fi
08c0: 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20  le would [only] 
08d0: 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75 74 6f  be included auto
08e0: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f 74 68  matically by oth
08f0: 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65 72 0a  er MinGW header.
0900: 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65 76 65  ** files; howeve
0910: 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 64  r, the contained
0920: 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61   version informa
0930: 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65 71 75  tion is now requ
0940: 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a 2a 20  ired by this.** 
0950: 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f 20 77  header file to w
0960: 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e 61 72  ork around binar
0970: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0980: 69 73 73 75 65 73 20 28 73 65 65 20 62 65 6c 6f  issues (see belo
0990: 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69  w) and.** this i
09a0: 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e  s the only known
09b0: 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62 6c 79   way to reliably
09c0: 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54 68 69   obtain it.  Thi
09d0: 73 20 65 6e 74 69 72 65 20 23 69 66 20 62 6c 6f  s entire #if blo
09e0: 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63  ck.** would be c
09f0: 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65  ompletely unnece
0a00: 73 73 61 72 79 20 69 66 20 74 68 65 72 65 20 77  ssary if there w
0a10: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77 61 79  as any other way
0a20: 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a   of detecting.**
0a30: 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65 69 72   MinGW via their
0a40: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 28 65   preprocessor (e
0a50: 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75 73 74  .g. if they cust
0a60: 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47 43 43  omized their GCC
0a70: 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f   to define.** so
0a80: 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69 66 69  me MinGW-specifi
0a90: 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68 65 6e  c macros).  When
0aa0: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d   compiling for M
0ab0: 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74 68 65  inGW, either the
0ac0: 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f  .** _HAVE_MINGW_
0ad0: 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47  H or _HAVE__MING
0ae0: 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20 65 78  W_H (note the ex
0af0: 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65 29 20  tra underscore) 
0b00: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a  macro must be.**
0b10: 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65 72 77   defined; otherw
0b20: 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f  ise, detection o
0b30: 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65  f conditions spe
0b40: 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57 20 77  cific to MinGW w
0b50: 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c  ill be.** disabl
0b60: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
0b70: 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48  ed(_HAVE_MINGW_H
0b80: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e  ).# include "min
0b90: 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65 66 69  gw.h".#elif defi
0ba0: 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57  ned(_HAVE__MINGW
0bb0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f  _H).# include "_
0bc0: 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a  mingw.h".#endif.
0bd0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0be0: 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e   version 4.x (an
0bf0: 64 20 68 69 67 68 65 72 29 2c 20 63 68 65 63 6b  d higher), check
0c00: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 5f   to see if the _
0c10: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0c20: 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20 72 65  .** define is re
0c30: 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e 74 61  quired to mainta
0c40: 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  in binary compat
0c50: 69 62 69 6c 69 74 79 20 77 69 74 68 20 74 68 65  ibility with the
0c60: 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a   MSVC runtime.**
0c70: 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73 65 20   library in use 
0c80: 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77  (e.g. for Window
0c90: 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  s XP)..*/.#if !d
0ca0: 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32 42 49  efined(_USE_32BI
0cb0: 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21 64 65  T_TIME_T) && !de
0cc0: 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42 49 54  fined(_USE_64BIT
0cd0: 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20  _TIME_T) && \.  
0ce0: 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32    defined(_WIN32
0cf0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
0d00: 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20 20 64  IN64) && \.    d
0d10: 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d  efined(__MINGW_M
0d20: 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20 26 26  AJOR_VERSION) &&
0d30: 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56   __MINGW_MAJOR_V
0d40: 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c  ERSION >= 4 && \
0d50: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d  .    defined(__M
0d60: 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e  SVCRT__).# defin
0d70: 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  e _USE_32BIT_TIM
0d80: 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E_T.#endif../* T
0d90: 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65  he public SQLite
0da0: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
0db0: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0dc0: 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  TS macro must ap
0dd0: 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e  pear.** first in
0de0: 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65   QNX.  Also, the
0df0: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
0e00: 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70  _T macro must ap
0e10: 70 65 61 72 20 66 69 72 73 74 20 66 6f 72 0a 2a  pear first for.*
0e20: 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63  * MinGW..*/.#inc
0e30: 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22  lude "sqlite3.h"
0e40: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0e50: 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
0e60: 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75 74 20  n header output 
0e70: 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27 20 69  by 'configure' i
0e80: 66 20 77 65 27 72 65 20 75 73 69 6e 67 20 74 68  f we're using th
0e90: 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61  e.** autoconf-ba
0ea0: 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66  sed build.*/.#if
0eb0: 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49 54 45  def _HAVE_SQLITE
0ec0: 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75  _CONFIG_H.#inclu
0ed0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65  de "config.h".#e
0ee0: 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22  ndif..#include "
0ef0: 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a  sqliteLimit.h"..
0f00: 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61  /* Disable nuisa
0f10: 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20  nce warnings on 
0f20: 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72  Borland compiler
0f30: 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  s */.#if defined
0f40: 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23  (__BORLANDC__).#
0f50: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68  pragma warn -rch
0f60: 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20   /* unreachable 
0f70: 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20  code */.#pragma 
0f80: 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e  warn -ccc /* Con
0f90: 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73  dition is always
0fa0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a   true or false *
0fb0: 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  /.#pragma warn -
0fc0: 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20  aus /* Assigned 
0fd0: 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75  value is never u
0fe0: 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  sed */.#pragma w
0ff0: 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70  arn -csu /* Comp
1000: 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64  aring signed and
1010: 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72   unsigned */.#pr
1020: 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f  agma warn -spa /
1030: 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69  * Suspicious poi
1040: 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20  nter arithmetic 
1050: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
1060: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
1070: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
1080: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
1090: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
10a0: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
10b0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
10c0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
10d0: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
10e0: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
10f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1100: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
1110: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
1120: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
1130: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
1140: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
1150: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
1160: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
1170: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
1180: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
1190: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
11a0: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
11b0: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
11c0: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
11d0: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
11e0: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
11f0: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
1200: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
1210: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
1220: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
1230: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
1240: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
1250: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
1260: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
1270: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
1280: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
1290: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
12a0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
12b0: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
12c0: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
12d0: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
12e0: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
12f0: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
1300: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
1310: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
1320: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
1330: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
1340: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
1350: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1360: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
1370: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
1380: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
1390: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
13a0: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
13b0: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
13c0: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
13d0: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
13e0: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
13f0: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
1400: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
1410: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
1420: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
1430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
1440: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
1450: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
1460: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
1470: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1480: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1490: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
14a0: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
14b0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
14c0: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
14d0: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
14e0: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
14f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
1500: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
1510: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
1520: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
1530: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1540: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
1550: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
1560: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1570: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
1580: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
1590: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
15a0: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
15b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
15c0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
15d0: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
15e0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
15f0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1600: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
1610: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
1640: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
1650: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
1660: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
1670: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1680: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
1690: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
16a0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
16b0: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
16c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  if../*.** A macr
16d0: 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65  o to hint to the
16e0: 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61   compiler that a
16f0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
1700: 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e   not be.** inlin
1710: 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ed..*/.#if defin
1720: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20  ed(__GNUC__).#  
1730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1740: 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62  INLINE  __attrib
1750: 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29  ute__((noinline)
1760: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
1770: 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53  _MSC_VER) && _MS
1780: 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64  C_VER>=1310.#  d
1790: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49  efine SQLITE_NOI
17a0: 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65  NLINE  __declspe
17b0: 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73  c(noinline).#els
17c0: 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  e.#  define SQLI
17d0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64  TE_NOINLINE.#end
17e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
17f0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1800: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1810: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
1820: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
1830: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
1840: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
1850: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
1860: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
1870: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1880: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1890: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
18a0: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
18b0: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
18c0: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
18d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
18e0: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
18f0: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1900: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1910: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
1920: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
1930: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
1940: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
1950: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
1960: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
1970: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1980: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1990: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
19a0: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
19b0: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
19c0: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
19d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
19e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
19f0: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1a00: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1a10: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
1a20: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
1a30: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
1a40: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
1a50: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
1a60: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
1a70: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1a80: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1a90: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1aa0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1ab0: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1ac0: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1ad0: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1ae0: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1af0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1b00: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1b10: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
1b20: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
1b30: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
1b40: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
1b50: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56  #endif../*.** EV
1b60: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37  IDENCE-OF: R-257
1b70: 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20  15-37072 Memory 
1b80: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69  allocation stati
1b90: 73 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65  stics are enable
1ba0: 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20  d by.** default 
1bb0: 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73  unless SQLite is
1bc0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53   compiled with S
1bd0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45  QLITE_DEFAULT_ME
1be0: 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20  MSTATUS=0 in.** 
1bf0: 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72  which case memor
1c00: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
1c10: 74 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61  tistics are disa
1c20: 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e  bled by default.
1c30: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c40: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c50: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1c60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1c70: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1c80: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1c90: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1ca0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cb0: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1cc0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cd0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
1ce0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1cf0: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
1d00: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
1d10: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1d20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1d30: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1d40: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1d50: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1d60: 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  OC           // 
1d70: 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  Use Win32 native
1d80: 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20   heap API.**    
1d90: 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c   SQLITE_ZERO_MAL
1da0: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f  LOC            /
1db0: 2f 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c  / Use a stub all
1dc0: 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61  ocator that alwa
1dd0: 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20  ys fails.**     
1de0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e00: 20 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69   Debugging versi
1e10: 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c  on of system mal
1e20: 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57  loc().**.** On W
1e30: 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53  indows, if the S
1e40: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1e50: 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72  OC_VALIDATE macr
1e60: 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64  o is defined and
1e70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1e80: 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65   macro is enable
1e90: 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74  d, each call int
1ea0: 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  o the Win32 nati
1eb0: 76 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65  ve heap subsyste
1ec0: 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20  m.** will cause 
1ed0: 48 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20  HeapValidate to 
1ee0: 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68  be called.  If h
1ef0: 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73  eap validation s
1f00: 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a  hould fail, an.*
1f10: 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c  * assertion will
1f20: 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a   be triggered..*
1f30: 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20  *.** If none of 
1f40: 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65  the above are de
1f50: 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20  fined, then set 
1f60: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f70: 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64  LLOC as.** the d
1f80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64  efault..*/.#if d
1f90: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
1fa0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
1fb0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1fc0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
1fd0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1fe0: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1ff0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2000: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2010: 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20  >1.# error "Two 
2020: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
2030: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65  ollowing compile
2040: 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2050: 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72  ion options\. ar
2060: 65 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74  e defined but at
2070: 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c   most one is all
2080: 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53  owed:\. SQLITE_S
2090: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51  YSTEM_MALLOC, SQ
20a0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20b0: 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  C, SQLITE_MEMDEB
20c0: 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52  UG,\. SQLITE_ZER
20d0: 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66  O_MALLOC".#endif
20e0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
20f0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2100: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2110: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2120: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2130: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2140: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2160: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
2180: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
2190: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
21a0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
21b0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
21c0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
21d0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
21e0: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
21f0: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
2200: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
2210: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
2220: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
2230: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
2240: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2250: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
2260: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
2270: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
2280: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
2290: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
22a0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
22b0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
22c0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
22d0: 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64  Unix systems and
22e0: 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65   fchmod() on Ope
22f0: 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f  nBSD..** But _XO
2300: 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e  PEN_SOURCE defin
2310: 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d  e causes problem
2320: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20  s for Mac OS X, 
2330: 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a  so omit.** it..*
2340: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
2350: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26  XOPEN_SOURCE) &&
2360: 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57   !defined(__DARW
2370: 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  IN__) && !define
2380: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20  d(__APPLE__).#  
2390: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
23a0: 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a  URCE 600.#endif.
23b0: 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e  ./*.** NDEBUG an
23c0: 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61  d SQLITE_DEBUG a
23d0: 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49  re opposites.  I
23e0: 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  t should always 
23f0: 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20  be true that.** 
2400: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d  defined(NDEBUG)=
2410: 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  =!defined(SQLITE
2420: 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69  _DEBUG).  If thi
2430: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
2440: 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65  ly true,.** make
2450: 20 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69   it true by defi
2460: 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69  ning or undefini
2470: 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a  ng NDEBUG..**.**
2480: 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20   Setting NDEBUG 
2490: 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73  makes the code s
24a0: 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65  maller and faste
24b0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
24c0: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73  he.** assert() s
24d0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
24e0: 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61   code.  So we wa
24f0: 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  nt the default a
2500: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66  ction.** to be f
2510: 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20  or NDEBUG to be 
2520: 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74  set and NDEBUG t
2530: 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f  o be undefined o
2540: 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45  nly if SQLITE_DE
2550: 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20  BUG.** is set.  
2560: 54 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f  Thus NDEBUG beco
2570: 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61  mes an opt-in ra
2580: 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74  ther than an opt
2590: 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e  -out.** feature.
25a0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25b0: 28 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66  (NDEBUG) && !def
25c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25d0: 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  G) .# define NDE
25e0: 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  BUG 1.#endif.#if
25f0: 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29   defined(NDEBUG)
2600: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2610: 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65  TE_DEBUG).# unde
2620: 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a  f NDEBUG.#endif.
2630: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
2640: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
2650: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
2660: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
2670: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
2680: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2690: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
26a0: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
26b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
26c0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
26d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
26e0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
26f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2700: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2710: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2720: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2730: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2740: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2750: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2760: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2770: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2780: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
2790: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
27a0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
27b0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
27c0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
27d0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
27e0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
27f0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2800: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2810: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2820: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2830: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2840: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2850: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2860: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2870: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2880: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
2890: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
28a0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
28b0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
28c0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
28d0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
28e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
28f0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2900: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2910: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2920: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2930: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2940: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2950: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2960: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2970: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2980: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
2990: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
29a0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
29b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
29c0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
29d0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
29e0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
29f0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2a00: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2a10: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2a20: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2a30: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a50: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2a60: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2a70: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2a80: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
2a90: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
2aa0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
2ab0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
2ac0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
2ad0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
2ae0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2af0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2b00: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2b10: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b20: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2b30: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b40: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2b50: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2b60: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2b70: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2b80: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
2b90: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
2ba0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
2bb0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
2bc0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
2bd0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
2be0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2bf0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2c00: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2c10: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2c20: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2c30: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2c40: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2c50: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2c60: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2c70: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2c80: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
2c90: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
2ca0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
2cb0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
2cc0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2cd0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
2ce0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2cf0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2d00: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2d10: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2d20: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2d30: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d40: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2d50: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2d60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d70: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2d80: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
2d90: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
2da0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
2db0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
2dc0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
2dd0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
2de0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2df0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2e00: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2e10: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2e20: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2e30: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2e40: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2e50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2e60: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2e70: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2e80: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
2e90: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
2ea0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
2eb0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
2ec0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
2ed0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
2ee0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2ef0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2f00: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2f10: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2f20: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2f30: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2f40: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2f50: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2f60: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2f70: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2f80: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
2f90: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
2fa0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
2fb0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
2fc0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
2fd0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
2fe0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2ff0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3000: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3010: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3020: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3030: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3040: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3050: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3060: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3070: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3080: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3090: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
30a0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
30b0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
30c0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
30d0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
30e0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
30f0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3100: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3110: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3120: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3130: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3140: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3150: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3160: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3170: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
3180: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
3190: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
31a0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
31b0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
31c0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
31d0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
31e0: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
31f0: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3200: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3210: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3220: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3230: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3240: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3250: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3260: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3270: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
3280: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3290: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
32a0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
32b0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
32c0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
32d0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
32e0: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
32f0: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3300: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3310: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3320: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3330: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3340: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3350: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3360: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3370: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
3380: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
3390: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
33a0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
33b0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
33c0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
33d0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
33e0: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
33f0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3400: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3410: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3420: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3430: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3440: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3450: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3460: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3470: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
3480: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
3490: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
34a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
34b0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
34c0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
34d0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
34e0: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
34f0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3500: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3510: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3520: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3530: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3540: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3550: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3560: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3570: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
3580: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
3590: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
35a0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
35b0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
35c0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
35d0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
35e0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
35f0: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3600: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3610: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3620: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3630: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3640: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3650: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3660: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3670: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
3680: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
3690: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
36a0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
36b0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
36c0: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
36d0: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
36e0: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
36f0: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3700: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3710: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3720: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3730: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3740: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3750: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3760: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3770: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
3780: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
3790: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
37a0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
37b0: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
37c0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
37d0: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
37e0: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
37f0: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3800: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3810: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3820: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3830: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3840: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3850: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3860: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3870: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
3880: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3890: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
38a0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
38b0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38c0: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
38d0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
38e0: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
38f0: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3900: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3910: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3920: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3930: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3940: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3950: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3960: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3980: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
3990: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
39a0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
39b0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
39c0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
39d0: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
39e0: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
39f0: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
3a00: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
3a10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
3a20: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
3a30: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3a40: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3a50: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3a60: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3a70: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3a80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
3a90: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
3aa0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
3ab0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ac0: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
3ad0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
3ae0: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
3af0: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
3b00: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
3b10: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
3b20: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
3b30: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
3b40: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
3b50: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
3b60: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3b70: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3b80: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3b90: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3ba0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3bb0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3bc0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3bd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3be0: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
3bf0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3c00: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3c10: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c20: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3c30: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3c40: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
3c50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c60: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
3c70: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3c80: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
3c90: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3ca0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3cb0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3cc0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
3cd0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
3ce0: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
3cf0: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
3d00: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
3d10: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
3d20: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3d30: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3d40: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3d50: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3d60: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3d70: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3d80: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3d90: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3da0: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3db0: 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75   Macros to compu
3dc0: 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d  te minimum and m
3dd0: 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75  aximum of two nu
3de0: 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mbers..*/.#defin
3df0: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
3e00: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65  (B)?(A):(B)).#de
3e10: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
3e20: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
3e30: 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20  ./*.** Swap two 
3e40: 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20  objects of type 
3e50: 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  TYPE..*/.#define
3e60: 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20   SWAP(TYPE,A,B) 
3e70: 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20  {TYPE t=A; A=B; 
3e80: 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  B=t;}../*.** Che
3e90: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
3ea0: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
3eb0: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
3ec0: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
3ed0: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
3ee0: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
3ef0: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
3f00: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
3f10: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
3f20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
3f30: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
3f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
3f50: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
3f60: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
3f70: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
3f80: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
3f90: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
3fa0: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
3fb0: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
3fc0: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
3fd0: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
3fe0: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
3ff0: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
4000: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
4010: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
4020: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
4030: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
4040: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
4050: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
4060: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
4070: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
4080: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
4090: 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e  INT32_T.#  defin
40a0: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69  e UINT32_TYPE ui
40b0: 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt32_t.# else.# 
40c0: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
40d0: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  YPE unsigned int
40e0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
40f0: 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54  #ifndef UINT16_T
4100: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
4110: 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  _UINT16_T.#  def
4120: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4130: 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a  uint16_t.# else.
4140: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
4150: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73  _TYPE unsigned s
4160: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
4170: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4180: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4190: 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a  ef HAVE_INT16_T.
41a0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
41b0: 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65  TYPE int16_t.# e
41c0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
41d0: 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69  T16_TYPE short i
41e0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
41f0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f  f.#ifndef UINT8_
4200: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4210: 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  E_UINT8_T.#  def
4220: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
4230: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
4240: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
4250: 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  PE unsigned char
4260: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
4270: 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50  #ifndef INT8_TYP
4280: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
4290: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
42a0: 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74  INT8_TYPE int8_t
42b0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
42c0: 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e  e INT8_TYPE sign
42d0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
42e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c  #endif.#ifndef L
42f0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23  ONGDOUBLE_TYPE.#
4300: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
4310: 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75  LE_TYPE long dou
4320: 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64  ble.#endif.typed
4330: 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  ef sqlite_int64 
4340: 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  i64;          /*
4350: 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
4360: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4370: 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20  f sqlite_uint64 
4380: 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  u64;         /* 
4390: 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  8-byte unsigned 
43a0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
43b0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ef UINT32_TYPE u
43c0: 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  32;           /*
43d0: 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   4-byte unsigned
43e0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20  def UINT16_TYPE 
4400: 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u16;           /
4410: 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 2-byte unsigne
4420: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4430: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
4440: 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  i16;            
4450: 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 2-byte signed
4460: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4470: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
4480: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
4490: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
44a0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
44b0: 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69  edef INT8_TYPE i
44c0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  8;              
44d0: 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 1-byte signed
44e0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a   integer */../*.
44f0: 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ** SQLITE_MAX_U3
4500: 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74  2 is a u64 const
4510: 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20  ant that is the 
4520: 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75  maximum u64 valu
4530: 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65  e.** that can be
4540: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32   stored in a u32
4550: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
4560: 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75   data.  The valu
4570: 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30  e.** is 0x000000
4580: 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74  00ffffffff.  But
4590: 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72   because of quir
45a0: 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69  ks of some compi
45b0: 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65  lers, we.** have
45c0: 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
45d0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73  value in the les
45e0: 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e  s intuitive mann
45f0: 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65  er shown:.*/.#de
4600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4610: 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c  U32  ((((u64)1)<
4620: 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  <32)-1)../*.** T
4630: 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64  he datatype used
4640: 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61   to store estima
4650: 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  tes of the numbe
4660: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a  r of rows in a.*
4670: 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
4680: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e  .  This is an un
4690: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74  signed integer t
46a0: 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20  ype.  For 99.9% 
46b0: 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c  of.** the world,
46c0: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
46d0: 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e  r is sufficient.
46e0: 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69    But a 64-bit i
46f0: 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65  nteger.** can be
4700: 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65   used at compile
4710: 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64  -time if desired
4720: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4730: 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20  TE_64BIT_STATS. 
4740: 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77  typedef u64 tRow
4750: 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69  cnt;    /* 64-bi
4760: 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73  t only if reques
4770: 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ted at compile-t
4780: 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79  ime */.#else. ty
4790: 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e  pedef u32 tRowcn
47a0: 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20  t;    /* 32-bit 
47b0: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  is the default *
47c0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
47d0: 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69  Estimated quanti
47e0: 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75  ties used for qu
47f0: 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65  ery planning are
4800: 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69   stored as 16-bi
4810: 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e  t.** logarithms.
4820: 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58    For quantity X
4830: 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  , the value stor
4840: 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29  ed is 10*log2(X)
4850: 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73  .  This.** gives
4860: 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67   a possible rang
4870: 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61  e of values of a
4880: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30  pproximately 1.0
4890: 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a  e986 to 1e-986..
48a0: 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77  ** But the allow
48b0: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67  ed values are "g
48c0: 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65  rainy".  Not eve
48d0: 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  ry value is repr
48e0: 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  esentable..** Fo
48f0: 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74  r example, quant
4900: 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20  ities 16 and 17 
4910: 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65  are both represe
4920: 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74  nted by a LogEst
4930: 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65  .** of 40.  Howe
4940: 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73  ver, since LogEs
4950: 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65  t quantities are
4960: 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65   suppose to be e
4970: 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74  stimates,.** not
4980: 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74   exact values, t
4990: 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20  his imprecision 
49a0: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
49b0: 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22  ..**.** "LogEst"
49c0: 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c   is short for "L
49d0: 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d  ogarithmic Estim
49e0: 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ate"..**.** Exam
49f0: 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20  ples:.**      1 
4a00: 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20  -> 0            
4a10: 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20    20 -> 43      
4a20: 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32      10000 -> 132
4a30: 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30  .**      2 -> 10
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20               25 
4a50: 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32  -> 46          2
4a60: 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20  5000 -> 146.**  
4a70: 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20      3 -> 16     
4a80: 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36         100 -> 66
4a90: 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20          1000000 
4aa0: 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34  -> 199.**      4
4ab0: 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20   -> 20          
4ac0: 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20   1000 -> 99     
4ad0: 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30     1048576 -> 20
4ae0: 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33  0.**     10 -> 3
4af0: 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34  3           1024
4b00: 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39   -> 100    42949
4b10: 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a  67296 -> 320.**.
4b20: 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61  ** The LogEst ca
4b30: 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f  n be negative to
4b40: 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69   indicate fracti
4b50: 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a  onal values. .**
4b60: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
4b70: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
4b80: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
4b90: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
4ba0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
4bb0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
4bc0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ogEst;../*.** Ma
4bd0: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
4be0: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
4bf0: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
4c00: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
4c10: 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  * and whether or
4c20: 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d   not that determ
4c30: 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74  ination is run-t
4c40: 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74  ime or compile-t
4c50: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62  ime..**.** For b
4c60: 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c  est performance,
4c70: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4c80: 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20  ade to guess at 
4c90: 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a  the byte-order.*
4ca0: 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f  * using C-prepro
4cb0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20  cessor macros.  
4cc0: 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63  If that is unsuc
4cd0: 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a  cessful, or if.*
4ce0: 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49  * -DSQLITE_RUNTI
4cf0: 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69  ME_BYTEORDER=1 i
4d00: 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65  s set, then byte
4d10: 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d  -order is determ
4d20: 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74  ined.** at run-t
4d30: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
4d40: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
4d50: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
4d60: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
4d70: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
4d80: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
4d90: 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69  #endif.#if (defi
4da0: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
4db0: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
4dc0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
4dd0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
4de0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
4df0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
4e00: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
4e10: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
4e20: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
4e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
4e40: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
4e50: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
4e60: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
4e70: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
4e80: 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21  d(__arm__)) && !
4e90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
4ea0: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
4eb0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
4ec0: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31  E_BYTEORDER    1
4ed0: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
4ee0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
4ef0: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
4f00: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
4f10: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
4f20: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
4f30: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
4f40: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
4f50: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
4f60: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29  efined(__ppc__))
4f70: 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69    \.    && !defi
4f80: 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49  ned(SQLITE_RUNTI
4f90: 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  ME_BYTEORDER).# 
4fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
4fb0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
4fc0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4fd0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23  BIGENDIAN    1.#
4fe0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
4ff0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20  ITTLEENDIAN 0.# 
5000: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5010: 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54  F16NATIVE  SQLIT
5020: 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66  E_UTF16BE.#endif
5030: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
5040: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  LITE_BYTEORDER).
5050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5060: 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20  BYTEORDER    0  
5070: 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75     /* 0 means "u
5080: 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c  nknown at compil
5090: 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66  e-time" */.# def
50a0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
50b0: 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20  DIAN    (*(char 
50c0: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
50d0: 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =0).# define SQL
50e0: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
50f0: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
5100: 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64  ite3one)==1).# d
5110: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
5120: 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54  16NATIVE  (SQLIT
5130: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
5140: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
5150: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
5160: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
5170: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
5180: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
5190: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
51a0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
51b0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
51c0: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
51d0: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
51e0: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
51f0: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
5200: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
5210: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
5220: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
5230: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
5240: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
5250: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
5260: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
5270: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
5280: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
5290: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
52a0: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
52b0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
52c0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
52d0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
52e0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
52f0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
5300: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
5310: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
5320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
5330: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
5340: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
5350: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
5360: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
5370: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
5380: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
5390: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
53a0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
53b0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
53c0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
53d0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
53e0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
53f0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
5400: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
5410: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
5420: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
5430: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
5440: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
5450: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
5460: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
5470: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
5480: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
5490: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
54a0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
54b0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
54c0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
54d0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
54e0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
54f0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
5500: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
5510: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5520: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5530: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5540: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
5550: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5560: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5570: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5580: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5590: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
55a0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
55b0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
55c0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
55d0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
55e0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
55f0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
5600: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
5610: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
5620: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
5630: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5640: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5650: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5660: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
5670: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
5680: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
5690: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
56a0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
56b0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
56c0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
56d0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
56e0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
56f0: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
5700: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
5710: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5720: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
5730: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5740: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
5750: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
5760: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
5770: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
5780: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
5790: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
57a0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
57b0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
57c0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
57d0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
57e0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
57f0: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
5800: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
5810: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
5820: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5830: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
5840: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5850: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
5860: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
5870: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
5880: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
5890: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
58a0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
58b0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
58c0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
58d0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
58e0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
58f0: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
5900: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
5910: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
5920: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
5930: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
5940: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5960: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5970: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5980: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
5990: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
59a0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
59b0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
59c0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
59d0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
59e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
59f0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5a00: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
5a10: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5a20: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
5a30: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5a40: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
5a50: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
5a60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
5a70: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
5a80: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
5a90: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
5aa0: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
5ab0: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
5ac0: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
5ad0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
5ae0: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
5af0: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
5b00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5b10: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5b20: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
5b30: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
5b40: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
5b50: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
5b60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
5b70: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5b80: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
5b90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
5ba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
5bb0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
5bc0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
5bd0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5be0: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
5bf0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5c00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
5c10: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
5c20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
5c30: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
5c40: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
5c50: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
5c60: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
5c70: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
5c80: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
5c90: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
5ca0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
5cb0: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
5cc0: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
5cd0: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
5ce0: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
5cf0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
5d00: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
5d10: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
5d20: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
5d30: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5d40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5d50: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
5d60: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
5d70: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
5d80: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
5d90: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
5da0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
5db0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
5dc0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
5dd0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
5de0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
5df0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
5e00: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5e10: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
5e20: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
5e30: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
5e40: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
5e50: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
5e60: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
5e70: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
5e80: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
5e90: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
5ea0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
5eb0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
5ec0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5ed0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
5ee0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
5ef0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
5f00: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
5f10: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
5f20: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
5f30: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5f40: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5f50: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5f60: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5f70: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5f80: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5f90: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5fa0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5fb0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5fc0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5fd0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
5fe0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5ff0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
6000: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
6010: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
6020: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
6030: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
6040: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6050: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6060: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6070: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6080: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6090: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
60a0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
60b0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
60c0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
60d0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
60e0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
60f0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6100: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6110: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6120: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6130: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6140: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6150: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6160: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6170: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6180: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6190: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
61a0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
61b0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
61c0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
61d0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
61e0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
61f0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6200: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6210: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6220: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6240: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6250: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6260: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6270: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6280: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6290: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
62a0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
62b0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
62c0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
62d0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
62e0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
62f0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6300: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6310: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6320: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6330: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6340: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6350: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6360: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6370: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6380: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6390: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
63a0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
63b0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
63c0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
63d0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
63e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
63f0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6400: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6410: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6420: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6430: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6440: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6450: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6460: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6470: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6480: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6490: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
64a0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
64b0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
64c0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
64d0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
64e0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
64f0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6500: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6510: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6520: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6530: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6540: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6550: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6560: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6570: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6580: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6590: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
65a0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
65b0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
65c0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
65d0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
65e0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
65f0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
6600: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
6610: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
6620: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
6630: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
6640: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
6650: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
6660: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
6670: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
6680: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
6690: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
66a0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
66b0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
66c0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
66d0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
66e0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
66f0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
6700: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
6710: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
6720: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
6730: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
6740: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
6750: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
6760: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
6770: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
6780: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
6790: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
67a0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
67b0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
67c0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
67d0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
67e0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
67f0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
6800: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
6810: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
6820: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
6830: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
6840: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
6850: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6860: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
6870: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
6880: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
6890: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
68a0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
68b0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
68c0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
68d0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
68e0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
68f0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
6900: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
6910: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
6920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
6930: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
6940: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
6950: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
6960: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
6970: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
6980: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
6990: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
69a0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
69b0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
69c0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
69d0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
69e0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
69f0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
6a00: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
6a10: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
6a20: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6a30: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6a40: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
6a50: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
6a60: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
6a70: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
6a80: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
6a90: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
6aa0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
6ab0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
6ac0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6ad0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
6ae0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
6af0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
6b00: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
6b10: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
6b20: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
6b30: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
6b40: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
6b50: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
6b60: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
6b70: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
6b80: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
6b90: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
6ba0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
6bb0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
6bc0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
6bd0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
6be0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
6bf0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
6c00: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
6c10: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
6c20: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
6c30: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
6c40: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
6c50: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c60: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
6c70: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
6c80: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
6c90: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
6ca0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
6cb0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
6cc0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
6cd0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
6ce0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
6cf0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
6d00: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
6d10: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
6d20: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
6d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d40: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
6d50: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
6d60: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
6d70: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
6d80: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
6d90: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
6da0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
6db0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
6dc0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
6dd0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
6de0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
6df0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
6e00: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
6e10: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
6e20: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6e30: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
6e40: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
6e50: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
6e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e70: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
6e80: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
6e90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6ea0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
6eb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
6ec0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
6ed0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
6ee0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
6ef0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
6f00: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
6f10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f20: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
6f30: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6f40: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6f50: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6f60: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6f70: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6f80: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6f90: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6fa0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6fb0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6fc0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6fd0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
6fe0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
6ff0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
7000: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
7010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7020: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
7030: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
7040: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
7050: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
7060: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
7070: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
7080: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
7090: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
70a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
70b0: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
70c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
70d0: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
70e0: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
70f0: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
7100: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
7110: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
7120: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
7130: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
7140: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
7150: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7160: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
7170: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
7180: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
7190: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
71a0: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
71b0: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
71c0: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
71d0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
71e0: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
71f0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7200: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
7210: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
7220: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
7230: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
7240: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
7250: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
7260: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
7270: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
7280: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
7290: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
72a0: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
72b0: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
72c0: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
72d0: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
72e0: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
72f0: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
7300: 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  h;../*.** Defer 
7310: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
7320: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
7330: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
7340: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
7350: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
7360: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
7370: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
7380: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
7390: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
73a0: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
73b0: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
73c0: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
73d0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
73e0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
73f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
7400: 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ache.h"..#includ
7410: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
7420: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20  e "mutex.h"../* 
7430: 57 68 65 6e 20 75 73 69 6e 67 20 61 20 64 65 66  When using a def
7440: 61 75 6c 74 20 77 61 6c 20 73 61 66 65 74 79 20  ault wal safety 
7450: 6c 65 76 65 6c 2c 20 74 68 65 20 73 61 66 65 74  level, the safet
7460: 79 20 6c 65 76 65 6c 20 73 68 6f 75 6c 64 20 6f  y level should o
7470: 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e 67 65 20 77  nly .** change w
7480: 69 74 68 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  ith the journal 
7490: 6d 6f 64 65 20 69 66 20 74 68 65 20 75 73 65 72  mode if the user
74a0: 20 68 61 73 6e 27 74 20 6d 61 6e 75 61 6c 6c 79   hasn't manually
74b0: 20 73 70 65 63 69 66 69 65 64 20 0a 2a 2a 20 70   specified .** p
74c0: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
74d0: 73 2c 20 69 66 20 74 68 65 79 20 68 61 76 65 20  s, if they have 
74e0: 74 68 65 20 64 65 66 61 75 6c 74 73 20 73 68 6f  the defaults sho
74f0: 75 6c 64 6e 27 74 20 62 65 20 61 70 70 6c 69 65  uldn't be applie
7500: 64 2e 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  d..** The SQLITE
7510: 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49 58  _SAFETYLEVEL_FIX
7520: 45 44 20 76 61 6c 75 65 20 69 73 20 4f 52 65 64  ED value is ORed
7530: 20 69 6e 74 6f 20 74 68 65 20 44 62 2d 3e 73 61   into the Db->sa
7540: 66 65 74 79 5f 6c 65 76 65 6c 0a 2a 2a 20 66 69  fety_level.** fi
7550: 65 6c 64 20 77 68 65 6e 20 74 68 65 20 75 73 65  eld when the use
7560: 72 20 68 61 73 20 73 70 65 63 69 66 69 65 64 20  r has specified 
7570: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  a synchronous se
7580: 74 74 69 6e 67 20 76 69 61 20 70 72 61 67 6d 61  tting via pragma
7590: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
75a0: 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f  ITE_SAFETYLEVEL_
75b0: 46 49 58 45 44 20 30 78 31 30 0a 23 64 65 66 69  FIXED 0x10.#defi
75c0: 6e 65 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59  ne SQLITE_SAFETY
75d0: 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d 41 53 4b  LEVEL_VALUE_MASK
75e0: 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20 53 51   0x03.#define SQ
75f0: 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76  LITE_DbSafetyLev
7600: 65 6c 56 61 6c 75 65 28 6c 65 76 65 6c 29 20 28  elValue(level) (
7610: 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53 41 46  level&SQLITE_SAF
7620: 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d  ETYLEVEL_VALUE_M
7630: 41 53 4b 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  ASK).#define SQL
7640: 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76 65  ITE_DbSafetyLeve
7650: 6c 49 73 46 69 78 65 64 28 6c 65 76 65 6c 29 20  lIsFixed(level) 
7660: 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53 41  (level&SQLITE_SA
7670: 46 45 54 59 4c 45 56 45 4c 5f 46 49 58 45 44 29  FETYLEVEL_FIXED)
7680: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
7690: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
76a0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
76b0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
76c0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
76d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
76e0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
76f0: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
7700: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
7710: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
7720: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
7730: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
7740: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
7750: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
7760: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
7770: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7780: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7790: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
77a0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
77b0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
77c0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
77d0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
77e0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
77f0: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
7800: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
7810: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
7820: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
7830: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
7840: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
7850: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
7860: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
7870: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
7880: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
7890: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
78a0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
78b0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
78c0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
78d0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
78e0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
78f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7900: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
7910: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
7920: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
7930: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
7940: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
7950: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
7960: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
7970: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
7980: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
7990: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
79a0: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
79b0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
79c0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
79d0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
79e0: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
79f0: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
7a00: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
7a10: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
7a20: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
7a30: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
7a40: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
7a50: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
7a60: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
7a70: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
7a80: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
7a90: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
7aa0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
7ab0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
7ac0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
7ad0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
7ae0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
7af0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
7b00: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
7b10: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
7b20: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
7b30: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
7b40: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
7b50: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
7b60: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
7b70: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
7b80: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7b90: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
7ba0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
7bb0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
7bc0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
7bd0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
7be0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
7bf0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
7c00: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
7c10: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
7c20: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
7c30: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
7c40: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
7c50: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
7c60: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
7c70: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
7c80: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
7c90: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
7ca0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
7cb0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
7cc0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
7cd0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7ce0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
7cf0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7d00: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
7d10: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
7d20: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
7d30: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
7d40: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
7d50: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
7d60: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
7d70: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
7d80: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
7d90: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
7da0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
7db0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
7dc0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
7dd0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
7de0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
7df0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
7e00: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
7e10: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
7e20: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
7e30: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7e50: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
7e60: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
7e70: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
7e80: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
7e90: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
7ea0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
7eb0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
7ec0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
7ed0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
7ee0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
7ef0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
7f00: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
7f10: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
7f20: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
7f30: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
7f40: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
7f50: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
7f60: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
7f70: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
7f80: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
7f90: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
7fa0: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
7fb0: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
7fc0: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
7fd0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7fe0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
7ff0: 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
8000: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c  DbSetProperty(D,
8010: 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44  I,P)     (D)->aD
8020: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
8030: 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23  hemaFlags|=(P).#
8040: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
8050: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
8060: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8070: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8080: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  &=~(P)../*.** Al
8090: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
80a0: 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d   the DB.pSchema-
80b0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  >flags field..**
80c0: 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d  .** The DB_Schem
80d0: 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20  aLoaded flag is 
80e0: 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61  set after the da
80f0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
8100: 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69  s been.** read i
8110: 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73  nto internal has
8120: 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  h tables..**.** 
8130: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
8140: 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f  means that one o
8150: 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76  r more views hav
8160: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
8170: 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  hat.** have been
8180: 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66   filled out.  If
8190: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
81a0: 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d  ges, these colum
81b0: 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a  n names might.**
81c0: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20   changes and so 
81d0: 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65  the view will ne
81e0: 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a  ed to be reset..
81f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63  */.#define DB_Sc
8200: 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78  hemaLoaded    0x
8210: 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68  0001  /* The sch
8220: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
8230: 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ded */.#define D
8240: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20  B_UnresetViews  
8250: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d    0x0002  /* Som
8260: 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66  e views have def
8270: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
8280: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  s */.#define DB_
8290: 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  Empty           
82a0: 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66  0x0004  /* The f
82b0: 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65  ile is empty (le
82c0: 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f  ngth 0 bytes) */
82d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
82e0: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
82f0: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
8300: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
8310: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
8320: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
8330: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
8340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
8350: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
8360: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
8370: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
8380: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
8390: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
83a0: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
83b0: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
83c0: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
83d0: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
83e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
83f0: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
8400: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
8410: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8420: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8430: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
8440: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
8450: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
8460: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
8470: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
8480: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
8490: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
84a0: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
84b0: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
84c0: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
84d0: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
84e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
84f0: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
8500: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
8510: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
8520: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
8530: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
8540: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
8550: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8560: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
8570: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
8580: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
8590: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
85a0: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
85b0: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
85c0: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
85d0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
85e0: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
85f0: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
8600: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
8610: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8620: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8630: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
8640: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8650: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
8660: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
8670: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
8680: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8690: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
86a0: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
86b0: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
86c0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
86d0: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
86e0: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
86f0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
8700: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
8710: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
8720: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
8730: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
8740: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8750: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
8760: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
8770: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
8780: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8790: 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20  e {.  u16 sz;   
87a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
87b0: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
87c0: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
87d0: 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20  .  u8 bEnabled; 
87e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61             /* Fa
87f0: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e  lse to disable n
8800: 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ew lookaside all
8810: 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  ocations */.  u8
8820: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
8830: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
8840: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
8850: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
8860: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
8870: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
8880: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8890: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
88a0: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
88b0: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
88d0: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
88e0: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
88f0: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
8900: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
8910: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
8920: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
8930: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
8940: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
8950: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
8960: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
8970: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
8980: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8990: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
89a0: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
89b0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
89d0: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
89e0: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
89f0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
8a00: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8a10: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
8a20: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
8a30: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
8a40: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
8a50: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
8a60: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
8a70: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
8a80: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a   definitions..**
8a90: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
8aa0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
8ab0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
8ac0: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
8ad0: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
8ae0: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
8af0: 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68  FuncDef.pHash ch
8b00: 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ain..*/.struct F
8b10: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
8b20: 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20  uncDef *a[23];  
8b30: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
8b40: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
8b50: 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
8b60: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
8b70: 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20  NTICATION./*.** 
8b80: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64  Information held
8b90: 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33   in the "sqlite3
8ba0: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  " database conne
8bb0: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ction object and
8bc0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61   used.** to mana
8bd0: 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69  ge user authenti
8be0: 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  cation..*/.typed
8bf0: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
8c00: 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74  3_userauth sqlit
8c10: 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72  e3_userauth;.str
8c20: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
8c30: 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68  auth {.  u8 auth
8c40: 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
8c50: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
8c60: 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  t authentication
8c70: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20   level */.  int 
8c80: 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  nAuthPW;        
8c90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8ca0: 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57  e of the zAuthPW
8cb0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63   in bytes */.  c
8cc0: 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20  har *zAuthPW;   
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ce0: 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f  Password used to
8cf0: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
8d00: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73  .  char *zAuthUs
8d10: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
8d20: 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73   /* User name us
8d30: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
8d40: 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  te */.};../* All
8d50: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8d60: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
8d70: 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64  .authLevel */.#d
8d80: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e  efine UAUTH_Unkn
8d90: 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a  own     0     /*
8da0: 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   Authentication 
8db0: 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20  not yet checked 
8dc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8dd0: 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20  _Fail        1  
8de0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
8df0: 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
8e00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
8e10: 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20  H_User        2 
8e20: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
8e30: 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c  ated as a normal
8e40: 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65   user */.#define
8e50: 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20   UAUTH_Admin    
8e60: 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68     3     /* Auth
8e70: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20  enticated as an 
8e80: 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f  administrator */
8e90: 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75  ../* Functions u
8ea0: 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72  sed only by user
8eb0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c   authorization l
8ec0: 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ogic */.int sqli
8ed0: 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65  te3UserAuthTable
8ee0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
8ef0: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
8f00: 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c  thCheckLogin(sql
8f10: 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
8f20: 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  *,u8*);.void sql
8f30: 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74  ite3UserAuthInit
8f40: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
8f50: 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e   sqlite3CryptFun
8f60: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
8f70: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
8f80: 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66  alue**);..#endif
8f90: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
8fa0: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
8fb0: 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66  /../*.** typedef
8fc0: 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69   for the authori
8fd0: 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  zation callback 
8fe0: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  function..*/.#if
8ff0: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
9000: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
9010: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
9020: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
9030: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9040: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9050: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9070: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9080: 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
9090: 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74  har*);.#else.  t
90a0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
90b0: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
90c0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
90d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
90e0: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9110: 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
9120: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
9130: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
9140: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
9150: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
9160: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
9170: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
9180: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
9190: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
91a0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
91b0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
91c0: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
91d0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
91e0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
91f0: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
9200: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
9210: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
9220: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
9230: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
9240: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
9250: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
9260: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9270: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
9280: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92a0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
92b0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
92e0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
92f0: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
9300: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
9310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
9320: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
9330: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
9340: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9360: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
9370: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
9380: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
9390: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
93b0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
93c0: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
93d0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
93e0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
93f0: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
9400: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
9410: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
9420: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
9430: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9440: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
9450: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
9460: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9480: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
9490: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
94a0: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
94b0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
94d0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
94e0: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
94f0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
9500: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
9510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9520: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9530: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9540: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9550: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9560: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9570: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9580: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
95a0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
95b0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
95c0: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
95d0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
95e0: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
95f0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
9600: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
9610: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
9620: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9630: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9640: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9650: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9660: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9680: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9690: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
96a0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
96b0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
96c0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
96d0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
96e0: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
96f0: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
9700: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
9710: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
9720: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9730: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9740: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9750: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9760: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9770: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9780: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9790: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
97a0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
97b0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
97c0: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
97d0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
97e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
97f0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
9800: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
9810: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9820: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9840: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
9850: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
9860: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
9870: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
9880: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
9890: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
98a0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
98b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
98c0: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
98d0: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
98e0: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
98f0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
9900: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
9910: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
9920: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
9930: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
9940: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
9950: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
9960: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
9970: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
9980: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
99b0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
99c0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
99d0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
99e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
99f0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
9a00: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
9a10: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
9a20: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
9a30: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
9a40: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
9a50: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
9a60: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
9a70: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
9a80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9a90: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
9aa0: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
9ab0: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ad0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9ae0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9af0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
9b00: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b20: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9b30: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9b40: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
9b50: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9b70: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
9b80: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
9b90: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
9ba0: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
9bb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9bc0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
9bd0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
9be0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9c00: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
9c10: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
9c20: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
9c30: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9c40: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
9c50: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
9c60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
9c70: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9c90: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
9ca0: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
9cb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
9cc0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
9cd0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
9ce0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
9cf0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9d00: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
9d30: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
9d40: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9d50: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9d70: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
9d80: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
9d90: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
9da0: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
9db0: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
9dc0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9dd0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
9de0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
9df0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9e00: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
9e10: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
9e20: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
9e30: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
9e40: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
9e50: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9e60: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
9e70: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
9e80: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
9e90: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
9ea0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9eb0: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
9ec0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
9ed0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
9ee0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
9ef0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
9f00: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
9f10: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
9f20: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
9f30: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
9f40: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
9f50: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
9f60: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
9f70: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
9f80: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
9f90: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
9fa0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
9fb0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
9fc0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
9fd0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
9fe0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
9ff0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
a000: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
a010: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
a020: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
a030: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
a040: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
a050: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
a060: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
a070: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
a080: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
a090: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
a0a0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
a0b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
a0c0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
a0d0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
a0e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a0f0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
a100: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
a110: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
a120: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
a130: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
a140: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
a150: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
a160: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
a170: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
a180: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
a190: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
a1a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a1b0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a1c0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
a1d0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
a1e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
a1f0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
a200: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
a210: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
a220: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
a230: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a240: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
a250: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
a260: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a270: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
a280: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a290: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
a2a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
a2b0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
a2c0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
a2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
a2e0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
a2f0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
a300: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
a310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
a320: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
a330: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
a340: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
a350: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
a360: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a370: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
a380: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
a390: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
a3a0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
a3b0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
a3c0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
a3d0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
a3e0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
a3f0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
a400: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
a410: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
a420: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
a430: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
a440: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
a450: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
a460: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
a470: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
a480: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
a490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
a4a0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a4b0: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
a4c0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
a4d0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
a4e0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
a4f0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
a500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a510: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
a520: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
a530: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
a540: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
a550: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
a560: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
a570: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
a580: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
a590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
a5a0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
a5b0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
a5c0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
a5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a5e0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
a5f0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
a600: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
a610: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
a620: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a630: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
a640: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a650: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
a660: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
a670: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
a680: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
a690: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
a6a0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
a6b0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
a6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
a6d0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
a6e0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
a6f0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
a700: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
a710: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
a720: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
a730: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
a740: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
a750: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
a760: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
a770: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
a780: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
a790: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
a7a0: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
a7b0: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
a7c0: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
a7d0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
a7e0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
a7f0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
a800: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
a810: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
a820: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
a830: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
a840: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
a850: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
a860: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
a870: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
a880: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
a890: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
a8a0: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
a8b0: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
a8c0: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
a8d0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
a8e0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
a8f0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
a900: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
a910: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
a920: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
a930: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
a940: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
a950: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
a960: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
a970: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
a980: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
a990: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
a9a0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
a9b0: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a9d0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
a9e0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
a9f0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
aa00: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
aa10: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
aa20: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
aa30: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
aa40: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
aa50: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
aa60: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
aa70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
aa80: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
aa90: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
aaa0: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
aab0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
aac0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
aad0: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
aae0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
aaf0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
ab00: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
ab10: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
ab20: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
ab30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
ab40: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
ab50: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
ab60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
ab70: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
ab80: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
ab90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aba0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
abb0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
abc0: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
abd0: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
abe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
abf0: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
ac00: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
ac10: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
ac20: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
ac30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
ac40: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
ac50: 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75  00004  /* Use fu
ac60: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
ac70: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
ac80: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
ac90: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
aca0: 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  008  /* Use full
acb0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
acc0: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
acd0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
ace0: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 31  ll     0x0000001
acf0: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
ad00: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
ad10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad20: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
ad30: 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68  x00000020  /* Sh
ad40: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
ad50: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
ad60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ad70: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
ad80: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
ad90: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
ada0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
adb0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
adc0: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
add0: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
ade0: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
adf0: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae20: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
ae30: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
ae40: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae70: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
ae80: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
ae90: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
aea0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
aeb0: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
aec0: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
aed0: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
aee0: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
af20: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
af30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
af40: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
af50: 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0200  /* Debug p
af60: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
af70: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
af80: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
af90: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
afa0: 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  400  /* Debug li
afb0: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
afc0: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
afd0: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
afe0: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
aff0: 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  800  /* OK to up
b000: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
b010: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
b020: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
b030: 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20  ace 0x00001000  
b040: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
b050: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
b060: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b070: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
b080: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
b090: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
b0a0: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
b0b0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
b0c0: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
b0d0: 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20  tted 0x0004000  
b0e0: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
b0f0: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
b100: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
b110: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
b120: 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  8000  /* Create 
b130: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
b140: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
b150: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
b160: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
b170: 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  10000  /* Ignore
b180: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
b190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1a0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
b1b0: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52  0x00020000  /* R
b1c0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
b1d0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
b1e0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
b1f0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34  iggers    0x0004
b200: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
b210: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
b220: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
b230: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
b240: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
b250: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
b260: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
b270: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
b280: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
b290: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
b2a0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
b2b0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
b2c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
b2d0: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
b2e0: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00200000  /* Pre
b2f0: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
b300: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
b310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
b320: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34  Extension  0x004
b330: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
b340: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
b350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b360: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
b370: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
b380: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
b390: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
b3a0: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
b3b0: 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30 30  Ks       0x01000
b3c0: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
b3d0: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
b3e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b3f0: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
b400: 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a    0x02000000  /*
b410: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
b420: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
b430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
b440: 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34 30  EQP        0x040
b450: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
b460: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
b470: 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  AN */.../*.** Bi
b480: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
b490: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
b4a0: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
b4b0: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
b4c0: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
b4d0: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
b4e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
b4f0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
b500: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
b510: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
b520: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
b530: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b540: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
b550: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
b560: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
b570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b580: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
b590: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
b5a0: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
b5b0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
b5c0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
b5d0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
b5e0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
b5f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
b600: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
b610: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
b620: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
b630: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
b640: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
b650: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
b660: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
b670: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
b680: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
b690: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
b6a0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
b6b0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
b6c0: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
b6d0: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
b6e0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
b6f0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
b700: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
b710: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
b720: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
b730: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
b740: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b750: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
b760: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
b770: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
b780: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
b790: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b7a0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
b7b0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
b7c0: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
b7d0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
b7e0: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
b7f0: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
b800: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
b810: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
b820: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b830: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
b840: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
b850: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
b860: 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  a */.#define SQL
b870: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
b880: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
b890: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
b8a0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
b8b0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
b8c0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
b8d0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
b8e0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
b8f0: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
b900: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
b910: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
b920: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
b930: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
b940: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
b950: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
b960: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
b970: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
b980: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
b990: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
b9a0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
b9b0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
b9c0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
b9d0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
b9e0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
b9f0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
ba00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
ba10: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
ba20: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
ba30: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
ba40: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
ba50: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
ba60: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
ba70: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
ba80: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
ba90: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
baa0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
bab0: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
bac0: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
bad0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
bae0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
baf0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
bb00: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
bb10: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
bb20: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
bb30: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
bb40: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
bb50: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
bb60: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
bb70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bb80: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
bb90: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
bba0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
bbb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bbc0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
bbd0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
bbe0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
bbf0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
bc00: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
bc10: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
bc20: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
bc30: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
bc40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bc50: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
bc60: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
bc70: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
bc80: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
bc90: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
bca0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
bcb0: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
bcc0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
bcd0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
bce0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
bcf0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
bd00: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
bd10: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
bd20: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
bd30: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
bd40: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
bd50: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
bd60: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
bd70: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
bd80: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
bd90: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
bda0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
bdb0: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
bdc0: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
bdd0: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
bde0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
bdf0: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
be00: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
be10: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
be20: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
be30: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
be40: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
be50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
be60: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
be70: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
be80: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
be90: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
bea0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
beb0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
bec0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
bed0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
bee0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
bef0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
bf00: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
bf10: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
bf20: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
bf30: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
bf40: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
bf50: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
bf60: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
bf70: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
bf80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
bf90: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
bfa0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
bfb0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
bfc0: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
bfd0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
bfe0: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
bff0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
c000: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
c010: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
c020: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
c030: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
c040: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
c050: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
c060: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
c070: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
c080: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
c090: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
c0a0: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
c0b0: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
c0c0: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
c0d0: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
c0e0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
c0f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
c100: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
c110: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
c120: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
c130: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
c140: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
c150: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
c160: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
c170: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
c180: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
c190: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
c1a0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
c1b0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
c1c0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
c1d0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
c1e0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
c1f0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
c200: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
c210: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
c220: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
c230: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
c240: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
c250: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
c260: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
c270: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
c280: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
c290: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
c2a0: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
c2b0: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
c2c0: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
c2d0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
c2e0: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
c2f0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
c300: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
c310: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
c320: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
c330: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
c340: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
c350: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
c360: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
c370: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
c380: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
c390: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
c3a0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
c3b0: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
c3c0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
c3d0: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
c3e0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
c3f0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
c400: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
c410: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
c420: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
c430: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
c440: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
c450: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
c460: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
c470: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
c480: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
c490: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
c4a0: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
c4b0: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
c4c0: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
c4d0: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
c4e0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
c4f0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
c500: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
c510: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
c520: 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20  CMASK  0x003 /* 
c530: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
c540: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
c550: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
c560: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
c570: 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20  KE     0x004 /* 
c580: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
c590: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
c5a0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c5b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
c5c0: 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73      0x008 /* Cas
c5d0: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
c5e0: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
c5f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c600: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
c610: 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  x010 /* Ephemera
c620: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
c630: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
c640: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
c650: 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71  COLL 0x020 /* sq
c660: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c670: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
c680: 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  alled */.#define
c690: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
c6a0: 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42  GTH   0x040 /* B
c6b0: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
c6c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
c6d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c6e0: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30 20  _TYPEOF   0x080 
c6f0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
c700: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
c710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c720: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
c730: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
c740: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
c750: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
c760: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
c770: 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c  CE 0x200 /* Buil
c780: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
c790: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
c7a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c7b0: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30  NC_UNLIKELY 0x40
c7c0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
c7d0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
c7e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
c7f0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c800: 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74  T 0x800 /* Const
c810: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
c820: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
c830: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
c840: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
c850: 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20   0x1000 /* True 
c860: 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61  for min() and ma
c870: 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a  x() aggregates *
c880: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
c890: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
c8a0: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
c8b0: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
c8c0: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
c8d0: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
c8e0: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
c8f0: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
c900: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
c910: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
c920: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
c930: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
c940: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c950: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c960: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c970: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c980: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
c990: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
c9a0: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
c9b0: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
c9c0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
c9d0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
c9e0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
c9f0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
ca00: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
ca10: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
ca20: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
ca30: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
ca40: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
ca50: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
ca60: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
ca70: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
ca80: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ca90: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
caa0: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
cab0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
cac0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
cad0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
cae0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
caf0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
cb00: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
cb10: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ag..**.**   AGGR
cb20: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
cb30: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
cb40: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
cb50: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
cb60: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
cb70: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
cb80: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
cb90: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
cba0: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
cbb0: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
cbc0: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
cbd0: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
cbe0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
cbf0: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
cc00: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
cc10: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
cc20: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
cc30: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
cc40: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
cc50: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
cc60: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
cc70: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
cc80: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
cc90: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
cca0: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
ccb0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
ccc0: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
ccd0: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
cce0: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
ccf0: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
cd00: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
cd10: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
cd20: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
cd30: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
cd40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
cd50: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
cd60: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
cd70: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
cd80: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
cd90: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
cda0: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
cdb0: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
cdc0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
cdd0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
cde0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
cdf0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
ce00: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
ce10: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
ce20: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
ce30: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ce40: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
ce50: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
ce60: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
ce70: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
ce80: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
ce90: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
cea0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
ceb0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
cec0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
ced0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
cee0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
cef0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
cf00: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
cf10: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
cf20: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
cf30: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
cf40: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
cf50: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
cf60: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
cf70: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
cf80: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
cf90: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
cfa0: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
cfb0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
cfc0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
cfd0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
cfe0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
cff0: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
d000: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
d010: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
d020: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d030: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
d040: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
d050: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
d060: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
d070: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
d080: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d090: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
d0a0: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
d0b0: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
d0c0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d0d0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d0e0: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
d0f0: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
d100: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
d110: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d120: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
d130: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
d140: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
d150: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
d160: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
d170: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
d180: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
d190: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
d1a0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
d1b0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
d1c0: 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  ,0,0}.#define AG
d1d0: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
d1e0: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d1f0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
d200: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
d210: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
d220: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
d230: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d240: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
d250: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
d260: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
d270: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
d280: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
d290: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
d2a0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
d2b0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
d2c0: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
d2d0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
d2e0: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
d2f0: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
d300: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
d310: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
d320: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
d330: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
d340: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
d350: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
d360: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
d370: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
d380: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
d390: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d3b0: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
d3c0: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
d3d0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
d3e0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
d3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d400: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
d410: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
d420: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d430: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
d440: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d450: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
d460: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
d470: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d490: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
d4a0: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
d4b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
d4c0: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
d4d0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
d4e0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
d4f0: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
d500: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
d510: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
d520: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
d530: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
d540: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
d550: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
d560: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
d570: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
d580: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
d590: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
d5a0: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
d5b0: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
d5c0: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
d5d0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
d5e0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
d5f0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
d600: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
d610: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
d620: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
d630: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
d640: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
d650: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
d660: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
d670: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
d680: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
d690: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d6b0: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
d6c0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
d6d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
d700: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
d710: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d720: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
d730: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
d740: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
d750: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
d760: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
d770: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
d780: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
d790: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
d7a0: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
d7b0: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
d7c0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
d7d0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
d7e0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d7f0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
d800: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
d810: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
d820: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
d830: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
d840: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
d850: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
d860: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
d870: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
d880: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
d890: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
d8a0: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
d8b0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
d8c0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
d8d0: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
d8e0: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
d8f0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
d900: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
d910: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
d920: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
d930: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
d940: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
d950: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
d960: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
d970: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
d980: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
d990: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
d9a0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20  f this column.  
d9b0: 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  INT==1 */.  u8 c
d9c0: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
d9d0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
d9e0: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
d9f0: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
da00: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
da10: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
da20: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
da30: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
da40: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
da50: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
da60: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
da70: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
da80: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
da90: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
daa0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
dab0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
dac0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
dad0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
dae0: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
daf0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
db00: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
db10: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
db20: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
db30: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
db40: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
db50: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
db60: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
db70: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
db80: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
db90: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
dba0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
dbb0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
dbc0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
dbd0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
dbe0: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
dbf0: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
dc00: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
dc10: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
dc20: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
dc30: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
dc40: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
dc50: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
dc60: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
dc70: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
dc80: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
dc90: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
dca0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
dcb0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
dcc0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
dcd0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
dce0: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
dcf0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
dd00: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
dd10: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
dd20: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
dd30: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
dd40: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
dd50: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
dd60: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
dd70: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
dd80: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
dd90: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
dda0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
ddb0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
ddc0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
ddd0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
dde0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
ddf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de00: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
de10: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
de20: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
de30: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
de40: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
de50: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
de60: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
de70: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
de80: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
de90: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
dea0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
deb0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
dec0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
ded0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
dee0: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
def0: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
df00: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
df10: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
df20: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
df30: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
df40: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
df50: 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
df60: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
df70: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
df80: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
df90: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
dfa0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
dfb0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
dfc0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
dfd0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
dfe0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
dff0: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
e000: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
e010: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
e020: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
e030: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
e040: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
e050: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
e060: 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20 69 73  the NONE type is
e070: 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
e080: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
e090: 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  NE     'A'.#defi
e0a0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
e0b0: 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
e0c0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
e0d0: 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
e0e0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
e0f0: 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
e100: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
e110: 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
e120: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
e130: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
e140: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
e150: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
e160: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
e170: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
e180: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
e190: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
e1a0: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
e1b0: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
e1c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e1d0: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
e1e0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
e1f0: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
e200: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
e210: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
e220: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
e230: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
e240: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
e250: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
e260: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
e270: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
e280: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
e290: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
e2a0: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
e2b0: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
e2c0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
e2d0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
e2e0: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
e2f0: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
e300: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
e310: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
e320: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
e330: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
e340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
e350: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
e360: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
e370: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e380: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
e390: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
e3a0: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
e3b0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
e3c0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
e3d0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
e3e0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
e3f0: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
e400: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
e410: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
e420: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
e430: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
e440: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
e450: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
e460: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
e470: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
e480: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
e490: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
e4a0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
e4b0: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
e4c0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
e4d0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
e4e0: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
e4f0: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
e500: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
e510: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
e520: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
e530: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
e540: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
e550: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
e560: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
e570: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e580: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
e590: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
e5a0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
e5b0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
e5c0: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
e5d0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
e5e0: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
e5f0: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
e600: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
e610: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
e620: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
e630: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
e640: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
e650: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
e660: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
e670: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
e680: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
e690: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
e6a0: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
e6b0: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
e6c0: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
e6d0: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
e6e0: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
e6f0: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
e700: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
e710: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
e720: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
e730: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
e740: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
e750: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
e760: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
e770: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
e780: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
e790: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
e7a0: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
e7b0: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
e7c0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
e7d0: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
e7e0: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
e7f0: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
e800: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
e810: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
e820: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
e830: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
e840: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
e850: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
e860: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
e870: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
e880: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
e890: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
e8a0: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
e8b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
e8c0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
e8d0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
e8e0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
e8f0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
e900: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
e910: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
e920: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
e930: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
e940: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
e950: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
e960: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
e970: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
e980: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
e990: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
e9a0: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
e9b0: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
e9c0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
e9d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e9e0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
e9f0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
ea00: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
ea10: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
ea20: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
ea30: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
ea40: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
ea50: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
ea60: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
ea70: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
ea80: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
ea90: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
eaa0: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
eab0: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
eac0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
ead0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
eae0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
eaf0: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
eb00: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
eb10: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
eb20: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
eb30: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
eb40: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
eb50: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
eb60: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
eb70: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
eb80: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
eb90: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
eba0: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
ebb0: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
ebc0: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
ebd0: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
ebe0: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
ebf0: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
ec00: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
ec10: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
ec20: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
ec30: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
ec40: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
ec50: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
ec60: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
ec70: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
ec80: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
ec90: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
eca0: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
ecb0: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
ecc0: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
ecd0: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
ece0: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
ecf0: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
ed00: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
ed10: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
ed20: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
ed30: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
ed40: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
ed50: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
ed60: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
ed70: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
ed80: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
ed90: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
eda0: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
edb0: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
edc0: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
edd0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
ede0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
edf0: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
ee00: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
ee10: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
ee20: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
ee30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
ee40: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
ee50: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
ee60: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
ee70: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
ee80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
ee90: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
eea0: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
eeb0: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
eec0: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
eed0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
eee0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
eef0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
ef00: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
ef10: 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
ef20: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ef30: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
ef40: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
ef50: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
ef60: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
ef70: 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
ef80: 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
ef90: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
efa0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
efb0: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
efc0: 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
efd0: 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
efe0: 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69  Each SQL table i
eff0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
f000: 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e   memory by an in
f010: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a  stance of the.**
f020: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
f030: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  ture..**.** Tabl
f040: 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e  e.zName is the n
f050: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
f060: 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66 20 74  .  The case of t
f070: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43  he original.** C
f080: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
f090: 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c  ement is stored,
f0a0: 20 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74   but case is not
f0b0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72   significant for
f0c0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  .** comparisons.
f0d0: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f  .**.** Table.nCo
f0e0: 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  l is the number 
f0f0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f100: 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65  is table.  Table
f110: 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f  .aCol is a.** po
f120: 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61  inter to an arra
f130: 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75  y of Column stru
f140: 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20  ctures, one for 
f150: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a  each column..**.
f160: 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
f170: 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50  has an INTEGER P
f180: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
f190: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
f1a0: 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20  the index of.** 
f1b0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  the column that 
f1c0: 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f  is that key.   O
f1d0: 74 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69  therwise Table.i
f1e0: 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76 65  PKey is negative
f1f0: 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20  .  Note.** that 
f200: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
f210: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
f220: 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45 52 20  must be INTEGER 
f230: 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20 74  for this field t
f240: 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e  o.** be set.  An
f250: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
f260: 20 4b 45 59 20 69 73 20 75 73 65 64 20 61 73 20   KEY is used as 
f270: 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61  the rowid for ea
f280: 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65  ch row of.** the
f290: 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61   table.  If a ta
f2a0: 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47  ble has no INTEG
f2b0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
f2c0: 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f  then a random ro
f2d0: 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61  wid.** is genera
f2e0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
f2f0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
f300: 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
f310: 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68   is set if.** th
f320: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20  e table has any 
f330: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54  PRIMARY KEY, INT
f340: 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73  EGER or otherwis
f350: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74  e..**.** Table.t
f360: 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67 65 20  num is the page 
f370: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72  number for the r
f380: 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 6f  oot BTree page o
f390: 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74  f the table in t
f3a0: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  he.** database f
f3b0: 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69  ile.  If Table.i
f3c0: 44 62 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  Db is the index 
f3d0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
f3e0: 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a  table backend.**
f3f0: 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d   in sqlite.aDb[]
f400: 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68 65 20  .  0 is for the 
f410: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e  main database an
f420: 64 20 31 20 69 73 20 66 6f 72 20 74 68 65 20 66  d 1 is for the f
f430: 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64  ile that.** hold
f440: 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  s temporary tabl
f450: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20  es and indices. 
f460: 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c   If TF_Ephemeral
f470: 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20   is set.** then 
f480: 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f  the table is sto
f490: 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68  red in a file th
f4a0: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
f4b0: 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77  lly deleted.** w
f4c0: 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75 72  hen the VDBE cur
f4d0: 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65  sor to the table
f4e0: 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20   is closed.  In 
f4f0: 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e  this case Table.
f500: 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20  tnum .** refers 
f510: 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
f520: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
f530: 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f  e table open, no
f540: 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a  t to the root.**
f550: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54   page number.  T
f560: 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20  ransient tables 
f570: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
f580: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
f590: 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74  a.** sub-query t
f5a0: 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73 74  hat appears inst
f5b0: 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61  ead of a real ta
f5c0: 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20  ble name in the 
f5d0: 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20  FROM clause .** 
f5e0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
f5f0: 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
f600: 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
f610: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f620: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
f630: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
f640: 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
f650: 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
f660: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
f670: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
f680: 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
f690: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
f6a0: 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
f6b0: 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
f6c0: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
f6d0: 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
f6e0: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
f6f0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
f700: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
f710: 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
f720: 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
f730: 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
f740: 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
f750: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
f760: 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
f770: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
f780: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
f790: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69  ach column */.#i
f7a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f7b0: 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69  T_CHECK.  ExprLi
f7c0: 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
f7d0: 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
f7e0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69  traints */.#endi
f7f0: 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  f.  LogEst nRowL
f800: 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
f810: 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
f820: 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
f830: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
f840: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
f850: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
f860: 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74  BTree node for t
f870: 68 69 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e  his table (see n
f880: 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  ote above) */.  
f890: 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
f8a0: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
f8b0: 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
f8c0: 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
f8d0: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20  primary key */. 
f8e0: 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20   i16 nCol;      
f8f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f900: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f910: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31  is table */.  u1
f920: 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  6 nRef;         
f930: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f940: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
f950: 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   Table */.  LogE
f960: 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
f970: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f980: 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
f990: 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
f9a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f9b0: 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
f9c0: 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
f9d0: 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
f9e0: 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
f9f0: 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
fa00: 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62  .#endif.  u8 tab
fa10: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
fa20: 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
fa30: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65  alues */.  u8 ke
fa40: 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
fa50: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
fa60: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
fa70: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
fa80: 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
fa90: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
faa0: 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
fab0: 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
fac0: 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
fad0: 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
fae0: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
faf0: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
fb00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
fb10: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
fb20: 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
fb30: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fb40: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
fb50: 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
fb60: 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
fb70: 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c  ;  /* Text of al
fb80: 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b  l module args. [
fb90: 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d  0] is module nam
fba0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  e */.  VTable *p
fbb0: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
fbc0: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
fbd0: 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
fbe0: 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
fbf0: 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
fc00: 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
fc10: 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
fc20: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
fc30: 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
fc40: 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
fc50: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
fc60: 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
fc70: 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
fc80: 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
fc90: 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
fca0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
fcb0: 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
fcc0: 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  tabFlags..*/.#de
fcd0: 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
fce0: 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
fcf0: 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
fd00: 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
fd10: 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
fd20: 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
fd30: 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
fd40: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
fd50: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
fd60: 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
fd70: 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
fd80: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
fd90: 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
fda0: 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
fdb0: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
fdc0: 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
fdd0: 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
fde0: 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
fdf0: 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
fe00: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
fe10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
fe20: 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
fe30: 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
fe40: 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59  id used. PRIMARY
fe50: 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
fe60: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
fe70: 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
fe80: 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
fe90: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
fea0: 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
feb0: 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
fec0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
fed0: 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
fee0: 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
fef0: 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
ff00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
ff10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
ff20: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
ff30: 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
ff40: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
ff50: 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
ff60: 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
ff70: 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66  tual)!=0).#  def
ff80: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
ff90: 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
ffa0: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
ffb0: 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73  HIDDEN)!=0).#els
ffc0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
ffd0: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
ffe0: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
fff0: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
10000 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  ndif../* Does th
10010 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
10020 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
10030 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
10040 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
10050 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
10060 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
10070 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
10080 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
10090 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
100a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
100b0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
100c0 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
100d0 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
100e0 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
100f0 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
10100 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
10110 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
10120 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
10130 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
10140 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
10150 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
10160 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
10170 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
10180 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10190 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
101a0 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
101b0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
101c0 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
101d0 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
101e0 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
101f0 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
10200 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
10210 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
10220 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
10230 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
10240 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
10250 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
10260 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10270 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
10280 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
10290 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
102a0 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
102b0 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
102c0 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
102d0 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
102e0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
102f0 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
10300 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10310 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10320 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
10330 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
10340 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
10350 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
10360 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
10370 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10380 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
10390 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
103a0 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
103b0 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
103c0 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
103d0 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
103e0 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
103f0 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
10400 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
10410 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
10420 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
10430 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
10440 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
10450 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
10460 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
10470 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
10480 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
10490 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
104a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
104b0 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
104c0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
104d0 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
104e0 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
104f0 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
10500 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
10510 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
10520 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
10530 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
10540 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
10550 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
10560 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
10570 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
10580 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
10590 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
105a0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
105b0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
105c0 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
105d0 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
105e0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
105f0 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
10600 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10610 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10620 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
10630 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
10640 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
10650 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
10660 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
10670 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
10680 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
10690 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
106a0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
106b0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
106c0 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
106d0 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
106e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
106f0 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
10700 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
10710 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
10720 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
10730 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
10740 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
10750 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
10760 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
10770 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
10780 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
10790 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
107a0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
107b0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
107c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
107d0 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
107e0 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
107f0 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
10800 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
10810 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
10820 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
10830 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
10840 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
10850 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
10860 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
10870 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
10880 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
10890 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
108a0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
108b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
108c0 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
108d0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
108e0 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
108f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
10900 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
10910 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
10920 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
10930 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
10940 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
10950 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
10960 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
10970 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
10980 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
10990 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
109a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
109b0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
109c0 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
109d0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
109e0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
109f0 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
10a00 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
10a10 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
10a20 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
10a30 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
10a40 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
10a50 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
10a60 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
10a70 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
10a80 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
10a90 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
10aa0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
10ab0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
10ac0 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
10ad0 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
10ae0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
10af0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
10b00 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
10b10 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
10b20 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
10b30 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
10b40 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
10b50 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
10b60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
10b70 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
10b80 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
10b90 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
10ba0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
10bb0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
10bc0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
10bd0 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
10be0 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
10bf0 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
10c00 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
10c10 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
10c20 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
10c30 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
10c40 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
10c50 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
10c60 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
10c70 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
10c80 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
10c90 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
10ca0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
10cb0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
10cc0 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
10cd0 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
10ce0 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
10cf0 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
10d00 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
10d10 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
10d20 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
10d30 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
10d40 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
10d50 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
10d60 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
10d70 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
10d80 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
10d90 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
10da0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
10db0 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
10dc0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
10dd0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
10de0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
10df0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
10e00 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
10e10 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
10e20 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
10e30 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
10e40 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
10e50 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
10e60 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
10e70 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
10e80 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
10e90 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
10ea0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
10eb0 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
10ec0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
10ed0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
10ee0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
10ef0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
10f00 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
10f10 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
10f20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
10f30 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
10f40 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
10f50 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
10f60 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
10f70 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
10f80 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
10f90 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
10fa0 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
10fb0 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
10fc0 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
10fd0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
10fe0 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
10ff0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
11000 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
11010 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
11020 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
11030 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
11040 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
11050 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
11060 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
11070 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
11080 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
11090 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
110a0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
110b0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
110c0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
110d0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
110e0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
110f0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
11100 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
11110 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
11120 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
11130 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
11140 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
11150 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
11160 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
11170 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
11180 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
11190 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
111a0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
111b0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
111c0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
111d0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
111e0 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
111f0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
11200 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
11210 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
11220 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
11230 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
11240 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
11250 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
11260 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
11270 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
11280 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
11290 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
112a0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
112b0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
112c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
112d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
112e0 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
112f0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
11300 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11310 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
11320 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
11330 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
11340 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
11350 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
11360 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11370 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
11380 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
11390 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
113a0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
113b0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
113c0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
113d0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
113e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
113f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11400 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11410 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
11420 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
11430 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
11440 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
11450 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
11460 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
11470 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
11480 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
11490 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
114a0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
114b0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
114c0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
114d0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
114e0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
114f0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
11500 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
11510 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
11520 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
11530 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
11540 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
11550 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
11560 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
11570 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
11580 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
11590 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
115a0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
115b0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
115c0 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
115d0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
115e0 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
115f0 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
11600 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a  ent fields..**.*
11610 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
11620 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73  member variables
11630 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62   are only used b
11640 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20  y the optimized 
11650 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75  comparison.** fu
11660 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f  nctions vdbeReco
11670 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61  rdCompareInt() a
11680 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d  nd vdbeRecordCom
11690 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f  pareString()..*/
116a0 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
116b0 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
116c0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
116d0 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
116e0 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
116f0 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
11700 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
11710 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
11720 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
11730 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
11740 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
11750 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
11760 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
11770 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
11780 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
11790 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
117a0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
117b0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
117c0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
117d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
117e0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20  es */.  int r1; 
117f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
11800 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
11810 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
11820 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20  .  int r2;      
11830 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
11840 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68  to return if (rh
11850 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a  s < lhs) */.};..
11860 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
11870 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
11880 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
11890 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
118a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
118b0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
118c0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
118d0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
118e0 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
118f0 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
11900 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
11910 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
11920 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
11930 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
11940 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
11950 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
11960 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
11970 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
11980 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
11990 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
119a0 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
119b0 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
119c0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
119d0 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
119e0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
119f0 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
11a00 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
11a10 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
11a20 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
11a30 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
11a40 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
11a50 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
11a60 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
11a70 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
11a80 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
11a90 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
11aa0 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
11ab0 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
11ac0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
11ad0 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
11ae0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
11af0 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
11b00 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
11b10 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
11b20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
11b30 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
11b40 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
11b50 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
11b60 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
11b70 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
11b80 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
11b90 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
11ba0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
11bb0 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
11bc0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
11bd0 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
11be0 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
11bf0 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
11c00 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
11c10 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
11c20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
11c30 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
11c40 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
11c50 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
11c60 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
11c70 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
11c80 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
11c90 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
11ca0 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
11cb0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
11cc0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
11cd0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
11ce0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
11cf0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
11d00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
11d10 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
11d20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
11d30 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
11d40 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
11d50 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11d60 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
11d70 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
11d80 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
11d90 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
11da0 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
11db0 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
11dc0 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
11dd0 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
11de0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
11df0 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
11e00 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
11e10 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
11e20 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
11e30 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
11e40 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
11e50 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
11e60 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
11e70 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
11e80 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
11e90 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
11ea0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11eb0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
11ec0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
11ed0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
11ee0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
11ef0 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
11f00 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11f10 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
11f20 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
11f30 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
11f40 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
11f50 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
11f60 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
11f70 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
11f80 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
11f90 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
11fa0 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
11fb0 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
11fc0 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
11fd0 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e  dices */.  KeyIn
11fe0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20  fo *pKeyInfo;   
11ff0 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f      /* A KeyInfo
12000 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c 65   object suitable
12010 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
12020 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12040 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
12050 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
12060 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
12070 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
12080 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
12090 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
120a0 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
120b0 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
120c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
120d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
120e0 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
120f0 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12110 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
12120 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
12130 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
12140 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
12150 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
12160 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
12170 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
12180 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
12190 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
121a0 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
121b0 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
121c0 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
121d0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
121e0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
121f0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
12200 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
12210 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
12220 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
12230 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
12240 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
12250 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
12260 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
12270 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
12280 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
12290 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
122a0 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
122b0 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
122c0 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
122d0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
122e0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
122f0 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
12300 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
12310 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
12320 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
12330 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66  n if true */.#if
12340 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
12350 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
12360 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
12370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12380 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
12390 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
123a0 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
123b0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
123c0 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
123d0 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
123e0 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
123f0 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
12400 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
12410 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
12420 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
12430 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
12440 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
12450 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
12460 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
12470 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
12480 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
12490 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
124a0 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
124b0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
124c0 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
124d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
124e0 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
124f0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
12500 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
12510 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
12520 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
12530 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
12540 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
12550 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
12560 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
12570 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
12580 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
12590 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
125a0 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
125b0 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
125c0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
125d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
125e0 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
125f0 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
12600 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
12610 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
12620 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
12630 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
12640 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
12650 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
12660 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
12670 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
12680 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
12690 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
126a0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
126b0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
126c0 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
126d0 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
126e0 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
126f0 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
12700 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  ne)../*.** Each 
12710 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
12720 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
12730 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
12740 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
12750 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72   .** using a str
12760 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
12770 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
12780 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
12790 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
127a0 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
127b0 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
127c0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
127d0 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
127e0 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
127f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
12800 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
12810 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12820 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
12830 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
12840 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
12850 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
12860 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
12870 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
12880 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
12890 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
128a0 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
128b0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
128c0 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
128d0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
128e0 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
128f0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
12900 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
12910 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
12920 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
12930 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
12940 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
12950 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
12960 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
12970 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
12980 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
12990 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
129a0 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
129b0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
129c0 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
129d0 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
129e0 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
129f0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
12a00 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
12a10 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
12a20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
12a30 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
12a40 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
12a50 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
12a60 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
12a70 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
12a80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
12a90 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
12aa0 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
12ab0 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
12ac0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
12ad0 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
12ae0 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
12af0 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
12b00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
12b10 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
12b20 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
12b30 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
12b40 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
12b50 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
12b60 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
12b70 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
12b80 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
12b90 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
12ba0 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
12bb0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
12bc0 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
12bd0 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
12be0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
12bf0 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
12c00 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
12c10 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
12c20 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
12c30 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
12c40 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
12c50 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
12c60 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
12c70 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
12c80 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
12c90 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
12ca0 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
12cb0 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
12cc0 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
12cd0 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
12ce0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
12cf0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
12d00 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
12d10 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
12d20 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
12d30 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
12d40 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
12d50 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
12d60 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
12d70 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
12d80 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
12d90 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
12da0 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
12db0 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
12de0 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
12df0 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
12e00 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
12e10 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
12e20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
12e30 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
12e40 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
12e50 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
12e80 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
12e90 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
12ea0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
12eb0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
12ec0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
12ed0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
12ee0 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
12ef0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
12f00 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
12f10 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
12f20 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
12f30 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
12f40 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
12f50 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
12f60 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
12f70 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
12f80 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
12f90 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
12fa0 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
12fb0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
12fc0 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
12fd0 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
12fe0 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
12ff0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
13000 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
13010 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
13020 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
13030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
13040 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13050 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
13060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
13070 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13080 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
13090 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
130a0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
130b0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
130c0 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
130d0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
130e0 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
130f0 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
13100 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
13110 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
13120 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
13150 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
13160 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
13170 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
13180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
13190 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
131a0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
131b0 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
131c0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
131d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
131e0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
131f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
13200 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
13210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
13220 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
13230 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
13240 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
13270 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
13280 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
13290 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
132b0 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
132c0 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
132d0 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
132e0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
132f0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13300 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
13310 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
13320 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
13330 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
13340 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
13350 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
13360 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
13370 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
13380 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
13390 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
133b0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
133c0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
133d0 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
133e0 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
133f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
13400 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
13410 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
13420 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
13430 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
13440 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
13450 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
13460 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
13470 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
13480 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
13490 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
134a0 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
134b0 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
134c0 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
134d0 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
134e0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
134f0 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
13500 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
13510 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
13520 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
13530 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
13540 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
13550 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
13560 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
13570 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
13580 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
13590 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
135a0 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
135b0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
135c0 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
135d0 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
135e0 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
135f0 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
13600 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
13610 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
13620 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
13630 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
13640 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
13650 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
13660 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
13670 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
13680 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
13690 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
136a0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
136b0 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
136c0 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
136d0 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
136e0 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
136f0 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
13700 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
13710 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
13720 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
13730 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
13740 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
13750 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
13760 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
13770 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
13780 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
13790 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
137a0 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
137b0 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
137c0 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
137d0 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
137e0 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
137f0 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
13800 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
13810 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
13820 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
13830 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
13840 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
13850 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
13860 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
13870 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
13880 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13890 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
138a0 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
138b0 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
138c0 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
138d0 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
138e0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
138f0 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
13900 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
13910 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13920 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
13930 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
13940 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
13950 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
13960 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
13970 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
13980 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
13990 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
139a0 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
139b0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
139c0 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
139d0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
139e0 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
139f0 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
13a00 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
13a10 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
13a20 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
13a30 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
13a40 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
13a50 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
13a60 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
13a70 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
13a80 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
13a90 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
13aa0 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
13ab0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
13ac0 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
13ad0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
13ae0 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
13af0 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
13b00 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
13b10 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
13b20 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
13b30 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
13b40 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
13b50 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
13b60 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
13b70 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
13b80 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
13b90 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
13ba0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
13bb0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
13bc0 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
13bd0 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
13be0 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
13bf0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
13c00 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
13c10 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
13c20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
13c30 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
13c40 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
13c50 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
13c60 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
13c70 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
13c80 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
13c90 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13ca0 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
13cb0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
13cc0 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
13cd0 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
13ce0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
13cf0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
13d00 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
13d10 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
13d20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
13d30 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
13d40 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
13d50 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
13d60 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
13d70 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
13d80 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
13d90 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
13da0 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
13db0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
13dc0 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
13dd0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
13de0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13df0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
13e00 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
13e10 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
13e20 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
13e30 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
13e40 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
13e50 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
13e60 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
13e70 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
13e80 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
13e90 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
13ea0 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
13eb0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
13ec0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
13ed0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
13ee0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
13ef0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
13f00 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
13f10 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
13f20 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
13f30 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
13f40 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
13f50 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
13f60 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
13f70 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
13f80 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
13f90 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
13fa0 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
13fb0 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
13fc0 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
13fd0 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
13fe0 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
13ff0 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
14000 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
14010 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
14020 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
14030 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
14040 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
14050 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
14060 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
14070 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
14080 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
14090 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
140a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
140b0 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
140c0 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
140d0 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
140e0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
140f0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
14100 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
14110 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
14120 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
14130 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
14140 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
14150 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
14160 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
14170 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
14180 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
14190 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
141a0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
141b0 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
141c0 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
141d0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
141e0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
141f0 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
14200 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
14210 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
14220 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
14230 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
14240 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
14250 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
14260 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
14270 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
14280 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
14290 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
142a0 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
142b0 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
142c0 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
142d0 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
142e0 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
142f0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
14300 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
14310 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
14320 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
14330 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
14340 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
14350 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
14360 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
14370 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
14380 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
14390 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
143a0 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
143c0 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
143d0 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
143e0 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
143f0 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
14400 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
14410 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
14420 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
14430 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
14440 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14450 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
14460 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
14470 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
14480 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
14490 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
144a0 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
144b0 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
144c0 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
144d0 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
144e0 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
144f0 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
14500 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
14510 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
14520 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
14530 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
14540 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
14550 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
14560 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
14570 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
14580 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
14590 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
145a0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
145b0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
145c0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
145d0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
145e0 2e 20 0a 20 20 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 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
14630 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
14640 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
14650 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
14660 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
14670 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
14680 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
14690 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
146a0 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
146b0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
146c0 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
146d0 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
146e0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
146f0 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
14700 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
14710 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
14720 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
14730 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
14740 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
14750 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
14760 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14770 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
14780 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
14790 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
147a0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
147b0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
147c0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
147d0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
147e0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
147f0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
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 2a 2a 2a 2a 2a 2a 2a  ****************
14830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
14840 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
14850 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
14860 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
14870 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
14880 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
14890 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
148a0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
148b0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
148c0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
148d0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
148e0 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
148f0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14910 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
14920 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
14950 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
14960 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
14990 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
149a0 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f  es likelihood */
149b0 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
149c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
149d0 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
149e0 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
149f0 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14a10 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
14a20 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
14a30 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
14a40 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
14a50 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
14a60 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
14a70 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
14a80 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
14a90 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
14aa0 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
14ab0 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
14ac0 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
14ad0 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
14b00 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
14b10 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
14b40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
14b50 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
14b80 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
14b90 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
14ba0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
14bb0 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
14bc0 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
14bd0 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
14be0 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
14bf0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
14c00 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
14c10 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
14c20 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  s. */.};../*.** 
14c30 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
14c40 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
14c50 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
14c60 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
14c70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
14c80 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
14c90 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69   /* Originated i
14ca0 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  n ON or USING cl
14cb0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
14cc0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
14cd0 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
14ce0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
14cf0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
14d00 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
14d10 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
14d20 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
14d30 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
14d40 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
14d50 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
14d60 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
14d70 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
14d80 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
14d90 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
14da0 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
14db0 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
14dc0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
14dd0 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
14de0 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
14df0 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
14e00 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
14e10 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
14e20 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
14e30 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
14e40 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
14e50 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
14e60 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
14e70 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
14e80 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
14e90 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
14ea0 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
14eb0 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
14ec0 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
14ed0 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
14ee0 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
14ef0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
14f00 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
14f10 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
14f20 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
14f30 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
14f40 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
14f50 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
14f60 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
14f70 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
14f80 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
14f90 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
14fa0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
14fb0 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
14fc0 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
14fd0 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
14fe0 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
14ff0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
15000 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
15010 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
15020 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
15030 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
15040 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
15050 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
15060 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
15070 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
15080 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
15090 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
150a0 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
150b0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
150c0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
150d0 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
150e0 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
150f0 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
15100 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
15110 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
15120 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
15130 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
15140 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
15150 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
15160 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
15170 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
15180 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
15190 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
151a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
151b0 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
151c0 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
151d0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
151e0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
151f0 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20  ine EP_Constant 
15200 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64   0x080000 /* Nod
15210 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
15220 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  */../*.** These 
15230 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
15240 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
15250 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
15260 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66  n the .** Expr.f
15270 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
15280 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
15290 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
152a0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
152b0 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
152c0 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
152d0 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
152e0 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
152f0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
15300 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
15310 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
15320 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
15330 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
15340 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
15350 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
15360 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
15370 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
15380 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
15390 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
153a0 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
153b0 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
153c0 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
153d0 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
153e0 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
153f0 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
15400 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
15410 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
15420 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
15430 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
15440 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
15450 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
15460 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
15470 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
15480 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
15490 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
154a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
154b0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
154c0 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20  normal Expr .** 
154d0 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
154e0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
154f0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
15500 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
15510 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  s .** and an Exp
15520 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
15530 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
15540 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
15550 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
15560 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
15570 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
15580 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
15590 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
155a0 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
155b0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
155c0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
155d0 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
155e0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
155f0 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
15600 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
15610 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
15620 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
15630 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
15640 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
15650 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
15660 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
15670 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f   comment .** abo
15680 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
15690 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
156a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
156b0 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
156c0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
156d0 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
156e0 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
156f0 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
15700 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
15710 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
15720 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
15730 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
15740 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
15750 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
15760 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
15770 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
15780 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
15790 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
157a0 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
157b0 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
157c0 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
157d0 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
157e0 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
157f0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
15800 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
15810 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
15820 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
15830 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
15840 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
15850 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
15860 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
15870 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
15880 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
15890 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
158a0 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
158b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
158c0 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
158d0 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
158e0 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
158f0 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
15900 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
15910 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
15920 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
15930 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
15940 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
15950 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
15960 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
15970 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
15980 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
15990 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
159a0 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
159b0 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
159c0 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
159d0 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
159e0 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
159f0 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
15a00 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
15a10 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
15a20 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
15a30 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
15a40 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
15a50 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
15a60 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
15a70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15a80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
15a90 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
15aa0 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
15ab0 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
15ac0 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
15ad0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
15ae0 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
15af0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
15b00 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
15b10 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
15b20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
15b30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15b40 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
15b50 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
15b60 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
15b70 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
15b80 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
15b90 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
15ba0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
15bb0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
15bc0 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
15bd0 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
15be0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
15bf0 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
15c00 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
15c10 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
15c20 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
15c30 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
15c40 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
15c50 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
15c60 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
15c70 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
15c80 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
15c90 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
15ca0 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
15cb0 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
15cc0 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
15cd0 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
15ce0 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
15cf0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
15d00 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
15d10 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
15d20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
15d30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
15d40 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
15d50 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
15d60 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
15d70 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
15d80 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
15d90 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
15da0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
15db0 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
15dc0 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15de0 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
15df0 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
15e00 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
15e10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
15e20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
15e30 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
15e40 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
15e50 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
15e60 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
15e70 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
15e80 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
15e90 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
15ea0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
15eb0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
15ec0 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
15ed0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15ee0 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
15ef0 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
15f00 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
15f10 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
15f20 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
15f30 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
15f40 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
15f50 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
15f60 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
15f70 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
15f80 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
15f90 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15fa0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
15fb0 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
15fc0 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
15fd0 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
15fe0 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
15ff0 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
16000 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
16010 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
16020 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
16030 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
16040 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
16050 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
16060 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
16070 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
16080 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
16090 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
160a0 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
160b0 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
160c0 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
160d0 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
160e0 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
160f0 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
16100 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
16110 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
16120 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
16130 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
16140 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
16150 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
16160 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
16170 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
16180 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
16190 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
161a0 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
161b0 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
161c0 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
161d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
161e0 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
161f0 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
16200 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
16210 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
16220 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
16230 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
16240 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
16250 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
16260 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16270 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
16280 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
16290 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
162a0 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
162b0 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
162c0 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
162d0 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
162e0 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
162f0 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
16300 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
16310 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
16320 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
16330 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
16340 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
16350 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
16360 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
16370 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
16380 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
16390 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36  6..*/.typedef u6
163a0 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a  4 Bitmask;../*.*
163b0 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
163c0 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
163d0 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
163e0 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
163f0 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
16400 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
16410 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
16420 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74  * A bit in a Bit
16430 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  mask.*/.#define 
16440 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28  MASKBIT(n)   (((
16450 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29  Bitmask)1)<<(n))
16460 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
16470 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65  32(n) (((unsigne
16480 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a  d int)1)<<(n))..
16490 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
164a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
164b0 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
164c0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
164d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
164e0 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
164f0 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
16500 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
16510 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
16520 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
16530 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
16540 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
16550 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
16560 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
16570 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
16580 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
16590 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
165a0 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
165b0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
165c0 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
165d0 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
165e0 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
165f0 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
16600 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
16610 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
16620 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
16630 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
16640 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
16650 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
16660 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
16670 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
16680 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
16690 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
166a0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
166b0 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
166c0 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
166d0 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
166e0 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
166f0 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
16700 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
16710 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
16720 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
16730 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
16740 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
16750 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
16760 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
16770 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
16780 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
16790 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
167a0 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
167b0 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
167c0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
167d0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
167e0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
167f0 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
16800 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
16810 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
16820 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
16830 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
16840 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
16850 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
16860 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
16870 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
16880 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
16890 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
168a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
168b0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
168c0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
168d0 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
168e0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
168f0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
16900 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
16910 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
16920 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
16930 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
16940 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
16950 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
16960 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
16970 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
16980 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
16990 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
169a0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
169b0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
169c0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
169d0 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
169e0 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
169f0 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
16a00 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
16a10 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
16a20 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
16a30 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
16a40 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
16a50 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
16a60 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
16a70 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
16a80 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
16a90 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
16aa0 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
16ab0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
16ac0 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
16ad0 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
16ae0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
16af0 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
16b00 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
16b10 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
16b20 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
16b30 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
16b40 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
16b50 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
16b60 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
16b70 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
16b80 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
16b90 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f  ine */.    u8 jo
16ba0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
16bb0 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
16bc0 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61  ween this able a
16bd0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
16be0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
16bf0 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
16c00 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
16c10 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
16c20 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
16c30 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
16c40 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
16c50 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
16c60 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
16c70 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
16c80 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
16c90 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
16ca0 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
16cb0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16cc0 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b   isRecursive :1;
16cd0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72     /* True for r
16ce0 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e  ecursive referen
16cf0 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69  ce in WITH */.#i
16d00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16d10 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38  T_EXPLAIN.    u8
16d20 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
16d30 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30  /* If pSelect!=0
16d40 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20  , the id of the 
16d50 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51  sub-select in EQ
16d60 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20  P */.#endif.    
16d70 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
16d80 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
16d90 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
16da0 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
16db0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
16dc0 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
16dd0 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
16de0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
16df0 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
16e00 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
16e10 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
16e20 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
16e30 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
16e40 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
16e50 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
16e60 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
16e70 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20   char *zIndex;  
16e80 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
16e90 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
16ea0 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
16eb0 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  se */.    Index 
16ec0 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49  *pIndex;    /* I
16ed0 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
16ee0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
16ef0 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a  zIndex, if any *
16f00 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
16f10 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
16f20 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
16f30 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
16f40 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
16f50 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
16f60 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
16f70 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
16f80 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
16f90 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
16fa0 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
16fb0 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
16fc0 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
16fd0 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
16fe0 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
16ff0 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
17000 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
17010 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
17020 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
17030 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
17040 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
17050 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
17060 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
17070 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
17080 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
17090 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
170a0 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
170b0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
170c0 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
170d0 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
170e0 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
170f0 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
17100 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
17110 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
17120 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
17130 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
17140 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
17150 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
17160 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
17170 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
17180 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
17190 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
171a0 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
171b0 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23  ags member..*/.#
171c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
171d0 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
171e0 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
171f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17200 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
17210 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
17220 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
17230 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
17240 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
17250 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
17260 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
17270 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
17280 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
17290 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
172a0 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
172b0 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
172c0 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
172d0 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
172e0 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
172f0 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
17300 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  08 /* Ok to retu
17310 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
17320 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
17330 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50  ne WHERE_OMIT_OP
17340 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30  EN_CLOSE  0x0010
17350 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
17360 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70  s are already op
17370 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  en */.#define WH
17380 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20  ERE_FORCE_TABLE 
17390 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44       0x0020 /* D
173a0 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64  o not use an ind
173b0 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a  ex-only search *
173c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
173d0 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20  ONETABLE_ONLY   
173e0 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20   0x0040 /* Only 
173f0 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62  code the 1st tab
17400 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a  le in pTabList *
17410 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
17420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
17430 20 30 78 30 30 38 30 20 2f 2f 20 6e 6f 74 20 63   0x0080 // not c
17440 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
17450 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
17460 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
17470 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0100 /* pOrder
17480 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
17490 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
174a0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
174b0 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30  TBY       0x0200
174c0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
174d0 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
174e0 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
174f0 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
17500 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30  ISTINCT    0x040
17510 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
17520 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
17530 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
17540 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
17550 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a  P      0x0800 /*
17560 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
17570 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
17580 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17590 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20  _REOPEN_IDX     
175a0 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20    0x1000 /* Try 
175b0 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e  to use OP_Reopen
175c0 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77  Idx */../* Allow
175d0 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
175e0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65   from sqlite3Whe
175f0 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a  reIsDistinct().*
17600 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17610 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20  DISTINCT_NOOP   
17620 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43     0  /* DISTINC
17630 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73  T keyword not us
17640 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
17650 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49  ERE_DISTINCT_UNI
17660 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20  QUE    1  /* No 
17670 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64  duplicates */.#d
17680 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17690 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32  INCT_ORDERED   2
176a0 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61    /* All duplica
176b0 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74  tes are adjacent
176c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
176d0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44  E_DISTINCT_UNORD
176e0 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69  ERED 3  /* Dupli
176f0 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65  cates are scatte
17700 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  red */../*.** A 
17710 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69  NameContext defi
17720 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e  nes a context in
17730 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76   which to resolv
17740 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75  e table and colu
17750 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68  mn.** names.  Th
17760 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73  e context consis
17770 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20  ts of a list of 
17780 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63  tables (the pSrc
17790 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a  List) field and.
177a0 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ** a list of nam
177b0 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70  ed expression (p
177c0 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d  EList).  The nam
177d0 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  ed expression li
177e0 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c  st may.** be NUL
177f0 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72  L.  The pSrc cor
17800 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
17810 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
17820 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f   SELECT or.** to
17830 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
17840 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20   operated on by 
17850 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
17860 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a  or DELETE.  The.
17870 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73  ** pEList corres
17880 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73  ponds to the res
17890 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c  ult set of a SEL
178a0 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20  ECT and is NULL 
178b0 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61  for.** other sta
178c0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e  tements..**.** N
178d0 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20  ameContexts can 
178e0 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e  be nested.  When
178f0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17900 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74  , the inner-most
17910 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20   .** context is 
17920 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
17930 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
17940 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
17950 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
17960 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
17970 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
17980 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
17990 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
179a0 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
179b0 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
179c0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
179d0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
179e0 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
179f0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
17a00 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
17a10 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
17a20 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
17a30 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
17a40 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
17a50 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a  incremented. .**
17a60 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
17a70 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
17a80 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
17a90 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
17aa0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
17ab0 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
17ac0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
17ad0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
17ae0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
17af0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
17b00 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
17b10 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
17b20 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
17b30 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
17b40 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
17b50 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
17b60 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
17b70 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
17b80 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
17b90 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
17ba0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
17bb0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
17bc0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
17bd0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
17be0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
17bf0 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
17c00 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c  al list of resul
17c10 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t-set columns */
17c20 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
17c30 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
17c40 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
17c50 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
17c60 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
17c70 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
17c80 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
17c90 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
17ca0 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
17cb0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
17cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17cd0 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
17ce0 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
17cf0 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
17d00 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
17d10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
17d20 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
17d30 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
17d40 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  names */.  u16 n
17d50 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
17d60 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
17d70 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
17d80 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
17d90 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
17da0 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
17db0 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
17dc0 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e  s field..**.** N
17dd0 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  ote:  NC_MinMaxA
17de0 67 67 20 6d 75 73 74 20 68 61 76 65 20 74 68 65  gg must have the
17df0 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53   same value as S
17e00 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a  F_MinMaxAgg and.
17e10 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ** SQLITE_FUNC_M
17e20 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64  INMAX..** .*/.#d
17e30 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
17e40 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
17e50 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17e60 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
17e70 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
17e80 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30 30  _HasAgg    0x000
17e90 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  2  /* One or mor
17ea0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
17eb0 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
17ec0 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b  efine NC_IsCheck
17ed0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72     0x0004  /* Tr
17ee0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
17ef0 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
17f00 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
17f10 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
17f20 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54  unc 0x0008  /* T
17f30 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67  rue if analyzing
17f40 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e   arguments to an
17f50 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65   agg func */.#de
17f60 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20  fine NC_PartIdx 
17f70 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75    0x0010  /* Tru
17f80 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61  e if resolving a
17f90 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57   partial index W
17fa0 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  HERE */.#define 
17fb0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31  NC_MinMaxAgg 0x1
17fc0 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20  000  /* min/max 
17fd0 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e  aggregates seen.
17fe0 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65    See note above
17ff0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
18000 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
18010 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
18020 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
18030 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
18040 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
18050 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
18060 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
18070 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
18080 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
18090 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
180a0 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
180b0 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
180c0 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
180d0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
180e0 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
180f0 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
18100 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
18110 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
18120 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
18130 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
18140 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
18150 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
18160 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
18170 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
18180 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
18190 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
181a0 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
181b0 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
181c0 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
181d0 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
181e0 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
181f0 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
18200 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
18210 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
18220 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
18230 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
18240 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
18250 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
18260 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
18270 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
18280 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
18290 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
182a0 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
182b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
182c0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
182d0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
182e0 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
182f0 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
18300 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
18310 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
18320 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
18330 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
18340 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
18350 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
18360 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
18370 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
18380 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
18390 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
183a0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
183b0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
183c0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
183d0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
183e0 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
183f0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
18400 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
18410 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18420 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
18430 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
18440 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
18450 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
18460 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
18470 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
18480 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
18490 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
184a0 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
184b0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75  TK_EXCEPT */.  u
184c0 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  16 selFlags;    
184d0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
184e0 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
184f0 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
18500 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
18510 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
18520 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
18530 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
18540 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
18550 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a  ENABLED.  char z
18560 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20  SelName[12];    
18570 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d   /* Symbolic nam
18580 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54  e of this SELECT
18590 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69   use for debuggi
185a0 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ng */.#endif.  i
185b0 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  nt addrOpenEphm[
185c0 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  2];   /* OP_Open
185d0 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65  Ephem opcodes re
185e0 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65  lated to this se
185f0 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53  lect */.  u64 nS
18600 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20  electRow;       
18610 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
18620 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
18630 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ows */.  SrcList
18640 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
18650 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
18660 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
18670 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
18680 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
18690 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
186a0 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
186b0 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
186c0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
186d0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
186e0 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
186f0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
18700 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
18710 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
18720 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
18730 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
18740 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
18750 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
18760 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
18770 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
18780 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
18790 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
187a0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
187b0 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
187c0 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
187d0 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
187e0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
187f0 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
18800 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73  */.  Expr *pOffs
18810 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  et;         /* O
18820 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
18830 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
18840 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68   used. */.  With
18850 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
18860 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73     /* WITH claus
18870 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  e attached to th
18880 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55  is select. Or NU
18890 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  LL. */.};../*.**
188a0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
188b0 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
188c0 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
188d0 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
188e0 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
188f0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
18900 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
18910 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
18920 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
18930 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
18940 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
18950 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
18960 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
18970 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
18980 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
18990 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
189a0 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
189b0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
189c0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
189d0 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
189e0 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
189f0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
18a00 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
18a10 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
18a20 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
18a30 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
18a40 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
18a50 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
18a60 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
18a70 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
18a80 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
18a90 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
18aa0 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
18ab0 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
18ac0 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 50      0x0040  /* P
18ad0 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
18ae0 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
18af0 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
18b00 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a        0x0080  /*
18b10 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
18b20 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
18b30 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
18b40 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
18b50 30 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a  0100  NOT USED *
18b60 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
18b70 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30  tedFrom      0x0
18b80 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  200  /* Part of 
18b90 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
18ba0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
18bb0 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
18bc0 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30  onvert    0x0400
18bd0 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
18be0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
18bf0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
18c00 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
18c10 69 76 65 20 20 20 20 20 20 20 30 78 30 38 30 30  ive       0x0800
18c20 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
18c30 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
18c40 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
18c50 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
18c60 67 67 20 20 20 20 20 20 20 30 78 31 30 30 30 20  gg       0x1000 
18c70 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
18c80 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
18c90 72 20 6d 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a  r max() */.../*.
18ca0 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
18cb0 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
18cc0 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
18cd0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
18ce0 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
18cf0 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
18d00 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
18d10 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
18d20 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
18d30 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
18d40 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
18d50 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
18d60 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
18d70 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
18d80 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  dex .**         
18d90 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
18da0 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
18db0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
18dc0 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
18dd0 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
18de0 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
18df0 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
18e00 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
18e10 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
18e20 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
18e30 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
18e40 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
18e50 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
18e80 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
18e90 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
18ea0 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
18eb0 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
18ec0 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
18ed0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ee0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
18ef0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
18f00 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
18f10 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18f30 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
18f40 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
18f50 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
18f60 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
18f70 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
18f80 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
18f90 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
18fa0 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
18fb0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
18fc0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
18fd0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
18fe0 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
18ff0 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
19000 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
19030 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
19040 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
19050 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
19060 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
19070 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
19080 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
19090 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
190a0 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
190b0 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
190c0 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
190d0 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
19100 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
19110 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
19120 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
19130 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
19140 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
19150 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
19160 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
19170 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
19180 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
19190 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
191a0 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
191b0 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
191d0 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
191e0 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
191f0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a  Dest->iSDParm. .
19200 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19210 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
19220 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
19230 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
19240 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19260 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
19270 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
19280 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
19290 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
192a0 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
192b0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
192c0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
192d0 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
19300 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
19310 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
19320 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
19330 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
19340 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
19350 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
19360 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19380 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
19390 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
193a0 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
193b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
193c0 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
193d0 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
193e0 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
193f0 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
19400 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
19410 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
19420 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
19430 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
19440 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
19450 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
19460 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
19490 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
194a0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
194b0 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
194e0 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
194f0 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
19500 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
19520 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
19530 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
19540 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
19550 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
19560 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
19570 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19580 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
19590 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
195a0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
195b0 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
195c0 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
195f0 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
19600 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
19610 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19620 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
19630 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
19640 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
19650 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19670 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19680 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
19690 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
196a0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
196b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
196c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
196d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
196e0 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
196f0 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
19700 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
19710 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
19730 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
19740 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
19750 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
19760 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
19780 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
19790 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
197a0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
197b0 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
197c0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
197d0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
197e0 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
197f0 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
19800 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
19810 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
19820 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
19830 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
19840 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
19850 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
19860 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
19870 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
19880 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19890 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
198a0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
198b0 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
198e0 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
198f0 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
19900 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
19910 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
19920 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
19930 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
19940 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
19950 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
19960 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
19970 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
19980 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
19990 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
199a0 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
199b0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
199c0 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
199d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
199e0 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
199f0 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
19a00 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
19a10 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
19a20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
19a30 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
19a40 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
19a50 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
19a60 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
19a70 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
19a80 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
19a90 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
19aa0 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
19ab0 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
19ac0 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
19ad0 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
19ae0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
19af0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19b00 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
19b10 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19b20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
19b30 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
19b40 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
19b50 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
19b60 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
19b70 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
19b80 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19b90 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
19ba0 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
19bb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
19bc0 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
19bd0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
19be0 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
19bf0 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
19c00 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
19c10 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
19c20 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
19c30 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
19c40 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
19c50 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
19c60 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
19c70 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
19c80 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
19c90 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
19ca0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
19cb0 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
19cc0 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
19cd0 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
19ce0 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
19cf0 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
19d00 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
19d10 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
19d20 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
19d30 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
19d40 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
19d50 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
19d60 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
19d70 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
19d80 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
19d90 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
19da0 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
19db0 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
19dc0 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
19dd0 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
19de0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19df0 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
19e00 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
19e10 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
19e20 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
19e30 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
19e40 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
19e50 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ve. */.  char af
19e60 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  fSdst;        /*
19e70 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
19e80 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
19e90 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  et */.  int iSDP
19ea0 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
19eb0 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
19ec0 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
19ed0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
19ee0 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
19ef0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
19f00 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
19f10 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
19f20 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
19f30 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
19f40 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
19f50 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
19f60 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
19f70 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
19f80 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
19f90 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
19fa0 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
19fb0 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
19fc0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
19fd0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
19fe0 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
19ff0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
1a000 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1a010 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1a020 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1a030 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1a040 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1a050 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1a060 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1a070 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1a080 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1a090 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1a0a0 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1a0b0 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1a0c0 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1a0d0 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1a0e0 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1a0f0 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
1a100 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1a110 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1a120 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1a130 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1a140 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1a150 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1a160 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1a170 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1a180 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1a190 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1a1a0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1a1b0 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1a1c0 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1a1d0 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1a1e0 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1a1f0 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1a200 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1a210 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1a220 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1a230 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1a240 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1a250 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1a260 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1a270 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1a280 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1a290 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1a2a0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1a2b0 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1a2c0 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1a2d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1a2e0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1a2f0 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1a300 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1a310 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1a320 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1a330 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1a340 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1a350 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1a360 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1a370 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1a380 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
1a390 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1a3a0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1a3b0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1a3c0 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1a3d0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1a3e0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1a3f0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1a400 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1a410 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1a420 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1a430 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1a440 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1a450 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1a460 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1a470 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1a480 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1a490 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1a4a0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1a4b0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1a4c0 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1a4d0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1a4e0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1a4f0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1a500 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1a510 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1a520 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1a530 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1a540 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a550 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1a560 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1a570 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1a580 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1a590 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1a5a0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1a5b0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1a5c0 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1a5d0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1a5e0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1a5f0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1a600 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1a610 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1a620 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1a630 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
1a640 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1a650 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1a660 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1a670 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1a680 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1a690 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1a6a0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1a6b0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1a6c0 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1a6d0 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1a6e0 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1a6f0 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1a700 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1a710 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1a720 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1a730 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1a740 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1a750 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1a760 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1a770 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1a780 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1a790 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a7b0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1a7c0 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1a7d0 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1a7e0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1a7f0 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1a800 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1a810 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1a820 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1a830 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1a840 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1a850 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1a860 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1a870 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1a880 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1a890 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1a8a0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1a8b0 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1a8c0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1a8d0 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1a8e0 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1a8f0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1a900 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1a910 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1a920 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1a930 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1a940 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1a950 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1a960 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1a970 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1a980 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1a990 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a9a0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1a9b0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1a9c0 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1a9d0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1a9e0 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1a9f0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1aa00 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1aa10 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1aa20 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1aa30 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1aa40 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1aa50 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1aa60 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1aa70 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1aa80 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1aa90 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1aaa0 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1aab0 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1aac0 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1aad0 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1aae0 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1aaf0 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1ab00 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1ab10 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1ab20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1ab30 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1ab40 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1ab50 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1ab60 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1ab70 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1ab80 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1ab90 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1aba0 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1abb0 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1abc0 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1abd0 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1abe0 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1abf0 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1ac00 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1ac10 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1ac20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1ac30 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1ac40 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1ac50 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1ac60 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1ac70 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1ac80 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1ac90 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1aca0 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1acb0 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1acc0 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1acd0 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
1ace0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
1acf0 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
1ad00 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
1ad10 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
1ad20 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
1ad30 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
1ad40 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
1ad50 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
1ad60 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
1ad70 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
1ad80 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
1ad90 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
1ada0 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
1adb0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
1adc0 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
1add0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1ade0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
1adf0 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
1ae00 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
1ae10 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
1ae20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
1ae30 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
1ae40 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
1ae50 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
1ae60 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
1ae70 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
1ae80 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1ae90 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
1aea0 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
1aeb0 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
1aec0 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
1aed0 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
1aee0 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
1aef0 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
1af00 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
1af10 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
1af20 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
1af30 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
1af40 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
1af50 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
1af60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1af70 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
1af80 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
1af90 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
1afa0 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
1afb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1afc0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1afd0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
1afe0 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
1aff0 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
1b000 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1b010 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
1b020 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
1b030 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
1b040 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
1b050 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1b060 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
1b070 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
1b080 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
1b090 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
1b0a0 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
1b0b0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1b0c0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
1b0d0 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
1b0e0 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
1b0f0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
1b100 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  nts */.  int aTe
1b110 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
1b120 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
1b130 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
1b140 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
1b150 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1b160 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
1b170 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1b180 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1b190 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
1b1a0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1b1b0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
1b1c0 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1b1d0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1b1e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b1f0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
1b200 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
1b210 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b220 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
1b230 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
1b240 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
1b250 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1b260 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b270 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
1b280 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1b290 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
1b2a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b2b0 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
1b2c0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
1b2d0 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
1b2e0 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
1b2f0 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
1b300 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b310 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
1b320 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
1b330 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
1b340 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1b350 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20    int iFixedOp; 
1b360 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20         /* Never 
1b370 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73  back out opcodes
1b380 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65   iFixedOp-1 or e
1b390 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20  arlier */.  int 
1b3a0 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
1b3b0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1b3c0 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
1b3d0 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
1b3e0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72  ts */.  int iPar
1b3f0 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20  tIdxTab;     /* 
1b400 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  Table correspond
1b410 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c  ing to a partial
1b420 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1b430 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
1b440 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
1b450 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
1b460 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
1b470 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
1b480 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
1b490 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
1b4a0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
1b4b0 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
1b4c0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  lues */.  int nL
1b4d0 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
1b4e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  * Number of labe
1b4f0 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
1b500 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
1b510 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
1b520 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
1b530 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61  .  struct yColCa
1b540 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54  che {.    int iT
1b550 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1b560 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20  /* Table cursor 
1b570 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31  number */.    i1
1b580 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 iColumn;      
1b590 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c      /* Table col
1b5a0 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  umn number */.  
1b5b0 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20    u8 tempReg;   
1b5c0 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20          /* iReg 
1b5d0 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74  is a temp regist
1b5e0 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  er that needs to
1b5f0 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20   be freed */.   
1b600 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
1b610 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e         /* Nestin
1b620 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69  g level */.    i
1b630 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20  nt iReg;        
1b640 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68       /* Reg with
1b650 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1b660 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e  olumn. 0 means n
1b670 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  one. */.    int 
1b680 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20  lru;            
1b690 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e    /* Least recen
1b6a0 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68  tly used entry h
1b6b0 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  as the smallest 
1b6c0 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f  value */.  } aCo
1b6d0 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f  lCache[SQLITE_N_
1b6e0 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f  COLCACHE];  /* O
1b6f0 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
1b700 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a  mn cache entry *
1b710 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1b720 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1b730 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1b740 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1b750 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1b760 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1b770 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1b780 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1b790 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1b7a0 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1b7b0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1b7c0 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1b7d0 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1b7e0 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1b7f0 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1b800 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1b810 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1b820 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
1b830 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1b840 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
1b850 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
1b860 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  rify */.  int re
1b870 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1b880 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1b890 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1b8a0 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1b8b0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1b8c0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1b8d0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1b8e0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1b8f0 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1b900 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1b910 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1b920 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1b930 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1b940 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1b950 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1b960 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
1b970 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
1b980 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
1b990 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
1b9a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
1b9b0 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f  tIndent;   /* Ho
1b9c0 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20  w far to indent 
1b9d0 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75  SELECTTRACE() ou
1b9e0 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tput */.#endif.#
1b9f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1ba00 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1ba10 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1ba20 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1ba30 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1ba40 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1ba50 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1ba60 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1ba70 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1ba80 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1ba90 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1baa0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1bab0 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1bac0 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1bad0 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1bae0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
1baf0 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
1bb00 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
1bb10 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
1bb20 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
1bb30 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
1bb40 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
1bb50 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
1bb60 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
1bb70 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
1bb80 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
1bb90 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
1bba0 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
1bbb0 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
1bbc0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
1bbd0 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1bbe0 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
1bbf0 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69  */.  int addrSki
1bc00 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  pPK;      /* Add
1bc10 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74  ress of instruct
1bc20 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d  ion to skip PRIM
1bc30 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
1bc40 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
1bc50 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
1bc60 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
1bc70 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
1bc80 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
1bc90 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
1bca0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1bcb0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
1bcc0 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1bcd0 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
1bce0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
1bcf0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
1bd00 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
1bd10 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
1bd20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
1bd30 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
1bd40 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
1bd50 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
1bd60 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1bd70 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
1bd80 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
1bd90 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1bda0 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
1bdb0 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
1bdc0 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be10 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1be20 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1be30 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1be40 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1be50 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1be60 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1be70 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1be80 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1be90 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1bea0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1beb0 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1bec0 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f  f(Parse,nVar) so
1bed0 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20   the nVar field 
1bee0 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73  must be the firs
1bef0 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20  t field.  ** in 
1bf00 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
1bf10 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
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 2a 2a 2a  ****************
1bf50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bf60 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bf80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
1bf90 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
1bfa0 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
1bfb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
1bfe0 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
1bff0 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
1c000 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1c010 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1c020 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1c030 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1c040 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b  .  u8 bFreeWith;
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c060 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68  True if pWith sh
1c070 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69  ould be freed wi
1c080 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75  th parser */.  u
1c090 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1c0a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1c0b0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1c0c0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1c0d0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1c0e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c0f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1c100 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1c110 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1c120 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1c130 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1c140 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1c150 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1c160 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c170 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1c180 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1c190 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c1b0 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1c1c0 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1c1d0 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1c1e0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1c1f0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1c200 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1c210 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1c220 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1c230 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1c240 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1c250 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1c260 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1c270 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1c280 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1c290 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1c2a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1c2b0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1c2c0 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1c2d0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1c2e0 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1c2f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1c300 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1c310 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1c320 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1c330 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1c340 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1c350 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1c360 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1c370 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1c380 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1c390 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1c3a0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1c3b0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1c3c0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1c3d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1c3e0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1c3f0 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1c400 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1c410 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1c420 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1c430 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1c440 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1c450 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1c460 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1c470 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1c480 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1c490 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1c4a0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1c4b0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1c4c0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1c4d0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1c4e0 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1c4f0 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1c500 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c510 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1c520 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1c530 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c540 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1c550 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1c560 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1c570 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1c580 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1c590 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1c5a0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1c5b0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1c5c0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1c5d0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1c5e0 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1c5f0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1c600 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1c610 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1c620 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1c630 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1c640 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1c650 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1c660 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1c670 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1c680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1c690 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1c6a0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d  se, or NULL */.}
1c6b0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1c6c0 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1c6d0 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1c6e0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1c6f0 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1c700 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1c710 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1c720 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1c730 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1c740 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1c750 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1c760 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1c770 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1c780 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1c790 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1c7a0 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1c7b0 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1c7c0 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1c7d0 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1c7e0 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1c7f0 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1c800 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1c810 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1c820 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1c830 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1c840 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1c850 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1c860 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1c870 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c890 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1c8a0 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1c8b0 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1c8c0 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1c8d0 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1c8e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1c8f0 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1c900 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1c910 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1c920 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1c930 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1c940 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1c950 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1c960 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1c970 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1c980 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1c990 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1c9a0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1c9b0 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1c9c0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1c9d0 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1c9e0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1c9f0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1ca00 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1ca10 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1ca20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1ca30 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1ca40 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1ca50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1ca60 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1ca70 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1ca80 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1ca90 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1caa0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cab0 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1cac0 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1cad0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1cae0 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1caf0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1cb00 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1cb10 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1cb20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1cb30 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1cb40 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1cb50 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1cb60 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1cb70 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1cb80 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1cb90 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
1cba0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1cbb0 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
1cbc0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
1cbd0 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
1cbe0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
1cbf0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1cc00 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
1cc10 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
1cc20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
1cc30 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
1cc40 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
1cc50 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
1cc60 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
1cc70 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
1cc80 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e  ger. . *. * Poin
1cc90 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
1cca0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1ccb0 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
1ccc0 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
1ccd0 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
1cce0 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
1ccf0 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
1cd00 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
1cd10 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20  ents the . *    
1cd20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
1cd30 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
1cd40 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
1cd50 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
1cd60 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
1cd70 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
1cd80 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
1cd90 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
1cda0 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
1cdb0 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
1cdc0 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
1cdd0 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
1cde0 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
1cdf0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
1ce00 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
1ce10 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
1ce20 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
1ce30 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
1ce40 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
1ce50 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
1ce60 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
1ce70 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
1ce80 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1ce90 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
1cea0 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
1ceb0 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
1cec0 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
1ced0 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
1cee0 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
1cef0 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
1cf00 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1cf10 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
1cf20 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
1cf50 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
1cf60 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
1cf70 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
1cf80 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
1cf90 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
1cfa0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1cfb0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1cfc0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1cfd0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
1cfe0 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
1cff0 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
1d000 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
1d010 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
1d020 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
1d030 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
1d040 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1d050 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
1d060 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
1d070 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
1d080 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
1d090 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
1d0a0 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
1d0b0 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
1d0c0 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0e0 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
1d0f0 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
1d100 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
1d110 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
1d120 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1d130 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
1d140 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
1d150 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
1d160 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1d170 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1d180 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
1d190 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
1d1a0 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
1d1b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
1d1c0 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
1d1d0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1d1e0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1d1f0 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
1d200 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1d210 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
1d220 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
1d230 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
1d240 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
1d250 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
1d260 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
1d270 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
1d280 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ch. .**.** If th
1d290 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
1d2a0 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
1d2b0 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
1d2c0 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
1d2d0 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
1d2e0 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
1d2f0 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
1d300 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
1d310 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
1d320 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
1d330 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
1d340 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
1d350 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
1d360 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1d370 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
1d380 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
1d390 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
1d3a0 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
1d3b0 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20  rigger-program. 
1d3c0 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
1d3d0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1d3e0 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
1d3f0 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
1d400 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
1d410 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
1d420 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
1d430 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
1d440 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1d450 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61  ber of the . * a
1d460 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
1d470 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
1d480 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
1d490 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
1d4a0 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
1d4b0 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
1d4c0 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
1d4d0 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20  ram.. * . * The 
1d4e0 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
1d4f0 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
1d500 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
1d510 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
1d520 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
1d530 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
1d540 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
1d550 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
1d560 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1d570 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20  y the . * value 
1d580 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
1d590 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
1d5a0 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
1d5b0 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
1d5c0 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
1d5d0 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
1d5e0 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
1d5f0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1d600 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
1d610 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
1d620 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1d630 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1d640 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
1d650 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1d660 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
1d670 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20  ULL.. * target  
1d680 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1d690 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1d6a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1d6b0 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
1d6c0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1d6d0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1d6e0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1d6f0 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
1d700 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1d710 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1d720 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
1d730 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
1d740 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d750 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
1d760 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1d770 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
1d780 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
1d790 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20  UES ... . *     
1d7a0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1d7b0 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
1d7c0 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
1d7d0 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
1d7f0 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
1d800 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
1d810 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
1d820 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
1d830 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
1d840 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1d850 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
1d860 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1d870 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1d880 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
1d890 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1d8a0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1d8c0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1d8d0 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55   . * (op == TK_U
1d8e0 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74  PDATE). * target
1d8f0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1d900 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1d910 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1d920 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f  ble to update ro
1d930 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65  ws of.. * pWhere
1d940 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1d950 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
1d960 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
1d970 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1d980 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1d990 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1d9a0 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
1d9b0 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
1d9c0 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
1d9d0 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
1d9e0 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
1d9f0 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
1da00 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
1da10 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
1da20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
1da30 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
1da40 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
1da50 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
1da60 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1da70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
1da80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1da90 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1daa0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1dab0 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
1dac0 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
1dad0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
1dae0 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
1daf0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1db00 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
1db10 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
1db20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
1db30 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
1db40 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
1db50 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f  ELECT statment o
1db60 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
1db70 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e  INTO .. SELECT .
1db80 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61  .. */.  Token ta
1db90 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rget;        /* 
1dba0 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
1dbb0 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
1dbc0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
1dbd0 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1dbe0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1dbf0 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
1dc00 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
1dc10 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1dc20 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
1dc30 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
1dc40 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ATE. */.  IdList
1dc50 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
1dc60 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
1dc70 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
1dc80 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
1dc90 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
1dca0 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
1dcb0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1dcc0 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
1dcd0 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
1dce0 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
1dcf0 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
1dd00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1dd10 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1dd20 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
1dd30 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
1dd40 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
1dd50 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
1dd60 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
1dd70 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
1dd80 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
1dd90 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
1dda0 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74    .*/.typedef st
1ddb0 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
1ddc0 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
1ddd0 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
1dde0 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
1ddf0 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
1de00 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
1de10 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
1de20 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1de30 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
1de40 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
1de50 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
1de60 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
1de70 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
1de80 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
1de90 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
1dea0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
1deb0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
1dec0 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
1ded0 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
1dee0 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
1def0 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
1df00 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
1df10 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1df20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1df30 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
1df40 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
1df50 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
1df60 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1df70 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1df80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
1df90 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
1dfa0 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
1dfb0 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
1dfc0 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
1dfd0 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1dfe0 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
1dff0 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
1e000 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
1e010 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
1e020 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1e030 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
1e040 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
1e050 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
1e060 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
1e070 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
1e080 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
1e090 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
1e0a0 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
1e0b0 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
1e0c0 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
1e0d0 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
1e0e0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68  ar */.  int  nCh
1e0f0 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
1e100 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
1e110 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
1e120 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   int  nAlloc;   
1e130 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
1e140 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
1e150 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
1e160 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   int  mxAlloc;  
1e170 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1e180 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20   allowed string 
1e190 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20  length */.  u8  
1e1a0 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20   useMalloc;     
1e1b0 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a   /* 0: none,  1:
1e1c0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1e1d0 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61  ,  2: sqlite3_ma
1e1e0 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61  lloc */.  u8   a
1e1f0 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1e200 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1e210 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1e220 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  BIG */.};.#defin
1e230 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
1e240 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
1e250 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
1e260 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
1e270 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
1e280 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
1e290 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
1e2a0 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
1e2b0 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
1e2c0 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
1e2d0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
1e2e0 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
1e2f0 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
1e300 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1e310 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
1e320 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
1e330 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
1e340 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
1e350 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1e360 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1e370 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1e380 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
1e390 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
1e3a0 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
1e3b0 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
1e3c0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1e3d0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
1e3e0 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
1e3f0 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
1e400 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
1e410 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
1e420 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
1e430 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
1e440 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
1e450 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
1e460 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
1e470 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
1e480 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1e490 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
1e4a0 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
1e4b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e4c0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e4d0 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
1e4e0 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
1e4f0 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e510 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
1e520 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
1e530 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
1e540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e550 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1e560 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
1e570 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
1e580 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
1e590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e5a0 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
1e5b0 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
1e5c0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
1e5d0 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
1e5e0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1e5f0 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
1e600 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
1e610 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
1e620 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1e630 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1e640 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
1e650 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
1e660 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
1e670 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1e680 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
1e690 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
1e6a0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1e6d0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1e6e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1e6f0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1e700 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1e710 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1e720 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1e730 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1e740 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1e750 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1e760 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1e770 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1e780 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1e790 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1e7a0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1e7b0 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1e7c0 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1e7d0 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1e7e0 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1e7f0 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1e800 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1e810 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e830 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1e840 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1e850 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1e860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1e870 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1e880 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1e890 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1e8a0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1e8b0 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1e8c0 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
1e8d0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
1e8e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1e8f0 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
1e900 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
1e910 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1e920 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
1e930 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
1e940 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
1e950 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1e960 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1e970 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1e980 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1e990 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9b0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1e9c0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1e9d0 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1e9e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e9f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ea00 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1ea10 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1ea20 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1ea30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1ea40 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1ea50 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1ea80 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1ea90 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1eaa0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eac0 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1ead0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1eae0 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1eaf0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1eb00 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1eb10 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1eb20 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1eb30 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1eb40 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1eb50 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1eb60 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1eb70 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ed */.  /* The a
1eb80 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
1eb90 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
1eba0 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
1ebb0 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
1ebc0 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
1ebd0 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
1ebe0 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
1ebf0 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ec10 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
1ec20 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
1ec30 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
1ec40 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ec60 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
1ec70 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
1ec80 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
1ec90 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ecb0 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
1ecc0 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
1ecd0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
1ece0 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
1ecf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ed00 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1ed10 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1ed20 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
1ed30 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1ed40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ed50 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1ed60 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1ed70 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
1ed80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ed90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
1eda0 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
1edb0 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
1edc0 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
1edd0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
1ede0 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
1edf0 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
1ee00 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
1ee10 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
1ee20 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
1ee30 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
1ee40 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
1ee50 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1ee60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1ee70 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
1ee80 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
1ee90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1eea0 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1eeb0 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1eec0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1eed0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1eee0 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1eef0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1ef00 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
1ef10 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
1ef20 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
1ef30 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
1ef40 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
1ef50 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
1ef60 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
1ef70 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
1ef80 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
1ef90 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
1efa0 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
1efb0 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
1efc0 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75  *,int iSrcLine,u
1efd0 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
1efe0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
1eff0 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
1f000 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f030 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
1f040 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1f050 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1f060 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a  IN_TEST.  int (*
1f070 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
1f080 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
1f090 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
1f0a0 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
1f0b0 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
1f0c0 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
1f0d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f0e0 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
1f0f0 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d  ime() calls */.}
1f100 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
1f110 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
1f120 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
1f130 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
1f140 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
1f150 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
1f160 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
1f170 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1f180 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
1f190 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1f1a0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
1f1b0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
1f1c0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
1f1d0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
1f1e0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
1f1f0 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
1f200 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
1f210 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
1f220 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
1f230 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
1f240 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
1f250 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
1f260 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
1f270 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
1f280 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
1f290 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
1f2a0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
1f2b0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
1f2c0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
1f2d0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
1f2e0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
1f2f0 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
1f300 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
1f310 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
1f320 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
1f330 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
1f340 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
1f350 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
1f360 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
1f370 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
1f380 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
1f390 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
1f3a0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
1f3b0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
1f3c0 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
1f3d0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
1f3e0 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
1f3f0 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
1f400 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
1f410 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1f420 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
1f430 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
1f440 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1f450 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
1f460 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
1f470 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
1f480 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
1f490 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1f4a0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1f4d0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
1f4e0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
1f4f0 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f510 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
1f520 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
1f530 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
1f560 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
1f570 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f5a0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
1f5b0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
1f5c0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1f5d0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f5f0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
1f600 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
1f640 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f670 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  * A cursor numbe
1f680 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  r */.    SrcList
1f690 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6b0 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
1f6c0 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
1f6d0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
1f6e0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
1f6f0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
1f700 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
1f710 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
1f720 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
1f730 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
1f740 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
1f750 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1f760 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f770 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
1f780 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1f790 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1f7a0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
1f7b0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1f7c0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
1f7d0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1f7e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f7f0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
1f800 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1f810 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
1f820 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
1f830 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
1f840 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
1f850 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
1f860 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
1f870 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
1f880 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
1f890 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
1f8a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1f8b0 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
1f8c0 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
1f8d0 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
1f8e0 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
1f8f0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
1f900 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
1f910 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
1f920 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
1f930 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1f940 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
1f950 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
1f960 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
1f970 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
1f980 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
1f990 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
1f9a0 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
1f9b0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
1f9c0 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f9f0 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
1fa00 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
1fa10 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
1fa40 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
1fa50 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
1fa60 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
1fa70 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
1fa80 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
1fa90 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
1faa0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1fab0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1fac0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1fad0 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
1fae0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
1faf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fb00 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
1fb10 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
1fb20 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
1fb30 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1fb40 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1fb50 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
1fb60 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
1fb70 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
1fb80 72 20 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20  r *zErr;        
1fb90 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
1fba0 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
1fbb0 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
1fbc0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
1fbd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1fbe0 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
1fbf0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
1fc00 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
1fc10 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
1fc20 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
1fc30 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
1fc40 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
1fc50 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
1fc60 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
1fc70 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
1fc80 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
1fc90 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1fca0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
1fcb0 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
1fcc0 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
1fcd0 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
1fce0 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
1fcf0 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
1fd00 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
1fd10 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
1fd20 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
1fd30 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  BUG */../*.** As
1fd40 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
1fd50 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
1fd60 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
1fd70 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
1fd80 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
1fd90 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
1fda0 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
1fdb0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
1fdc0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
1fdd0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
1fde0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
1fdf0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
1fe00 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
1fe10 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
1fe40 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
1fe50 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1fe70 20 7d 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 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
1feb0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
1fec0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
1fed0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
1fee0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
1fef0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
1ff00 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
1ff10 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
1ff20 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
1ff30 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
1ff40 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
1ff50 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
1ff60 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
1ff70 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
1ff80 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
1ff90 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
1ffa0 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
1ffb0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1ffc0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
1ffd0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
1ffe0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
1fff0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
20000 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20010 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
20020 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
20030 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
20040 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
20050 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
20060 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
20070 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
20080 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
20090 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
200a0 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
200b0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
200c0 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
200d0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
200e0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
200f0 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
20100 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
20110 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
20120 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
20130 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
20140 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
20150 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
20160 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
20170 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  so call.** the S
20180 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20190 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
201a0 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
201b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
201c0 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
201d0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
201e0 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
201f0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
20200 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
20210 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
20220 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS3.#endif../*.*
20230 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
20240 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
20250 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
20260 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
20270 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
20280 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
20290 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
202a0 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
202b0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
202c0 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
202d0 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
202e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
202f0 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
20300 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
20310 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
20320 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
20330 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
20340 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
20350 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
20360 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
20370 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
20380 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
20390 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
203a0 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
203b0 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
203c0 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
203d0 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
203e0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
203f0 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
20400 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
20410 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
20420 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20430 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
20440 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
20450 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20460 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
20470 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20480 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
20490 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
204a0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
204b0 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
204c0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
204d0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
204e0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
204f0 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
20500 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20510 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
20520 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20530 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20540 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
20550 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
20560 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
20570 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
20580 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
20590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
205a0 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
205b0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
205c0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
205d0 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
205e0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
205f0 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
20600 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
20610 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
20620 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20630 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
20640 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
20650 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20660 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
20670 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
20680 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20690 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
206a0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
206b0 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
206c0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
206d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
206e0 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
206f0 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
20700 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20710 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
20720 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
20730 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20740 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20750 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
20760 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
20770 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20780 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
20790 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
207a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
207b0 29 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  )).#endif.int sq
207c0 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
207d0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
207e0 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
207f0 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
20800 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
20810 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
20820 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
20830 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
20840 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
20850 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
20860 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
20870 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
20880 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
20890 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
208a0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
208b0 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
208c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
208d0 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
208e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
208f0 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
20900 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
20910 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20920 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
20930 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
20940 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
20950 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
20960 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
20970 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
20980 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
20990 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
209a0 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
209b0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
209c0 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
209d0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
209e0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
209f0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
20a00 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
20a10 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
20a20 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
20a30 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
20a40 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
20a50 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
20a60 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
20a70 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
20a80 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
20a90 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
20aa0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
20ab0 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
20ac0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
20ad0 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
20ae0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20af0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
20b00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20b10 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
20b20 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20b30 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
20b40 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
20b50 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
20b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  );.int sqlite3He
20b70 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
20b80 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
20b90 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
20ba0 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
20bb0 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
20bc0 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
20bd0 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
20be0 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
20bf0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
20c00 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
20c10 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
20c20 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
20c30 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
20c40 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
20c50 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
20c60 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
20c70 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
20c80 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
20c90 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
20ca0 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
20cb0 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
20cc0 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
20cd0 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
20ce0 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
20cf0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
20d00 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
20d10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20d20 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
20d30 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
20d40 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
20d50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20d60 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
20d70 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69     .#else.# defi
20d80 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20d90 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
20da0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20db0 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
20dc0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20dd0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
20de0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
20df0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
20e00 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
20e10 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
20e20 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
20e30 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
20e40 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
20e50 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
20e60 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
20e70 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
20e80 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
20e90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20ea0 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
20eb0 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
20ec0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
20ed0 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
20ee0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
20ef0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
20f00 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
20f10 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
20f20 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
20f30 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
20f40 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20f50 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
20f60 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
20f70 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
20f80 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
20f90 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
20fa0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
20fb0 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
20fc0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
20fd0 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
20fe0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  if..int sqlite3S
20ff0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
21000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
21010 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29  tusAdd(int, int)
21020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
21030 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74  atusSet(int, int
21040 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
21050 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
21060 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
21070 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
21080 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
21090 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
210a0 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
210b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
210c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
210d0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
210e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
210f0 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
21100 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
21110 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
21120 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
21130 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
21140 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
21150 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
21160 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
21170 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
21180 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
21190 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
211a0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
211b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
211c0 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
211d0 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
211e0 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
211f0 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
21200 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
21210 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21220 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
21230 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  x01.#define SQLI
21240 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
21250 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c  C  0x02.void sql
21260 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
21270 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e  Accum*, u32, con
21280 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
21290 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
212a0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
212b0 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
212c0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
212d0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
212e0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
212f0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
21300 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
21310 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
21320 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
21330 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
21340 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a  Appendf(sqlite3*
21350 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,char*,const cha
21360 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66  r*,...);.#if def
21370 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
21380 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
21390 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
213a0 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
213b0 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
213c0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
213d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
213e0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
213f0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
21400 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
21410 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
21420 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
21430 42 55 47 29 0a 20 20 54 72 65 65 56 69 65 77 20  BUG).  TreeView 
21440 2a 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77  *sqlite3TreeView
21450 50 75 73 68 28 54 72 65 65 56 69 65 77 2a 2c 75  Push(TreeView*,u
21460 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
21470 65 33 54 72 65 65 56 69 65 77 50 6f 70 28 54 72  e3TreeViewPop(Tr
21480 65 65 56 69 65 77 2a 29 3b 0a 20 20 76 6f 69 64  eeView*);.  void
21490 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
214a0 4c 69 6e 65 28 54 72 65 65 56 69 65 77 2a 2c 20  Line(TreeView*, 
214b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
214c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
214d0 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 54 72  3TreeViewItem(Tr
214e0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63  eeView*, const c
214f0 68 61 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  har*, u8);.  voi
21500 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21510 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
21520 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
21530 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21540 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
21550 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
21560 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38  st ExprList*, u8
21570 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
21580 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21590 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
215a0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
215b0 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  lect*, u8);.#end
215c0 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
215d0 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
215e0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
215f0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
21610 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
21620 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21630 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75  .int sqlite3Dequ
21640 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20  ote(char*);.int 
21650 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
21660 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
21670 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
21680 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
21690 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
216a0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
216b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
216c0 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
216d0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
216e0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
216f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21700 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
21710 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
21720 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
21730 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
21740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
21750 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
21760 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
21770 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
21780 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
21790 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  se*);.Expr *sqli
217a0 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
217b0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
217c0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
217d0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
217e0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
217f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
21800 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
21810 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
21820 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
21830 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
21840 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
21850 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
21860 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
21870 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21880 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
21890 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
218a0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
218b0 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
218c0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
218d0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
218e0 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
218f0 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
21900 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21910 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
21920 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
21930 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
21940 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
21950 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
21960 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
21970 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
21980 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
21990 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
219a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
219b0 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
219c0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
219d0 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
219e0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
219f0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
21a00 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
21a10 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
21a20 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
21a30 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
21a40 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
21a50 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
21a60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
21a70 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
21a80 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
21a90 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21aa0 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
21ab0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
21ac0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
21ad0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
21ae0 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
21af0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21b00 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
21b10 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
21b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
21b30 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
21b40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21b50 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
21b60 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a  Changes(sqlite3*
21b70 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
21b80 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
21b90 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
21ba0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21bb0 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
21bc0 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
21bd0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
21be0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
21bf0 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
21c00 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
21c10 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
21c20 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
21c30 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
21c40 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
21c50 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
21c60 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
21c70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
21c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
21c90 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
21ca0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21cb0 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
21cc0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
21cd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
21ce0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21cf0 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
21d00 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
21d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
21d20 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
21d30 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
21d40 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
21d50 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
21d60 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
21d70 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
21d80 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
21d90 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
21da0 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
21db0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
21dc0 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
21dd0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
21de0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
21df0 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
21e00 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
21e10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
21e20 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
21e30 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
21e40 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
21e50 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
21e60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
21e70 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
21e80 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  ce(Parse *);..#i
21e90 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
21ea0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20  _BUILTIN_TEST.# 
21eb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
21ec0 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45  ultSim(X) SQLITE
21ed0 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  _OK.#else.  int 
21ee0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
21ef0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69  int);.#endif..Bi
21f00 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
21f10 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
21f20 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
21f30 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
21f40 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
21f50 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
21f60 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
21f70 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
21f80 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
21f90 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
21fa0 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
21fb0 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
21fc0 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
21fd0 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73  (Bitvec*);.int s
21fe0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
21ff0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
22000 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  );..RowSet *sqli
22010 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
22020 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
22030 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
22040 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
22050 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
22060 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
22070 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
22080 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
22090 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
220a0 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
220b0 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
220c0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
220d0 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
220e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
220f0 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
22100 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
22110 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  n*,Select*,int,i
22120 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
22130 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22140 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
22150 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
22160 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
22170 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
22180 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
22190 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
221a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
221b0 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
221c0 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
221d0 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  f..#if SQLITE_MA
221e0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
221f0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73  int sqlite3DbMas
22200 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b  kAllZero(yDbMask
22210 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
22220 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
22230 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22240 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22250 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
22260 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
22270 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
22280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
22290 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
222a0 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66  3*, Table*);.#if
222b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
222c0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
222d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
222e0 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
222f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
22300 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
22310 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
22320 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
22330 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
22340 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
22350 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
22360 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
22370 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
22380 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
22390 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
223a0 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
223b0 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
223c0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
223d0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
223e0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
223f0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
22400 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
22410 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
22420 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
22430 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
22440 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
22450 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
22460 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
22470 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
22480 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
22490 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
224a0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
224b0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
224c0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
224d0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
224e0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
224f0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
22500 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
22510 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
22520 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
22560 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
22570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22580 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
22590 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
225a0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
225b0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
225c0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
225d0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
225e0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
225f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
22600 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
22610 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
22620 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
22630 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
22640 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
22650 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
22660 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
22670 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22680 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
22690 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
226a0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
226b0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
226c0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
226d0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
226e0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
226f0 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
22700 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
22710 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
22720 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22740 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
22750 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22760 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
22770 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
22780 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
22790 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
227a0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
227b0 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
227c0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
227d0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
227e0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
227f0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
22820 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
22830 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
22840 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
22850 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
22860 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
22870 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
22880 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
22890 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
228a0 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
228b0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
228c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
228d0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
228e0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
228f0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
22900 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
22910 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
22920 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
22930 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
22940 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
22950 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
22960 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
22970 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
22980 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
22990 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
229a0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
229b0 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
229c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
229d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
229e0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
229f0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
22a00 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
22a10 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
22a20 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
22a30 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
22a40 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
22a50 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
22a60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22a70 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
22a80 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
22a90 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
22aa0 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
22ab0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
22ac0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
22ad0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
22ae0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
22af0 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
22b00 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
22b10 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
22b20 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22b30 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
22b40 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
22b50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
22b60 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
22b70 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
22b80 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
22b90 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
22ba0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
22bb0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
22bc0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
22bd0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
22be0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
22bf0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
22c00 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
22c10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
22c20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22c30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22c40 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
22c50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22c60 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22c70 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
22c80 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22c90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22ca0 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
22cb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22cc0 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
22cd0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22ce0 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65  3ExprCacheRemove
22cf0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
22d00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22d10 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50  ExprCacheClear(P
22d20 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
22d30 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66  ite3ExprCacheAff
22d40 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73  inityChange(Pars
22d50 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
22d60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22d70 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
22d80 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22d90 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
22da0 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
22db0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22dc0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22dd0 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
22de0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  Expr*, int, u8);
22df0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22e00 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
22e10 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
22e20 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
22e30 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
22e40 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
22e50 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
22e60 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
22e70 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22e80 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
22e90 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
22ea0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
22eb0 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
22ec0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
22ed0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
22ee0 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
22ef0 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
22f00 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
22f10 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
22f20 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
22f30 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f  tant terms */.vo
22f40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
22f50 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
22f60 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
22f70 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
22f80 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
22f90 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
22fa0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
22fb0 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
22fc0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
22fd0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
22fe0 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
22ff0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e  eTable(Parse*,in
23000 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63  t isView,const c
23010 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
23020 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
23030 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65  e3LocateTableIte
23040 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  m(Parse*,int isV
23050 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69  iew,struct SrcLi
23060 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
23070 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
23080 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
23090 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
230a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
230b0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
230c0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
230d0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
230e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
230f0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
23100 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
23110 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
23120 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
23130 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  um(Parse*);.int 
23140 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
23150 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
23160 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
23170 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
23180 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
23190 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
231a0 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20  rCompare(Expr*, 
231b0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
231c0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
231d0 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
231e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
231f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
23200 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45  xprImpliesExpr(E
23210 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
23220 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23230 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
23240 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
23250 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
23260 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
23270 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
23280 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
23290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
232a0 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
232b0 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
232c0 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
232d0 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
232e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
232f0 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
23300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
23310 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
23320 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
23330 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
23340 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
23350 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
23360 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
23370 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23380 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
23390 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
233a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
233b0 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
233c0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
233d0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
233e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
233f0 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
23400 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23410 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
23420 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
23430 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
23440 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
23450 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
23460 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
23470 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
23480 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23490 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
234a0 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
234b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
234c0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
234d0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
234e0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
234f0 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
23500 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
23510 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
23520 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
23530 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
23540 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78  TableConstant(Ex
23550 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  pr*,int);.int sq
23560 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
23570 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
23580 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23590 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
235a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
235b0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
235c0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
235d0 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
235e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
235f0 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
23600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
23610 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
23620 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
23630 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
23640 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29  nt,i16,u8,u8,u8)
23650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
23660 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
23670 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
23680 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
23690 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
236a0 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
236b0 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
236c0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
236d0 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
236e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
236f0 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
23700 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
23710 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
23720 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
23730 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
23740 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
23750 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
23780 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
23790 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
237a0 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
237b0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
237c0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
237d0 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
237e0 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
237f0 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
23800 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
23810 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
23820 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
23830 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
23840 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
23850 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23860 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
23870 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
23880 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
23890 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
238a0 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
238b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
238c0 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
238d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
238e0 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
238f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
23900 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
23910 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
23920 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
23930 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
23940 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
23950 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
23960 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
23970 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
23980 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
23990 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
239a0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
239b0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
239c0 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
239d0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
239e0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
239f0 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
23a00 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
23a10 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
23a20 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43  ,int);.#if SELEC
23a30 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76  TTRACE_ENABLED.v
23a40 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
23a50 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a  tSetName(Select*
23a60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  ,const char*);.#
23a70 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
23a80 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
23a90 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  me(A,B).#endif.v
23aa0 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
23ab0 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
23ac0 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
23ad0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
23ae0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
23af0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23b00 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
23b10 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
23b20 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
23b30 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
23b40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23b50 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
23b60 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
23b70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
23b80 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
23b90 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
23ba0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
23bb0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
23bc0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
23bd0 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
23be0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
23bf0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
23c00 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
23c10 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
23c20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
23c30 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
23c40 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
23c50 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
23c60 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
23c70 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
23c80 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
23c90 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
23ca0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
23cb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
23cc0 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
23cd0 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
23ce0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
23cf0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
23d20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
23d30 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
23d40 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
23d50 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
23d60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
23d70 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
23d80 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
23d90 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23da0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
23db0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
23dc0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
23dd0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
23de0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
23df0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
23e00 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
23e10 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
23e20 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
23e30 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
23e40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23e50 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
23e60 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
23e70 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
23e80 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
23eb0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
23ec0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
23ed0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
23ee0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
23ef0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
23f00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
23f10 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
23f20 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
23f30 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
23f40 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
23f50 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
23f60 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
23f70 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
23f80 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
23f90 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
23fa0 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
23fb0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
23fc0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
23fd0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
23fe0 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
23ff0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
24000 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
24030 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
24040 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
24050 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
24060 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
24070 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
24080 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
24090 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
240a0 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
240b0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
240c0 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
240d0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
240e0 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
240f0 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
24100 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
24110 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
24120 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
24130 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
24140 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
24150 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
24160 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
24170 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
24180 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
24190 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
241a0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
241b0 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
241c0 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65  plevel : (p)).#e
241d0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
241e0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
241f0 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
24200 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
24210 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
24220 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24230 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
24240 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
24250 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
24260 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
24270 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
24280 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
24290 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
242a0 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
242b0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
242c0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
242d0 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
242e0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
242f0 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
24300 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
24310 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
24320 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24330 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
24340 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
24350 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
24360 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
24370 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
24380 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
24390 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
243a0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
243b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
243c0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
243d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
243e0 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
243f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
24400 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24410 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
24420 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
24430 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
24440 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
24450 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
24460 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
24470 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
24480 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
24490 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
244a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
244b0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
244c0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
244d0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
244e0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
244f0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
24500 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
24510 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
24520 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
24530 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
24540 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
24550 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
24560 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
24570 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
24580 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
24590 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
245a0 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
245b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
245c0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
245d0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
245e0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
245f0 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
24600 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
24610 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
24620 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
24630 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
24640 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
24650 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
24660 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
24670 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
24680 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
24690 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
246a0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
246b0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
246c0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
246d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
246e0 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
246f0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
24700 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
24710 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
24720 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
24730 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
24740 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
24750 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
24760 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
24770 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
24780 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
24790 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
247a0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
247b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
247c0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
247d0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
247e0 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
247f0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
24800 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
24810 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
24820 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
24830 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
24840 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
24850 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
24860 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
24870 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
24880 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
24890 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
248a0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
248b0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
248c0 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
248d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
248e0 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
248f0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
24900 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
24910 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c  ;.#endif.u64 sql
24920 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
24930 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  LogEst);../*.** 
24940 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
24950 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
24960 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
24970 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
24980 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
24990 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
249a0 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
249b0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
249c0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
249d0 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
249e0 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
249f0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
24a00 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
24a10 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
24a20 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
24a30 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
24a40 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
24a50 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
24a60 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
24a70 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
24a80 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
24a90 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
24aa0 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
24ab0 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
24ac0 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
24ad0 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
24ae0 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
24af0 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
24b00 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
24b10 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
24b20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
24b30 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
24b40 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
24b50 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
24b60 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
24b70 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
24b80 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
24b90 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
24ba0 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
24bb0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
24bc0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
24bd0 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
24be0 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
24bf0 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
24c00 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
24c10 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
24c20 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
24c30 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
24c40 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
24c50 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
24c60 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
24c70 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
24c80 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
24c90 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
24ca0 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
24cb0 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28  e3TableAffinity(
24cc0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
24cd0 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
24ce0 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
24cf0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
24d00 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
24d10 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
24d20 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
24d30 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
24d40 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
24d50 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
24d60 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
24d70 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
24d80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
24d90 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
24da0 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
24db0 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
24dc0 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
24dd0 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
24de0 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
24df0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
24e00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24e10 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
24e20 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
24e30 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
24e40 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
24e50 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
24e60 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
24e70 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
24e80 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
24e90 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
24ea0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
24eb0 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
24ec0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 0a 63  (SQLITE_TEST) .c
24ed0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
24ee0 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a  e3ErrName(int);.
24ef0 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
24f00 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
24f10 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
24f20 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
24f30 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
24f40 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
24f50 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
24f60 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
24f70 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c   char*,int);.Col
24f80 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
24f90 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
24fa0 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
24fb0 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
24fc0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
24fd0 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
24fe0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
24ff0 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  xpr);.Expr *sqli
25000 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
25010 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
25020 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
25030 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
25040 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
25050 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
25060 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
25070 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
25080 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
25090 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
250a0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
250b0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
250c0 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
250d0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
250e0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
250f0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
25100 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
25110 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
25120 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
25130 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
25140 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
25150 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
25160 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
25170 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
25180 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
25190 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
251a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
251b0 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
251c0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
251d0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
251e0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
251f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25200 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
25210 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
25220 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
25230 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
25240 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
25250 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
25260 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
25270 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
25280 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
25290 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
252a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
252b0 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
252c0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
252d0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
252e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252f0 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
25300 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
25310 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
25320 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
25330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25340 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
25350 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
25360 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
25370 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
25380 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
25390 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
253a0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
253b0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
253c0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
253d0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
253e0 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
253f0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
25400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25410 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
25420 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
25430 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
25440 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
25450 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
25460 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25470 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
25480 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
25490 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
254a0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
254b0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
254c0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
254d0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
254e0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
254f0 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
25500 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
25510 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
25520 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
25530 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
25540 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
25550 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
25560 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
25570 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
25580 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25590 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
255a0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
255b0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
255c0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
255d0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
255e0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
255f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25600 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
25610 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
25620 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
25630 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
25640 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
25650 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
25660 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
25670 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
25680 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
25690 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
256a0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
256b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
256c0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
256d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
256e0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
256f0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
25700 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
25710 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
25720 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
25730 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
25740 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25750 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
25760 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
25770 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
25780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
25790 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
257a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
257b0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
257c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
257d0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
257e0 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
257f0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
25800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25810 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
25820 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
25830 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
25840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
25850 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
25860 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
25870 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
25880 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
25890 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
258a0 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
258b0 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
258c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
258d0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
258e0 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
258f0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
25900 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25910 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
25920 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
25930 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
25940 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
25950 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
25960 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
25970 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
25980 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
25990 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
259a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
259b0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
259c0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
259d0 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
259e0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
259f0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
25a00 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
25a10 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
25a20 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
25a30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
25a40 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
25a50 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
25a60 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
25a70 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
25a80 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
25a90 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
25aa0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
25ab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25ac0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
25ad0 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
25ae0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25af0 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
25b00 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
25b10 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
25b20 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
25b30 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25b40 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
25b50 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
25b60 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
25b70 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
25b80 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
25b90 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
25ba0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
25bb0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
25bc0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
25bd0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
25be0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
25bf0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
25c00 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
25c10 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
25c20 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
25c30 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
25c40 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
25c50 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
25c60 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
25c70 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
25c80 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
25c90 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
25ca0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
25cb0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
25cc0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
25cd0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
25ce0 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
25cf0 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
25d00 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
25d10 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
25d20 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
25d30 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
25d40 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
25d50 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
25d60 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
25d70 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25d80 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
25d90 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
25da0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
25db0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
25dc0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
25dd0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
25de0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
25df0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
25e00 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
25e10 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
25e20 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
25e30 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
25e40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25e50 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
25e60 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
25e70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25e80 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
25e90 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
25ea0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
25eb0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
25ec0 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
25ed0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
25ee0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25ef0 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
25f00 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
25f10 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
25f20 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
25f30 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
25f40 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
25f50 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
25f60 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
25f70 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
25f80 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
25f90 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
25fa0 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
25fb0 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
25fc0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
25fd0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
25fe0 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
25ff0 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
26000 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
26010 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
26020 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
26030 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
26040 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
26050 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
26060 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
26070 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
26080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
26090 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
260a0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
260b0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
260c0 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
260d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
260e0 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
260f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26100 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
26110 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
26120 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
26130 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
26140 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
26150 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
26160 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
26170 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
26180 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
26190 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
261a0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
261b0 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
261c0 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
261d0 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
261e0 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
261f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26200 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
26210 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
26220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
26230 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
26240 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
26250 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
26260 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
26270 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
26280 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
26290 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
262a0 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
262b0 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
262c0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
262d0 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
262e0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
262f0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
26300 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
26310 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26320 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
26330 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
26340 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26350 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
26360 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
26370 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
26380 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
26390 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
263a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
263b0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
263c0 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
263d0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
263e0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
263f0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
26400 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
26410 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
26420 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26430 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
26440 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
26450 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
26460 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
26470 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
26480 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26490 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
264a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
264b0 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
264c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
264d0 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
264e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
264f0 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
26500 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26510 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
26520 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26530 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
26540 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26550 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
26560 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
26570 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26580 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
26590 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
265a0 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
265b0 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
265c0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
265d0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
265e0 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
265f0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
26600 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
26610 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
26620 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
26630 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
26640 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
26650 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
26660 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26670 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
26680 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
26690 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
266a0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
266b0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
266c0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
266d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
266e0 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
266f0 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
26700 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
26710 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
26720 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
26730 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
26740 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
26750 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
26760 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
26770 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
26780 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
26790 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
267a0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
267b0 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
267c0 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
267d0 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
267e0 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
267f0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
26800 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
26810 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
26820 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
26830 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
26840 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26850 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
26860 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
26870 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26880 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
26890 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
268a0 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
268b0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
268c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
268d0 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
268e0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
268f0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
26900 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
26910 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
26920 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
26930 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
26940 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
26950 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
26960 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
26970 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
26980 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
26990 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
269a0 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
269b0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
269c0 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
269d0 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
269e0 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
269f0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
26a00 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
26a10 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
26a20 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
26a30 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
26a40 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
26a50 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
26a60 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
26a70 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
26a80 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
26a90 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
26aa0 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
26ab0 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
26ac0 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
26ad0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
26ae0 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
26af0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
26b00 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
26b10 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26b20 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
26b30 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
26b40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
26b50 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
26b60 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
26b70 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
26b80 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
26b90 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
26ba0 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
26bb0 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
26bc0 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
26bd0 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
26be0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26bf0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
26c00 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
26c10 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
26c20 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
26c30 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
26c40 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
26c50 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
26c60 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
26c70 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
26c80 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
26c90 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
26ca0 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
26cb0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
26cc0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
26cd0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
26ce0 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
26cf0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26d00 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
26d10 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
26d20 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
26d30 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
26d40 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
26d50 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
26d60 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
26d70 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
26d80 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
26d90 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
26da0 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
26db0 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
26dc0 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
26dd0 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
26de0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
26df0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
26e00 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
26e10 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
26e20 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
26e30 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
26e40 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
26e50 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
26e60 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
26e70 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
26e80 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
26e90 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
26ea0 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
26eb0 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
26ec0 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
26ed0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
26ee0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
26ef0 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
26f00 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
26f10 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
26f20 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26f30 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
26f40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26f50 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
26f60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
26f70 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
26f80 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
26f90 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
26fa0 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
26fb0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
26fc0 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
26fd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
26fe0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
26ff0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
27000 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
27010 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
27020 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
27030 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27040 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
27050 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
27060 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
27070 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
27080 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
27090 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
270a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
270b0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
270c0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
270d0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
270e0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
270f0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
27100 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
27110 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27120 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
27130 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
27140 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
27150 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
27160 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
27170 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
27180 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
27190 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
271a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
271b0 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
271c0 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
271d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
271e0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
271f0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
27200 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
27210 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
27220 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
27230 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
27240 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
27250 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
27260 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
27270 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
27280 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27290 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
272a0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
272b0 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
272c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
272d0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
272e0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
272f0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
27300 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
27310 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
27320 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
27330 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
27340 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
27350 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
27360 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
27370 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
27380 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
27390 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
273a0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
273b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
273c0 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
273d0 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
273e0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
273f0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
27400 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27410 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27420 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
27430 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
27440 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
27450 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
27460 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
27470 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
27480 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
27490 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
274a0 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
274b0 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
274c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
274d0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
274e0 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
274f0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
27500 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
27510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27520 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
27530 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
27540 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
27550 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
27560 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
27570 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
27580 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
27590 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
275a0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
275b0 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
275c0 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
275d0 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
275e0 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
275f0 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
27600 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
27610 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
27620 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
27630 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
27640 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
27650 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
27660 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
27670 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27680 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
27690 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
276a0 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
276b0 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
276c0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
276d0 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
276e0 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
276f0 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
27700 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
27710 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
27720 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
27730 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
27740 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
27750 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
27760 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
27770 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
27780 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
27790 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
277a0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
277b0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
277c0 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
277d0 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
277e0 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
277f0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
27800 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27810 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
27820 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
27830 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
27840 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
27850 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
27860 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
27870 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
27880 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
27890 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
278a0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
278b0 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
278c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
278d0 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
278e0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
278f0 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
27900 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69  te3_file *);..#i
27910 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
27920 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64  R_DEPTH>0.  void
27930 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
27940 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61  eight(Parse *pPa
27950 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20  rse, Expr *p);. 
27960 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
27970 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
27980 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
27990 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
279a0 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
279b0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
279c0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  ne sqlite3ExprSe
279d0 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23  tHeight(x,y).  #
279e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
279f0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
27a00 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
27a10 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
27a20 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
27a30 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
27a40 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
27a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
27a60 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
27a70 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27a80 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
27a90 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
27aa0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
27ab0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
27ac0 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
27ad0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
27ae0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
27af0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
27b00 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
27b10 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
27b20 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
27b30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27b40 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
27b50 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
27b60 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27b70 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
27b80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
27b90 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
27ba0 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
27bb0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27bc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
27bd0 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
27be0 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
27bf0 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
27c00 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
27c10 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
27c20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
27c30 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
27c40 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
27c50 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
27c60 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
27c70 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
27c80 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
27c90 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  s. .*/.#ifdef SQ
27ca0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
27cb0 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
27cc0 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
27cd0 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
27ce0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
27cf0 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
27d00 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
27d10 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45  Vdbe*);.SQLITE_E
27d20 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c  XTERN void (*sql
27d30 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
27d40 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
27d50 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
27d60 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
27d70 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
27d80 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
27d90 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
27da0 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
27db0 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
27dc0 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
27dd0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
27de0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
27df0 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
27e00 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
27e10 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
27e20 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
27e30 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
27e40 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
27e50 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
27e60 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
27e70 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
27e80 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
27e90 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
27ea0 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
27eb0 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
27ec0 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
27ed0 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
27ee0 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
27ef0 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
27f00 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
27f10 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
27f20 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
27f30 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
27f40 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
27f50 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
27f60 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
27f70 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
27f80 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
27f90 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
27fa0 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
27fb0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
27fc0 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
27fd0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
27fe0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
27ff0 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
28000 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
28010 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
28020 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
28030 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
28040 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
28050 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
28060 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28070 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
28080 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
28090 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
280a0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
280b0 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
280c0 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
280d0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
280e0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
280f0 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
28100 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
28110 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
28120 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
28130 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
28140 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
28150 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
28160 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
28170 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
28180 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
28190 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
281a0 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
281b0 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
281c0 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
281d0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
281e0 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
281f0 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
28200 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
28210 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
28220 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
28230 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
28240 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
28250 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
28260 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
28270 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
28280 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
28290 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
282a0 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
282b0 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
282c0 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
282d0 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
282e0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
282f0 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
28300 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
28310 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
28320 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
28330 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
28340 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
28350 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
28360 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
28370 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
28380 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
28390 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
283a0 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
283b0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
283c0 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
283d0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
283e0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
283f0 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
28400 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
28410 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
28420 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
28430 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
28440 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
28450 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
28460 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
28470 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
28480 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
28490 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74  02  /* Heap that
284a0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
284b0 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64   lookaside */.#d
284c0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
284d0 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
284e0 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
284f0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
28500 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
28510 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
28520 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
28530 6f 6e 73 20 2a 2f 0a 0a 23 69 66 20 28 53 51 4c  ons */..#if (SQL
28540 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45  ITE_ENABLE_APPLE
28550 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66 69 6e  _SPI>0) && defin
28560 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 0a 2f  ed(__APPLE__)../
28570 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
28580 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
28590 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
285a0 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
285b0 70 72 6f 63 65 73 73 20 49 44 0a 2a 2a 20 61 6e  process ID.** an
285c0 64 20 72 65 74 75 72 6e 2d 62 79 2d 72 65 66 65  d return-by-refe
285d0 72 65 6e 63 65 20 6c 6f 63 6b 73 74 61 74 65 20  rence lockstate 
285e0 76 61 6c 75 65 2e 20 20 54 68 65 20 53 51 4c 49  value.  The SQLI
285f0 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41  TE_FCNTL_LOCKSTA
28600 54 45 5f 50 49 44 0a 2a 2a 20 72 65 71 75 69 72  TE_PID.** requir
28610 65 73 20 74 68 65 20 34 74 68 20 61 72 67 75 6d  es the 4th argum
28620 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 5f 66  ent to sqlite3_f
28630 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 74 6f 20 62  ile_control to b
28640 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
28650 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
28660 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 20 69 6e   LockstatePID in
28670 69 74 69 61 6c 69 7a 65 64 20 77 69 74 68 20 61  itialized with a
28680 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 2e 70 69   LockstatePID.pi
28690 64 20 76 61 6c 75 65 20 65 71 75 61 6c 0a 2a 2a  d value equal.**
286a0 20 74 6f 20 61 20 70 72 6f 63 65 73 73 20 49 44   to a process ID
286b0 20 74 6f 20 62 65 20 74 65 73 74 65 64 2c 20 6f   to be tested, o
286c0 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 76 61  r the special va
286d0 6c 75 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53  lue SQLITE_LOCKS
286e0 54 41 54 45 5f 41 4e 59 50 49 44 0a 2a 2a 20 54  TATE_ANYPID.** T
286f0 68 65 20 4c 6f 63 6b 73 74 61 74 65 2e 73 74 61  he Lockstate.sta
28700 74 65 20 76 61 6c 75 65 20 69 73 20 61 6c 77 61  te value is alwa
28710 79 73 20 73 65 74 20 74 6f 20 6f 6e 65 20 6f 66  ys set to one of
28720 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   the following v
28730 61 6c 75 65 73 0a 2a 2a 20 77 68 65 6e 20 73 71  alues.** when sq
28740 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
28750 6f 6c 20 72 65 74 75 72 6e 73 3a 0a 2a 2a 20 0a  ol returns:.** .
28760 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  **   SQLITE_LOCK
28770 53 54 41 54 45 5f 4f 46 46 20 20 20 20 6e 6f 20  STATE_OFF    no 
28780 61 63 74 69 76 65 20 73 71 6c 69 74 65 20 66 69  active sqlite fi
28790 6c 65 20 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74  le locks match t
287a0 68 65 20 73 70 65 63 69 66 69 65 64 20 70 69 64  he specified pid
287b0 0a 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43  .**   SQLITE_LOC
287c0 4b 53 54 41 54 45 5f 4f 4e 20 20 20 20 20 61 63  KSTATE_ON     ac
287d0 74 69 76 65 20 73 71 6c 69 74 65 20 66 69 6c 65  tive sqlite file
287e0 20 6c 6f 63 6b 73 20 6d 61 74 63 68 20 74 68 65   locks match the
287f0 20 73 70 65 63 69 66 69 65 64 20 70 69 64 0a 2a   specified pid.*
28800 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 53  *   SQLITE_LOCKS
28810 54 41 54 45 5f 4e 4f 54 41 44 42 20 70 61 74 68  TATE_NOTADB path
28820 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 69 6c   points to a fil
28830 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 61 6e  e that is not an
28840 20 73 71 6c 69 74 65 20 64 62 20 66 69 6c 65 0a   sqlite db file.
28850 2a 2a 20 20 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  **   SQLITE_LOCK
28860 53 54 41 54 45 5f 45 52 52 4f 52 20 20 70 61 74  STATE_ERROR  pat
28870 68 20 77 61 73 20 6e 6f 74 20 76 61 69 6c 64 20  h was not vaild 
28880 6f 72 20 77 61 73 20 75 6e 72 65 61 64 61 62 6c  or was unreadabl
28890 65 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  e.*/.typedef str
288a0 75 63 74 20 4c 6f 63 6b 73 74 61 74 65 50 49 44  uct LockstatePID
288b0 20 4c 6f 63 6b 73 74 61 74 65 50 49 44 3b 0a 73   LockstatePID;.s
288c0 74 72 75 63 74 20 4c 6f 63 6b 73 74 61 74 65 50  truct LockstateP
288d0 49 44 20 7b 0a 20 20 70 69 64 5f 74 20 70 69 64  ID {.  pid_t pid
288e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
288f0 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 49 44 20    /* Process ID 
28900 74 6f 20 74 65 73 74 20 2a 2f 0a 20 20 69 6e 74  to test */.  int
28910 20 73 74 61 74 65 3b 20 20 20 20 20 20 20 20 20   state;         
28920 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
28930 74 61 74 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b  tate of the lock
28940 20 28 72 65 74 75 72 6e 20 76 61 6c 75 65 29 20   (return value) 
28950 2a 2f 0a 7d 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  */.};..#endif /*
28960 20 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   (SQLITE_ENABLE_
28970 41 50 50 4c 45 5f 53 50 49 3e 30 29 20 26 26 20  APPLE_SPI>0) && 
28980 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
28990 5f 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  _) */../*.** Thr
289a0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
289b0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
289c0 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
289d0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
289e0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
289f0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
28a00 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
28a10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
28a20 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
28a30 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
28a40 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
28a50 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
28a60 20 2a 2f 0a                                       */.