/ Hex Artifact Content
Login

Artifact 5ecde2191721a94cdce0d5248e26a373e0b17a70:


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 0a 23 20 20 64 65 66  _MSC_VER).#  def
1780: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1790: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
17a0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
17b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
17c0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
17d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
17e0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61  TE_THREADSAFE ma
17f0: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1800: 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20  ned as 0, 1, or 
1810: 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75  2..** 0 means mu
1820: 74 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e  texes are perman
1830: 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e  ently disable an
1840: 64 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  d the library is
1850: 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64   never.** thread
1860: 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74  safe.  1 means t
1870: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65  he library is se
1880: 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69  rialized which i
1890: 73 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a  s the highest.**
18a0: 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64   level of thread
18b0: 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73  safety.  2 means
18c0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
18d0: 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20  multithreaded - 
18e0: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65  multiple.** thre
18f0: 61 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69  ads can use SQLi
1900: 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f  te as long as no
1910: 20 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79   two threads try
1920: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
1930: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
1940: 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73  nection at the s
1950: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ame time..**.** 
1960: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
1970: 66 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e  f SQLite used an
1980: 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44   optional THREAD
1990: 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57  SAFE macro..** W
19a0: 65 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66  e support that f
19b0: 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69  or legacy..*/.#i
19c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
19d0: 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  E_THREADSAFE).# 
19e0: 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41  if defined(THREA
19f0: 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e  DSAFE).#   defin
1a00: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
1a10: 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a 23  AFE THREADSAFE.#
1a20: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
1a30: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
1a40: 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30  FE 1 /* IMP: R-0
1a50: 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20  7272-22309 */.# 
1a60: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1a70: 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76  .** Powersafe ov
1a80: 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79  erwrite is on by
1a90: 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63   default.  But c
1aa0: 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66  an be turned off
1ab0: 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44   using.** the -D
1ac0: 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45  SQLITE_POWERSAFE
1ad0: 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d  _OVERWRITE=0 com
1ae0: 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
1af0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
1b00: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1b10: 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65  ERWRITE.# define
1b20: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
1b30: 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65  E_OVERWRITE 1.#e
1b40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1b50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1b60: 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f 20 6d  EMSTATUS macro m
1b70: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1b80: 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
1b90: 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69 6e 65  .** It determine
1ba0: 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
1bb0: 20 74 68 65 20 66 65 61 74 75 72 65 73 20 72 65   the features re
1bc0: 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c  lated to .** SQL
1bd0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
1be0: 41 54 55 53 20 61 72 65 20 61 76 61 69 6c 61 62  ATUS are availab
1bf0: 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20 6f 72  le by default or
1c00: 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c 75 65   not. This value
1c10: 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72   can.** be overr
1c20: 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69 6d 65  idden at runtime
1c30: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
1c40: 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50 49 2e  e3_config() API.
1c50: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c60: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c70: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1c80: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1c90: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1ca0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1cb0: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1cc0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cd0: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1ce0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
1cf0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
1d00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1d10: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
1d20: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
1d30: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1d40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1d50: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1d60: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1d70: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1d80: 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  OC           // 
1d90: 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  Use Win32 native
1da0: 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20   heap API.**    
1db0: 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c   SQLITE_ZERO_MAL
1dc0: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f  LOC            /
1dd0: 2f 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c  / Use a stub all
1de0: 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61  ocator that alwa
1df0: 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20  ys fails.**     
1e00: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e20: 20 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69   Debugging versi
1e30: 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c  on of system mal
1e40: 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57  loc().**.** On W
1e50: 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53  indows, if the S
1e60: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1e70: 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72  OC_VALIDATE macr
1e80: 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64  o is defined and
1e90: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1ea0: 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65   macro is enable
1eb0: 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74  d, each call int
1ec0: 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  o the Win32 nati
1ed0: 76 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65  ve heap subsyste
1ee0: 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20  m.** will cause 
1ef0: 48 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20  HeapValidate to 
1f00: 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68  be called.  If h
1f10: 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73  eap validation s
1f20: 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a  hould fail, an.*
1f30: 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c  * assertion will
1f40: 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a   be triggered..*
1f50: 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20  *.** If none of 
1f60: 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65  the above are de
1f70: 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20  fined, then set 
1f80: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1f90: 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64  LLOC as.** the d
1fa0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64  efault..*/.#if d
1fb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
1fc0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
1fd0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1fe0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
1ff0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2000: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2010: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2020: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2030: 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20  >1.# error "Two 
2040: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
2050: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65  ollowing compile
2060: 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2070: 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72  ion options\. ar
2080: 65 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74  e defined but at
2090: 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c   most one is all
20a0: 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53  owed:\. SQLITE_S
20b0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51  YSTEM_MALLOC, SQ
20c0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
20d0: 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  C, SQLITE_MEMDEB
20e0: 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52  UG,\. SQLITE_ZER
20f0: 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66  O_MALLOC".#endif
2100: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2110: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2120: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2130: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2140: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2150: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2160: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2170: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2180: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
2190: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
21a0: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
21b0: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
21c0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
21d0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
21e0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
21f0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
2200: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
2210: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
2220: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
2230: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
2240: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
2250: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
2260: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2270: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
2280: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
2290: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
22a0: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
22b0: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
22c0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
22d0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
22e0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
22f0: 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64  Unix systems and
2300: 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65   fchmod() on Ope
2310: 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f  nBSD..** But _XO
2320: 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e  PEN_SOURCE defin
2330: 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d  e causes problem
2340: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20  s for Mac OS X, 
2350: 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a  so omit.** it..*
2360: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
2370: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26  XOPEN_SOURCE) &&
2380: 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57   !defined(__DARW
2390: 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  IN__) && !define
23a0: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20  d(__APPLE__).#  
23b0: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
23c0: 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a  URCE 600.#endif.
23d0: 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e  ./*.** NDEBUG an
23e0: 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61  d SQLITE_DEBUG a
23f0: 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49  re opposites.  I
2400: 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  t should always 
2410: 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20  be true that.** 
2420: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d  defined(NDEBUG)=
2430: 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  =!defined(SQLITE
2440: 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69  _DEBUG).  If thi
2450: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
2460: 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65  ly true,.** make
2470: 20 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69   it true by defi
2480: 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69  ning or undefini
2490: 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a  ng NDEBUG..**.**
24a0: 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20   Setting NDEBUG 
24b0: 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73  makes the code s
24c0: 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65  maller and faste
24d0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
24e0: 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73  he.** assert() s
24f0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
2500: 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61   code.  So we wa
2510: 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  nt the default a
2520: 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66  ction.** to be f
2530: 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20  or NDEBUG to be 
2540: 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74  set and NDEBUG t
2550: 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f  o be undefined o
2560: 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45  nly if SQLITE_DE
2570: 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20  BUG.** is set.  
2580: 54 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f  Thus NDEBUG beco
2590: 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61  mes an opt-in ra
25a0: 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74  ther than an opt
25b0: 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e  -out.** feature.
25c0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
25d0: 28 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66  (NDEBUG) && !def
25e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25f0: 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  G) .# define NDE
2600: 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  BUG 1.#endif.#if
2610: 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29   defined(NDEBUG)
2620: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
2630: 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65  TE_DEBUG).# unde
2640: 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a  f NDEBUG.#endif.
2650: 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51  ./*.** Enable SQ
2660: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
2670: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20  AIN_COMMENTS if 
2680: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
2690: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
26a0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
26c0: 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65  _COMMENTS) && de
26d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
26e0: 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  UG).# define SQL
26f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
2700: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65  IN_COMMENTS 1.#e
2710: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2720: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2730: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2740: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2750: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2760: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2770: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2780: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2790: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
27a0: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
27b0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
27c0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
27d0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
27e0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
27f0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
2800: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2810: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2820: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2830: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2840: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2850: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2860: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2870: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2880: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2890: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
28a0: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
28b0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
28c0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
28d0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
28e0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
28f0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
2900: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2910: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2920: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2930: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2940: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2950: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2960: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2970: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2980: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2990: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
29a0: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
29b0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
29c0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
29d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
29e0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
29f0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
2a00: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2a10: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2a20: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2a30: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2a40: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2a50: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2a70: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2a80: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2a90: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2aa0: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
2ab0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
2ac0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
2ad0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
2ae0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
2af0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
2b00: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2b10: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2b20: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2b30: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2b40: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2b50: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2b60: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2b70: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2b80: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2b90: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2ba0: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
2bb0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
2bc0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
2bd0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
2be0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
2bf0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
2c00: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2c10: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2c20: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2c30: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2c40: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2c50: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2c60: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2c70: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2c80: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2c90: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2ca0: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
2cb0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
2cc0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
2cd0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
2ce0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2cf0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
2d00: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2d10: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2d20: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2d30: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2d40: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2d50: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2d60: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2d70: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2d80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d90: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2da0: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
2db0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
2dc0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
2dd0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
2de0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
2df0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
2e00: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2e10: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2e20: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2e30: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2e40: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2e50: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2e60: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2e70: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2e80: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2e90: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2ea0: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
2eb0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
2ec0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
2ed0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
2ee0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
2ef0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
2f00: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2f10: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2f20: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2f30: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2f40: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2f50: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2f60: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2f70: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2f80: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2f90: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2fa0: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
2fb0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
2fc0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
2fd0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
2fe0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
2ff0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3000: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3010: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3020: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3030: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3040: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3050: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3060: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3070: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3080: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3090: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
30a0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
30b0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
30c0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
30d0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
30e0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
30f0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3100: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3110: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3120: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3130: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3140: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3150: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3160: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3170: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3180: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3190: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
31a0: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
31b0: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
31c0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
31d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
31e0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
31f0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
3200: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
3210: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3220: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3230: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3240: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3250: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3260: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3270: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3280: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3290: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
32a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
32b0: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
32c0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
32d0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
32e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
32f0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
3300: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
3310: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3320: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3330: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3340: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3350: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3360: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3370: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3380: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3390: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
33a0: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
33b0: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
33c0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
33d0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
33e0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
33f0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
3400: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
3410: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
3420: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
3430: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
3440: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
3450: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
3460: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
3470: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
3480: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
3490: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
34a0: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
34b0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
34c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
34d0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
34e0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
34f0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
3500: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
3510: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3520: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3530: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
3540: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
3550: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
3560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3570: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
3580: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
3590: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
35a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
35b0: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
35c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
35d0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
35e0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
35f0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
3600: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
3610: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
3620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3630: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
3640: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
3650: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3660: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3670: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3680: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3690: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
36a0: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
36b0: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
36c0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
36d0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
36e0: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
36f0: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
3700: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
3710: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
3720: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
3730: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
3740: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
3750: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3760: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3770: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3780: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3790: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
37a0: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
37b0: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
37c0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
37d0: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
37e0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
37f0: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
3800: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
3810: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
3820: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
3830: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
3840: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
3850: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3860: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3870: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3880: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3890: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
38a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
38b0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
38c0: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
38d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38e0: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
38f0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
3900: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
3910: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
3920: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
3930: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
3940: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3950: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3960: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3970: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3980: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
39a0: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
39b0: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
39c0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
39d0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
39e0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
39f0: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
3a00: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
3a10: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
3a20: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
3a30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
3a40: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
3a50: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3a60: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3a70: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3a80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3a90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3aa0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
3ab0: 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65   no value has be
3ac0: 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  en provided for 
3ad0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ae0: 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66  R_THREADS, or if
3af0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  .** SQLITE_TEMP_
3b00: 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20  STORE is set to 
3b10: 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d  3 (never use tem
3b20: 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73  porary files), s
3b30: 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72  et it .** to zer
3b40: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
3b50: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
3b60: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
3b70: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
3b80: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3b90: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3ba0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
3bb0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3bc0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3bd0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3be0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3bf0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3c00: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
3c10: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3c20: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3c30: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
3c40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3c50: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3c60: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
3c70: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
3c80: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>SQLIT
3c90: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3ca0: 45 41 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
3cb0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3cc0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3cd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3ce0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
3cf0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
3d00: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
3d10: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
3d20: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
3d30: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
3d40: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3d50: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3d60: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3d70: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3d80: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3d90: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3da0: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3db0: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3dc0: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3dd0: 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75   Macros to compu
3de0: 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d  te minimum and m
3df0: 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75  aximum of two nu
3e00: 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  mbers..*/.#defin
3e10: 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c  e MIN(A,B) ((A)<
3e20: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65  (B)?(A):(B)).#de
3e30: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
3e40: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
3e50: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
3e60: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
3e70: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
3e80: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
3e90: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
3ea0: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
3eb0: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
3ec0: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
3ed0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
3ee0: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
3ef0: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
3f00: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f10: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
3f20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
3f30: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
3f40: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
3f50: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
3f60: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
3f70: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
3f80: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
3f90: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
3fa0: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
3fb0: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
3fc0: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
3fd0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
3fe0: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
3ff0: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
4000: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
4010: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
4020: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4030: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4040: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4050: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4060: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4070: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
4080: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4090: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
40a0: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
40b0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
40c0: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
40d0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
40e0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
40f0: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
4100: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4110: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
4120: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4130: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4140: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4150: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4160: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4170: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
4180: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4190: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
41a0: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
41b0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
41c0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
41d0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
41e0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
41f0: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4200: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4210: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4220: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4230: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4240: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4250: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4260: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4270: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4280: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4290: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
42a0: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
42b0: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
42c0: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
42d0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
42e0: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
42f0: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4300: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4310: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4320: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4330: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4340: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4350: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4360: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4370: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4380: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4390: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
43a0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
43b0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
43c0: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
43d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
43e0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
43f0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4400: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4420: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4430: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4440: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4460: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4470: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4480: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
44a0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
44b0: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
44c0: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
44d0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
44e0: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
44f0: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4500: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4510: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4520: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4530: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4540: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4550: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4560: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4570: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4580: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4590: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
45a0: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
45b0: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
45c0: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
45d0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
45e0: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
45f0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4600: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4610: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4620: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4630: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4640: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4650: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4660: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4670: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4680: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4690: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
46a0: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
46b0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
46c0: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
46d0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
46e0: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
46f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4700: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4710: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4720: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
4730: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
4740: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
4750: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
4760: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
4770: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
4780: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
4790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
47a0: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
47b0: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
47c0: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
47d0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
47e0: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
47f0: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
4800: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
4810: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
4820: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
4830: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
4840: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
4850: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
4860: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
4870: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
4880: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
4890: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
48a0: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
48b0: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
48c0: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
48d0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
48e0: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
48f0: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
4900: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
4910: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
4920: 74 61 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  taties are suppo
4930: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
4940: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
4950: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
4960: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
4970: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
4980: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
4990: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
49a0: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
49b0: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
49c0: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
49e0: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
49f0: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
4a00: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
4a10: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
4a20: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
4a30: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
4a40: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
4a50: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
4a60: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
4a70: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
4a80: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
4a90: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
4aa0: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
4ab0: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
4ac0: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
4ad0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
4ae0: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
4af0: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
4b00: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
4b10: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
4b20: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
4b30: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
4b40: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
4b50: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
4b60: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
4b70: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
4b80: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
4b90: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
4ba0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
4bb0: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
4bc0: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
4bd0: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
4be0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
4bf0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
4c00: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
4c10: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
4c20: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
4c30: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
4c40: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4c50: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
4c60: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
4c70: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
4c80: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
4c90: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
4ca0: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
4cb0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4cc0: 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c  EORDER=1 is set,
4cd0: 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72   then byte-order
4ce0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a   is determined.*
4cf0: 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a  * at run-time..*
4d00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4d10: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
4d20: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
4d30: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
4d40: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
4d50: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
4d60: 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33  .#if (defined(i3
4d70: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
4d80: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
4d90: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
4da0: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
4db0: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34  defined(__x86_64
4dc0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78  ) || defined(__x
4dd0: 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69  86_64__) || defi
4de0: 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20  ned(_M_X64)  || 
4df0: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
4e00: 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64  d(_M_AMD64) || d
4e10: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
4e20: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4e30: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
4e40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72      defined(__ar
4e50: 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65  m__)) && !define
4e60: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
4e70: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
4e80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
4e90: 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20  ORDER    1234.# 
4ea0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4eb0: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
4ec0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
4ed0: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
4ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
4ef0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
4f00: 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23  UTF16LE.#endif.#
4f10: 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72  if (defined(spar
4f20: 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  c)    || defined
4f30: 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20  (__ppc__))  \.  
4f40: 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51    && !defined(SQ
4f50: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4f60: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
4f70: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
4f80: 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69  R    4321.# defi
4f90: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
4fa0: 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e  IAN    1.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
4fc0: 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65  NDIAN 0.# define
4fd0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
4fe0: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
4ff0: 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  6BE.#endif.#if !
5000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42  defined(SQLITE_B
5010: 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69  YTEORDER).# defi
5020: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
5030: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
5040: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
5050: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
5060: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
5070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5080: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
5090: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
50a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
50b0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
50c0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
50d0: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
50e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
50f0: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
5100: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
5110: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
5120: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
5130: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
5140: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
5150: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
5160: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
5170: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
5180: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
5190: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
51a0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
51b0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
51c0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
51d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
51e0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
51f0: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
5200: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
5210: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
5220: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
5230: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
5240: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
5250: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
5260: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
5270: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
5280: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
5290: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
52a0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
52b0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
52c0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
52d0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
52e0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
52f0: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
5300: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
5310: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
5320: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
5330: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
5340: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
5350: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
5360: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
5370: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
5380: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
5390: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
53a0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
53b0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
53c0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
53d0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
53e0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
53f0: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
5400: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
5410: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
5420: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
5430: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
5440: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
5450: 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74  tation might ret
5460: 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c  urn us 4-byte al
5470: 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72  igned.** pointer
5480: 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  s.  In that case
5490: 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d  , only verify 4-
54a0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a  byte alignment..
54b0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
54c0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
54d0: 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20  MALLOC.# define 
54e0: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
54f0: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5500: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
5510: 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65  )0)&3)==0).#else
5520: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
5530: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
5540: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
5550: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29  ) - (char*)0)&7)
5560: 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ==0).#endif../*.
5570: 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20  ** Disable MMAP 
5580: 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65  on platforms whe
5590: 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74  re it is known t
55a0: 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69  o not work.*/.#i
55b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
55c0: 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  BSD__) || define
55d0: 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20  d(__QNXNTO__).# 
55e0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
55f0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
5600: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
5610: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69  MAP_SIZE 0.#endi
5620: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74  f../*.** Default
5630: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
5640: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
5650: 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f  memory-mapped I/
5660: 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a  O in the VFS.*/.
5670: 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
5680: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67  .# include <Targ
5690: 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68  etConditionals.h
56a0: 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53  >.# if TARGET_OS
56b0: 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65  _IPHONE.#   unde
56c0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
56d0: 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e  P_SIZE.#   defin
56e0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
56f0: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5700: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5710: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5720: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
5730: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
5740: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
5750: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
5760: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
5770: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
5780: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
5790: 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64  ned(__sun).#   d
57a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
57b0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
57c0: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
57d0: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
57e0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
57f0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5800: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
5810: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5820: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
5830: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5840: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
5850: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5860: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
5870: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
5880: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
5890: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
58a0: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
58b0: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
58c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
58d0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
58e0: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
58f0: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
5900: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
5910: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5920: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
5930: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5940: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
5950: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
5960: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5970: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
5980: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
5990: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
59a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
59b0: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
59c0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
59d0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
59e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
59f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5a00: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5a10: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5a20: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
5a30: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
5a40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5a50: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
5a60: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
5a70: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
5a80: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
5a90: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
5aa0: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
5ab0: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
5ac0: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
5ad0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ae0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
5af0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5b00: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
5b10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5b20: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
5b30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5b40: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
5b50: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
5b60: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
5b70: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5b80: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
5b90: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
5ba0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5bb0: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5bc0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5bd0: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
5be0: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
5bf0: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
5c00: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
5c10: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
5c20: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
5c30: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
5c40: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
5c50: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
5c60: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
5c70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
5c80: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
5c90: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
5ca0: 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e  CTTRACE).# defin
5cb0: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
5cc0: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
5cd0: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
5ce0: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
5cf0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5d00: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5d10: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5d20: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5d30: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5d40: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5d50: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5d60: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5d70: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5d80: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5d90: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5da0: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5db0: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5dc0: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5dd0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5de0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5df0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5e00: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5e10: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5e20: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5e30: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5e40: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5e50: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5e60: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5e70: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5e80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e90: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5ea0: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5eb0: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5ec0: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5ed0: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5ee0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5ef0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f10: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5f20: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5f30: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5f50: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5f60: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5f70: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5f80: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5f90: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5fa0: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5fb0: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5fc0: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5fd0: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
5fe0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
5ff0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6000: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
6010: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
6020: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
6030: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
6040: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
6050: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
6060: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6070: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
6080: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
6090: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
60a0: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
60b0: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
60c0: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
60d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
60e0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
60f0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6100: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
6110: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
6120: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6130: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6140: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6150: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6160: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6170: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6180: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6190: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
61a0: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
61b0: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
61c0: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
61d0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
61e0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
61f0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6200: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
6210: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
6220: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6230: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6240: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6250: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6260: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6270: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6280: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6290: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
62a0: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
62b0: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
62c0: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
62d0: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
62e0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
62f0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6300: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
6310: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
6320: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6330: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6340: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6350: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6360: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6370: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6380: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6390: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
63a0: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
63b0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
63c0: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
63d0: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
63e0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
63f0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6400: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
6410: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
6420: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6430: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6440: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6450: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6460: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6470: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6480: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6490: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
64a0: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
64b0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
64c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
64d0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
64e0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
64f0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6500: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
6510: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
6520: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6530: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
6540: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
6550: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
6560: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6570: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6580: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6590: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
65a0: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
65b0: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
65c0: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
65d0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
65e0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
65f0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
6600: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
6610: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
6620: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6630: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6640: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6650: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6660: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6670: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6680: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6690: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
66a0: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
66b0: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
66c0: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
66d0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
66e0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
66f0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
6700: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
6710: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
6720: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6730: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6740: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6750: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6760: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6770: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6780: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6790: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
67a0: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
67b0: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
67c0: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
67d0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
67e0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
67f0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
6800: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
6810: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
6820: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6830: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6840: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6850: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6860: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6870: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6880: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6890: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
68a0: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
68b0: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
68c0: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
68d0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
68e0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
68f0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6900: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
6910: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
6920: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6930: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6940: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6950: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6960: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6970: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6980: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6990: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
69a0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
69b0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
69c0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
69d0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
69e0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
69f0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
6a00: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
6a10: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
6a20: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6a30: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6a40: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6a50: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6a60: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6a70: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6a80: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6a90: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6aa0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6ab0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6ac0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
6ad0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
6ae0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
6af0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
6b00: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
6b10: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
6b20: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6b30: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6b40: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6b50: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6b60: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6b70: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6b80: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6b90: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6ba0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6bb0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6bc0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6bd0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6be0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6bf0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6c00: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6c10: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6c20: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6c30: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6c40: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6c50: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6c60: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6c70: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6c80: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6c90: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6ca0: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6cb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6cc0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6cd0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6ce0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6cf0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6d00: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6d10: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6d20: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6d30: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6d40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d50: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6d60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d70: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6d80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6d90: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6da0: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6db0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6dc0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6dd0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6de0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6df0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6e00: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6e10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6e20: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6e30: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6e40: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6e50: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6e60: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6e70: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6e80: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6e90: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6ea0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6eb0: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6ec0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6ed0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6ee0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6ef0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6f00: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6f10: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6f20: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6f30: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6f40: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6f50: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6f60: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6f70: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6f80: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6f90: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6fa0: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6fb0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6fc0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6fd0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
6fe0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
6ff0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7000: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
7010: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
7020: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
7030: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
7040: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
7050: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
7060: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
7070: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
7080: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
7090: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
70a0: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
70b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70c0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
70d0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
70e0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
70f0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
7100: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
7110: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
7120: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7130: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7140: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7150: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7160: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7170: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7180: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
7190: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
71a0: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
71b0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
71c0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
71d0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
71e0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
71f0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
7200: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
7210: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7220: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
7230: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
7240: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
7250: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
7260: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
7270: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
7280: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
7290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
72a0: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
72b0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
72c0: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
72d0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
72e0: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
72f0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
7300: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
7310: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
7320: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
7330: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
7340: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
7350: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
7360: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
7370: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
7380: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
7390: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
73a0: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
73b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
73c0: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
73d0: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
73e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
73f0: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
7400: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
7410: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
7420: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7430: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
7440: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
7450: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
7460: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
7470: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7480: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7490: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
74a0: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
74b0: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
74c0: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
74d0: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
74e0: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
74f0: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
7500: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
7510: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
7520: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
7530: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
7540: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
7550: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
7560: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
7570: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7580: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7590: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
75a0: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
75b0: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
75c0: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
75d0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
75e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
75f0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
7600: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
7610: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
7620: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
7630: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7640: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7650: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
7660: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
7670: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7680: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7690: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
76a0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
76b0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
76c0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
76d0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
76e0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
76f0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
7700: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
7710: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
7720: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
7730: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
7740: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
7750: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
7760: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
7770: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7780: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7790: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
77a0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
77b0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
77c0: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
77d0: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
77e0: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
77f0: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
7800: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
7810: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
7820: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
7830: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
7840: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
7850: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
7860: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
7870: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7880: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7890: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
78a0: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
78b0: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
78c0: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
78d0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
78e0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
78f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
7900: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
7910: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
7920: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
7930: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
7940: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
7950: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
7960: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
7970: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7980: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7990: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
79a0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
79b0: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
79c0: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
79d0: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
79e0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
79f0: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
7a00: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
7a10: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
7a20: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
7a30: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7a40: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
7a50: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
7a60: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
7a70: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7a80: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7a90: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7aa0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7ab0: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7ac0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
7ad0: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
7ae0: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
7af0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
7b00: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
7b10: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
7b20: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
7b30: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
7b40: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
7b50: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
7b60: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
7b70: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7b80: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7b90: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7ba0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7bb0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7bc0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7bd0: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
7be0: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7bf0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7c00: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7c10: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7c20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7c30: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7c40: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
7c50: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
7c60: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7c70: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7c80: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7c90: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7ca0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7cb0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7cc0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7cd0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7ce0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7cf0: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
7d00: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
7d10: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7d20: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7d30: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7d40: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7d50: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7d60: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7d70: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7d80: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
7d90: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
7da0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
7db0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
7dc0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7dd0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
7de0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
7df0: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
7e00: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7e10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
7e20: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
7e30: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
7e40: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7e50: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
7e60: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
7e70: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
7e80: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
7e90: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
7ea0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
7eb0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
7ec0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
7ed0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
7ee0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
7ef0: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
7f00: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
7f10: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
7f20: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
7f30: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
7f40: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
7f50: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
7f60: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
7f70: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7f80: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
7f90: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
7fa0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
7fb0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
7fc0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
7fd0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
7fe0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
7ff0: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
8000: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
8010: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
8020: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ) */../*.** The 
8030: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
8040: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
8050: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
8060: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
8070: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
8080: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
8090: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
80a0: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
80b0: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
80c0: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
80d0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
80e0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
80f0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
8100: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
8110: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
8120: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
8130: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8140: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
8150: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
8160: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
8170: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8180: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
8190: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
81a0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
81b0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
81c0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
81d0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
81e0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
81f0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
8200: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
8210: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
8220: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
8230: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
8240: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
8250: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
8260: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
8270: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
8280: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
8290: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
82a0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
82b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
82c0: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
82d0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
82e0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
82f0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
8300: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
8310: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
8320: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8330: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
8340: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
8350: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
8360: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
8370: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8380: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
8390: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
83a0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
83b0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
83c0: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
83d0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
83e0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
83f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
8400: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
8410: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
8420: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
8430: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
8440: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
8450: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
8460: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
8470: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
8480: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
8490: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
84a0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
84b0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
84c0: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
84d0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
84e0: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
84f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8500: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
8510: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
8520: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
8530: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
8540: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
8550: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
8560: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
8570: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
8580: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
8590: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
85a0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
85b0: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
85c0: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
85d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
85e0: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
85f0: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
8600: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
8610: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8620: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
8630: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
8640: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
8650: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
8660: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
8670: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
8680: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
8690: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
86a0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
86b0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
86c0: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
86d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
86e0: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
86f0: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
8700: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
8710: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
8720: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
8730: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
8740: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
8750: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8760: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
8770: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
8780: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
8790: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
87a0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
87b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
87c0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
87d0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
87e0: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
87f0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
8800: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
8810: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
8820: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
8830: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
8840: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
8850: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
8860: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
8870: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
8880: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
8890: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
88a0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64  ions */.};..#ifd
88b0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
88c0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
88d0: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
88e0: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
88f0: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
8900: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
8910: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
8920: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
8930: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
8940: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
8950: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
8960: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
8970: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
8980: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
8990: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
89a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
89b0: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
89c0: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
89d0: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
89f0: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
8a00: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
8a10: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
8a20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8a30: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
8a40: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8a50: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
8a60: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
8a70: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
8a80: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
8a90: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
8aa0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8ab0: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
8ac0: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
8ad0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8ae0: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
8af0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
8b00: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
8b10: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
8b20: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
8b30: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
8b40: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
8b50: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
8b60: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
8b70: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
8b80: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
8b90: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
8ba0: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
8bb0: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
8bc0: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
8bd0: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
8be0: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
8bf0: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
8c00: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
8c10: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
8c20: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
8c30: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
8c40: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
8c50: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
8c60: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
8c70: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64  char*,u8*);.void
8c80: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
8c90: 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
8ca0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70  void sqlite3Cryp
8cb0: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
8cc0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
8cd0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65  e3_value**);..#e
8ce0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
8cf0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8d00: 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70  ON */../*.** typ
8d10: 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74  edef for the aut
8d20: 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62  horization callb
8d30: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  ack function..*/
8d40: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
8d50: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8d60: 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  ON.  typedef int
8d70: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
8d80: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8d90: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8da0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
8de0: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
8df0: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
8e00: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
8e10: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8e20: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8e30: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8e60: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
8e70: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  if.../*.** Each 
8e80: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8e90: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
8ea0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8eb0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
8ec0: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
8ed0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
8ee0: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
8ef0: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
8f00: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
8f10: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
8f20: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
8f30: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
8f40: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
8f50: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
8f60: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
8f70: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8f80: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
8f90: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
8fa0: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
8fb0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
8fc0: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
8fd0: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
9000: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9030: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
9040: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
9050: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9070: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
9080: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
9090: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
90a0: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
90b0: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
90c0: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
90d0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
90e0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
9110: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
9120: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
9130: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
9140: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
9150: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
9160: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
9170: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
9180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
9190: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
91a0: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
91b0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
91c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
91d0: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
91e0: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
91f0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
9200: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
9210: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9220: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
9230: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
9240: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
9250: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9270: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
9280: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
9290: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
92a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
92b0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
92c0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
92d0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
92f0: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
9300: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
9310: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
9320: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9340: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9350: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9360: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9370: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
9380: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
9390: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
93a0: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
93b0: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
93c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
93d0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
93e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
93f0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
9400: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
9410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9420: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9430: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9440: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9450: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9460: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9470: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
9480: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
9490: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
94a0: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
94b0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
94c0: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
94d0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
94e0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
94f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
9500: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
9510: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
9520: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
9530: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
9540: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9550: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
9560: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
9570: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
9580: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
9590: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
95a0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
95b0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
95c0: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
95d0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
95e0: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
95f0: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
9600: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
9610: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
9620: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
9630: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
9640: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
9650: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
9660: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
9670: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
9680: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
9690: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
96a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
96b0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
96c0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
96d0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96f0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
9700: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
9710: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
9720: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9740: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
9750: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
9760: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
9770: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
9780: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
9790: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
97a0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
97b0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
97c0: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
97d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
97e0: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
97f0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
9800: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
9810: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9820: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9830: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9840: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
9850: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
9860: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
9870: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9880: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9890: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
98a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
98b0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
98c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
98d0: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
98e0: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
98f0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9910: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
9920: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
9930: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
9940: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
9950: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
9960: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
9970: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
9980: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
9990: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
99a0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
99b0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
99c0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
99f0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
9a00: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
9a10: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
9a20: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
9a30: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
9a40: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
9a50: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
9a60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9a70: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9a80: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
9a90: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9aa0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ac0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
9ad0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
9ae0: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
9af0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
9b00: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
9b10: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9b20: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9b30: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9b50: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
9b60: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
9b70: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
9b80: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
9b90: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
9ba0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9bb0: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9bc0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
9bd0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
9be0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
9bf0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
9c00: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
9c10: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65  e_int64);.#ifnde
9c20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
9c30: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
9c40: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
9c50: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
9c60: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
9c70: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
9c80: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
9c90: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
9ca0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
9cb0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
9cc0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
9cd0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
9ce0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
9cf0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
9d00: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
9d10: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
9d20: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
9d30: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
9d40: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
9d50: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
9d60: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
9d70: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
9d80: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
9d90: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
9da0: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
9db0: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
9dc0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
9dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
9de0: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
9df0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
9e00: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
9e10: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
9e20: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
9e30: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9e40: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9e50: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
9e60: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
9e70: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
9e80: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
9e90: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9ea0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
9eb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
9ec0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
9ed0: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
9ee0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
9ef0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9f00: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9f10: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
9f20: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
9f30: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
9f40: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9f50: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
9f60: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
9f70: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9f80: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
9f90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
9fa0: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
9fb0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
9fc0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
9fd0: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
9fe0: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
9ff0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a000: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
a010: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a030: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
a040: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
a050: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a070: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
a080: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
a090: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
a0a0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
a0b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
a0c0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
a0d0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
a0e0: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
a0f0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
a100: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
a110: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
a120: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
a130: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
a140: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
a150: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
a160: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
a170: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
a180: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
a190: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
a1a0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
a1b0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
a1c0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
a1d0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a1f0: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
a200: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
a210: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
a220: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
a230: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
a240: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
a250: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
a260: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
a270: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
a280: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
a290: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
a2a0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
a2b0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
a2c0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
a2d0: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a2f0: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
a300: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
a310: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
a320: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
a330: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a340: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
a350: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
a360: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a380: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
a390: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a3a0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
a3b0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a3d0: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
a3e0: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
a3f0: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
a400: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
a410: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
a420: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
a430: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
a440: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
a450: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
a460: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
a470: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
a480: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
a490: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
a4a0: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
a4b0: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
a4c0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
a4d0: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
a4e0: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
a4f0: 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a  TIC_MASTER .  **
a500: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
a510: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
a520: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
a530: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
a540: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e   .  **.  ** When
a550: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
a560: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
a570: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
a580: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
a590: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
a5a0: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
a5b0: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
a5c0: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
a5d0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
a5e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
a5f0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
a600: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
a610: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
a620: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
a630: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
a640: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
a650: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
a660: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
a670: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
a680: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
a690: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
a6a0: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
a6b0: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
a6c0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
a6d0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
a6e0: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
a6f0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
a700: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a720: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a730: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
a740: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
a750: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
a760: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
a770: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
a780: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
a790: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
a7a0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
a7b0: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
a7c0: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
a7d0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
a7e0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a7f0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a800: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
a810: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
a820: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
a830: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
a840: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
a850: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
a860: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
a870: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
a880: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
a890: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
a8a0: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
a8b0: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
a8c0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
a8d0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
a8e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a8f0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
a900: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
a910: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
a920: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
a930: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a940: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
a950: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
a960: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
a970: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
a980: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a990: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
a9a0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
a9b0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
a9c0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
a9d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
a9e0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
a9f0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
aa00: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
aa10: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
aa20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
aa30: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
aa40: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
aa50: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
aa60: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
aa70: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
aa80: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
aa90: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
aaa0: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
aab0: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
aac0: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
aad0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
aae0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
aaf0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
ab00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ab10: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
ab20: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
ab30: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
ab40: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
ab80: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
ab90: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abc0: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
abd0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
abe0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
abf0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
ac00: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
ac10: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
ac20: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
ac30: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac60: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
ac70: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
ac80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ac90: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
aca0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
acb0: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
acc0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
acd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
ace0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
acf0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
ad00: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
ad10: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
ad20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
ad30: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
ad40: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
ad50: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
ad60: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
ad70: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
ad80: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
ad90: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
ada0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
adb0: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
adc0: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
add0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
ade0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
adf0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
ae00: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
ae10: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
ae20: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
ae30: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
ae40: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
ae50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
ae60: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
ae70: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
ae80: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
ae90: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
aea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aeb0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
aec0: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
aed0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
aee0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
aef0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
af00: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
af10: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
af20: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
af30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
af40: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
af50: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
af60: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
af70: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
af80: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
af90: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
afa0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
afb0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
afc0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
afd0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
afe0: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
aff0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
b000: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
b010: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b020: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
b030: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
b040: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
b050: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
b060: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b070: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
b080: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
b090: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
b0a0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b0b0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
b0c0: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
b0d0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
b0e0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
b0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
b100: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
b110: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
b120: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
b130: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b140: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
b150: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
b160: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
b170: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
b180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b190: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
b1a0: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
b1b0: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
b1c0: 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  Y PLAN */.../*.*
b1d0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
b1e0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
b1f0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
b200: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
b210: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
b220: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
b230: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
b240: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
b250: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
b260: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
b270: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
b280: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b290: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
b2a0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
b2b0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
b2c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b2d0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
b2e0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
b2f0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
b300: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
b310: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
b320: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
b330: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
b340: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b350: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
b360: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
b370: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
b380: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
b390: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
b3a0: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
b3b0: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
b3c0: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
b3d0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
b3e0: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
b3f0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
b400: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
b410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
b420: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
b430: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
b440: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
b450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
b460: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
b470: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
b480: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
b490: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
b4a0: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
b4b0: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
b4c0: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
b4d0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
b4e0: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
b4f0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
b500: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
b510: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
b520: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
b530: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
b540: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
b550: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
b560: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
b570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b580: 54 45 5f 53 74 61 74 33 20 20 20 20 20 20 20 20  TE_Stat3        
b590: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
b5a0: 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41  e the SQLITE_STA
b5b0: 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  T3 table */.#def
b5c0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
b5d0: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
b5e0: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
b5f0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
b600: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
b610: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
b620: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
b630: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
b640: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
b650: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b660: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
b670: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
b680: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
b690: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
b6a0: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
b6b0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
b6c0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
b6d0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
b6e0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
b6f0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
b700: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
b710: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
b720: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
b730: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b740: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
b750: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
b760: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
b770: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
b780: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
b790: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
b7a0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
b7b0: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
b7c0: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
b7d0: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
b7e0: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
b7f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
b800: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
b810: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
b820: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
b830: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
b840: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
b850: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
b860: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
b870: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
b880: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
b890: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
b8a0: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
b8b0: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
b8c0: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
b8d0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
b8e0: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
b8f0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
b900: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
b910: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b920: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
b930: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
b940: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
b950: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b960: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
b970: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
b980: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
b990: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
b9a0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
b9b0: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
b9c0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
b9d0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
b9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9f0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
ba00: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
ba10: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
ba20: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
ba30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba40: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
ba50: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
ba60: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
ba70: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
ba80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
ba90: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
baa0: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
bab0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
bac0: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
bad0: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
bae0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
baf0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
bb00: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
bb10: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
bb20: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
bb30: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
bb40: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
bb50: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
bb60: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
bb70: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
bb80: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
bb90: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
bba0: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
bbb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bbc0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
bbd0: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
bbe0: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
bbf0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
bc00: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
bc10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
bc20: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
bc30: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
bc40: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
bc50: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
bc60: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
bc70: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
bc80: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
bc90: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
bca0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
bcb0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
bcc0: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
bcd0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
bce0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
bcf0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
bd00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
bd10: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
bd20: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
bd30: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
bd40: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd60: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
bd70: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
bd80: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
bd90: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
bda0: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
bdb0: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
bdc0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
bdd0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
bde0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
bdf0: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
be00: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
be10: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
be20: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
be30: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
be40: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
be50: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
be60: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
be70: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
be80: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
be90: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
bea0: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
beb0: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
bec0: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
bed0: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
bee0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
bef0: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
bf00: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
bf10: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
bf20: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
bf30: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
bf40: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
bf50: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
bf60: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
bf70: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
bf80: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
bf90: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
bfa0: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
bfb0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
bfc0: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
bfd0: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
bfe0: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
bff0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
c000: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
c010: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
c020: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
c030: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
c040: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
c050: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
c060: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
c070: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
c080: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
c090: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
c0a0: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
c0b0: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
c0c0: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
c0d0: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
c0e0: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
c0f0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
c100: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
c110: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
c120: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
c130: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
c140: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
c150: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
c160: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
c170: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
c180: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
c190: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
c1a0: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
c1b0: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
c1c0: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
c1d0: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
c1e0: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
c1f0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
c200: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
c210: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
c220: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
c230: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
c240: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
c250: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
c260: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c270: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
c280: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
c290: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
c2a0: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
c2b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c2c0: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
c2d0: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
c2e0: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
c2f0: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
c300: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c310: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38  C_CASE     0x008
c320: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
c330: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
c340: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c350: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
c360: 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45  EM    0x010 /* E
c370: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
c380: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
c390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c3a0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32  NC_NEEDCOLL 0x02
c3b0: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
c3c0: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
c3d0: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
c3e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c3f0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
c400: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
c410: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
c420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c430: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
c440: 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d   0x080 /* Built-
c450: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
c460: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c470: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
c480: 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75  T    0x100 /* Bu
c490: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
c4a0: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
c4b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c4c0: 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20  _COALESCE 0x200 
c4d0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
c4e0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
c4f0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
c500: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
c510: 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c  LY 0x400 /* Buil
c520: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
c530: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c540: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c550: 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f  CONSTANT 0x800 /
c560: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
c570: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
c580: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  t output */.#def
c590: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c5a0: 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f  MINMAX  0x1000 /
c5b0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
c5c0: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
c5d0: 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  gates */../*.** 
c5e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
c5f0: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
c600: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
c610: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
c620: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
c630: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
c640: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
c650: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
c660: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
c670: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c680: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c690: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
c6a0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
c6b0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
c6c0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
c6d0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
c6e0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
c6f0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
c700: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
c710: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
c720: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
c730: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
c740: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
c750: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
c760: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
c770: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
c780: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
c790: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
c7a0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
c7b0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
c7c0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
c7d0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
c7e0: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
c7f0: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
c800: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c810: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c820: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
c830: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
c840: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
c850: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
c860: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
c870: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
c880: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
c890: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
c8a0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
c8b0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
c8c0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c8d0: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
c8e0: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
c8f0: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
c900: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
c910: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
c920: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
c930: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
c940: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
c950: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
c960: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
c970: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
c980: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
c990: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
c9a0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
c9b0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c9c0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c9d0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c9e0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c9f0: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
ca00: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
ca10: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
ca20: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
ca30: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
ca40: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
ca50: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
ca60: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
ca70: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
ca80: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
ca90: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
caa0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
cab0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
cac0: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
cad0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
cae0: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
caf0: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
cb00: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
cb10: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
cb20: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
cb30: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
cb40: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cb50: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
cb60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
cb70: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cb80: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cb90: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
cba0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
cbb0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
cbc0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cbd0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cbe0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
cbf0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cc00: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
cc10: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
cc20: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
cc30: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
cc40: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
cc50: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
cc60: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
cc70: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
cc80: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
cc90: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cca0: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
ccb0: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
ccc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
ccd0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
cce0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
ccf0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
cd00: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
cd10: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
cd20: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
cd30: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cd40: 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46  0}.#define STR_F
cd50: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
cd60: 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
cd70: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
cd80: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
cd90: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
cda0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
cdb0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
cdc0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
cdd0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
cde0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
cdf0: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
ce00: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
ce10: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ce20: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ce30: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
ce40: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
ce50: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
ce60: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ce70: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
ce80: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
ce90: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
cea0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
ceb0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
cec0: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
ced0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
cee0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
cef0: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
cf00: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
cf10: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65  ,#zName,0,0}.#de
cf20: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
cf30: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
cf40: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
cf50: 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
cf60: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
cf70: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
cf80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
cf90: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
cfa0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
cfb0: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
cfc0: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
cfd0: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
cfe0: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
cff0: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
d000: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
d010: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
d020: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
d030: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
d040: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
d050: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
d060: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
d070: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
d080: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
d090: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
d0a0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
d0b0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
d0c0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
d0d0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
d0e0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
d110: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
d120: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
d130: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
d140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d150: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
d160: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
d170: 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
d180: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d1a0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
d1b0: 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
d1c0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
d1d0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d1e0: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
d1f0: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
d200: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
d210: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
d220: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
d230: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
d240: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
d250: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
d260: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
d270: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
d280: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
d290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
d2a0: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
d2b0: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
d2c0: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
d2d0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
d2e0: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
d2f0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
d300: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
d310: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
d320: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
d330: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
d340: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
d350: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
d360: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
d370: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
d380: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
d390: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
d3a0: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
d3b0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
d3c0: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
d3d0: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
d3e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
d3f0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d400: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
d410: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
d420: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
d430: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
d460: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
d470: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
d480: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
d490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d4a0: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
d4b0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
d4c0: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
d4d0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
d4e0: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
d4f0: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
d500: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
d510: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
d520: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
d530: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
d540: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
d550: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
d560: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
d570: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
d580: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
d590: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
d5a0: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
d5b0: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
d5c0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
d5d0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
d5e0: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
d5f0: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
d600: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
d610: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
d620: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d630: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
d640: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
d650: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
d660: 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
d670: 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
d680: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
d690: 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
d6a0: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
d6b0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
d6c0: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
d6d0: 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
d6e0: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
d6f0: 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f   size of this co
d700: 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f  lumn.  INT==1 */
d710: 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
d720: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
d730: 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
d740: 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
d750: 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
d760: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
d770: 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
d780: 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
d790: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
d7a0: 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
d7b0: 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
d7c0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
d7d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
d7e0: 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
d7f0: 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
d800: 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
d810: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
d820: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
d830: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
d840: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
d850: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
d860: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
d870: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
d880: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
d890: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
d8a0: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
d8b0: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
d8c0: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
d8d0: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
d8e0: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
d8f0: 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
d900: 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
d910: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
d920: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
d930: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
d940: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
d950: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
d960: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
d970: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
d980: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
d990: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
d9a0: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
d9b0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d9c0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d9d0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
d9e0: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
d9f0: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da10: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
da20: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
da30: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
da40: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
da50: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
da60: 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
da70: 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
da80: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
da90: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
daa0: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
dab0: 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
dac0: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
dad0: 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
dae0: 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
daf0: 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
db00: 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
db10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
db20: 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
db30: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
db40: 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
db50: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
db60: 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
db70: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
db80: 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  der */../*.** Co
db90: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
dba0: 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
dbb0: 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
dbc0: 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
dbd0: 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
dbe0: 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
dbf0: 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
dc00: 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
dc10: 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
dc20: 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
dc30: 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
dc40: 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
dc50: 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
dc60: 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
dc70: 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74  ely.  .**.** But
dc80: 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
dc90: 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
dca0: 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
dcb0: 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
dcc0: 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
dcd0: 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
dce0: 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
dcf0: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
dd00: 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
dd10: 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
dd20: 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
dd30: 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
dd40: 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
dd50: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
dd60: 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
dd70: 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
dd80: 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
dd90: 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
dda0: 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
ddb0: 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45 20  .  And the NONE 
ddc0: 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
ddd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dde0: 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 41  _AFF_NONE     'A
ddf0: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de00: 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42  _AFF_TEXT     'B
de10: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de20: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43  _AFF_NUMERIC  'C
de30: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de40: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44  _AFF_INTEGER  'D
de50: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
de60: 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45  _AFF_REAL     'E
de70: 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
de80: 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
de90: 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
dea0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
deb0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
dec0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
ded0: 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
dee0: 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
def0: 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
df00: 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a  nity value. .*/.
df10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
df20: 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
df30: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
df40: 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
df50: 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
df60: 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
df70: 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
df80: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
df90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
dfa0: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
dfb0: 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
dfc0: 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
dfd0: 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
dfe0: 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
dff0: 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
e000: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
e010: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
e020: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
e030: 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
e040: 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
e050: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
e060: 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
e070: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
e080: 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
e090: 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
e0a0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e0b0: 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
e0c0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
e0d0: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
e0e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
e0f0: 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
e100: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
e110: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
e120: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
e130: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
e140: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
e150: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
e160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e170: 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
e180: 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
e190: 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
e1a0: 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
e1b0: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
e1c0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
e1d0: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
e1e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
e1f0: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
e200: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
e210: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
e220: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
e230: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
e240: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
e250: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
e260: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
e270: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
e280: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
e290: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
e2a0: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
e2b0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
e2c0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
e2d0: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
e2e0: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
e2f0: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
e300: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
e310: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
e320: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
e330: 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69  tual table .** i
e340: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
e350: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
e360: 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
e370: 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a  shared between .
e380: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
e390: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
e3a0: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
e3b0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
e3c0: 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61  abase .** schema
e3d0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
e3e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
e3f0: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
e400: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
e410: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
e420: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
e430: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
e440: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
e450: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
e460: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
e470: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
e480: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e490: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
e4a0: 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
e4b0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
e4c0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
e4d0: 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
e4e0: 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68   tables .** with
e4f0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
e500: 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
e510: 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
e520: 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20  the callers .** 
e530: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
e540: 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
e550: 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
e560: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
e570: 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  e .** connection
e580: 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
e590: 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
e5a0: 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
e5b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
e5c0: 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
e5d0: 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
e5e0: 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
e5f0: 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
e600: 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
e610: 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
e620: 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
e630: 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
e640: 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
e650: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
e660: 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
e670: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
e680: 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
e690: 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
e6a0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
e6b0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
e6c0: 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
e6d0: 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
e6e0: 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
e6f0: 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
e700: 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
e710: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
e720: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
e730: 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
e740: 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
e750: 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
e760: 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
e770: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
e780: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
e790: 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
e7a0: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
e7b0: 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
e7c0: 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
e7d0: 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
e7e0: 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
e7f0: 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
e800: 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
e810: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
e820: 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64   not .** deleted
e830: 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
e840: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
e850: 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
e860: 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64  ct()ed .** immed
e870: 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
e880: 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
e890: 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
e8a0: 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
e8b0: 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
e8c0: 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
e8d0: 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
e8e0: 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
e8f0: 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
e900: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
e910: 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
e920: 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
e930: 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a  xDisconnected .*
e940: 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
e950: 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
e960: 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
e970: 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
e980: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
e990: 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
e9a0: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
e9b0: 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
e9c0: 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
e9d0: 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
e9e0: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
e9f0: 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
ea00: 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
ea10: 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
ea20: 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
ea30: 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
ea40: 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
ea50: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
ea60: 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
ea70: 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
ea80: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
ea90: 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
eaa0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
eab0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
eac0: 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
ead0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a  allocated by .**
eae0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
eaf0: 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f  (), using the co
eb00: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
eb10: 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65  stored in VTable
eb20: 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66  .db as .** the f
eb30: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
eb40: 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
eb50: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
eb70: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
eb80: 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
eb90: 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
eba0: 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
ebb0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
ebc0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
ebd0: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
ebe0: 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
ebf0: 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
ec00: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ec10: 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
ec20: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ec40: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
ec50: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
ec60: 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
ec70: 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
ec80: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
ec90: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
eca0: 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
ecb0: 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
ecc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
ecd0: 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
ece0: 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
ecf0: 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
ed00: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
ed10: 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
ed20: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
ed30: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
ed40: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
ed50: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
ed60: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
ed70: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
ed80: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
ed90: 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69  ** Table.zName i
eda0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
edb0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61  e table.  The ca
edc0: 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  se of the origin
edd0: 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42  al.** CREATE TAB
ede0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
edf0: 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65  stored, but case
ee00: 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63   is not signific
ee10: 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61  ant for.** compa
ee20: 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61  risons..**.** Ta
ee30: 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20  ble.nCol is the 
ee40: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
ee50: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s in this table.
ee60: 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20    Table.aCol is 
ee70: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
ee80: 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75  an array of Colu
ee90: 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f  mn structures, o
eea0: 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
eeb0: 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  mn..**.** If the
eec0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e   table has an IN
eed0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
eee0: 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50  Y, then Table.iP
eef0: 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78  Key is the index
ef00: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d   of.** the colum
ef10: 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b  n that is that k
ef20: 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20  ey.   Otherwise 
ef30: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e  Table.iPKey is n
ef40: 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a  egative.  Note.*
ef50: 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74  * that the datat
ef60: 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41  ype of the PRIMA
ef70: 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49  RY KEY must be I
ef80: 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20  NTEGER for this 
ef90: 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73  field to.** be s
efa0: 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20  et.  An INTEGER 
efb0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75  PRIMARY KEY is u
efc0: 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64  sed as the rowid
efd0: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
efe0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20  .** the table.  
eff0: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e  If a table has n
f000: 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  o INTEGER PRIMAR
f010: 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61  Y KEY, then a ra
f020: 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73  ndom rowid.** is
f030: 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65   generated for e
f040: 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
f050: 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69  able.  TF_HasPri
f060: 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69  maryKey is set i
f070: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68  f.** the table h
f080: 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b  as any PRIMARY K
f090: 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f  EY, INTEGER or o
f0a0: 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20  therwise..**.** 
f0b0: 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68  Table.tnum is th
f0c0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  e page number fo
f0d0: 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65  r the root BTree
f0e0: 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62   page of the tab
f0f0: 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74  le in the.** dat
f100: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20  abase file.  If 
f110: 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65  Table.iDb is the
f120: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
f130: 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63  tabase table bac
f140: 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74  kend.** in sqlit
f150: 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66  e.aDb[].  0 is f
f160: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
f170: 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f  base and 1 is fo
f180: 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a  r the file that.
f190: 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61  ** holds tempora
f1a0: 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ry tables and in
f1b0: 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70  dices.  If TF_Ep
f1c0: 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a  hemeral is set.*
f1d0: 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  * then the table
f1e0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
f1f0: 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74  file that is aut
f200: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
f210: 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56  ed.** when the V
f220: 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68  DBE cursor to th
f230: 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  e table is close
f240: 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
f250: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20   Table.tnum .** 
f260: 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73  refers VDBE curs
f270: 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68  or number that h
f280: 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f  olds the table o
f290: 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20  pen, not to the 
f2a0: 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d  root.** page num
f2b0: 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20  ber.  Transient 
f2c0: 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20  tables are used 
f2d0: 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75  to hold the resu
f2e0: 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d  lts of a.** sub-
f2f0: 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61  query that appea
f300: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  rs instead of a 
f310: 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20  real table name 
f320: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
f330: 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45  se .** of a SELE
f340: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
f350: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
f360: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
f370: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f380: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
f390: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
f3a0: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
f3b0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
f3c0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
f3d0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
f3e0: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
f3f0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
f400: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
f410: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
f420: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
f430: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
f440: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
f450: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
f460: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
f470: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
f480: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
f490: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
f4a0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
f4b0: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
f4c0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f4d0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f4e0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f4f0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
f500: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
f510: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
f520: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
f530: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
f540: 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73  /.#endif.  LogEs
f550: 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
f560: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
f570: 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
f580: 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
f590: 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  able */.  int tn
f5a0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
f5b0: 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64  * Root BTree nod
f5c0: 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
f5d0: 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65   (see note above
f5e0: 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  ) */.  i16 iPKey
f5f0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
f600: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
f610: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
f620: 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  as the primary k
f630: 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  ey */.  i16 nCol
f640: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f650: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f660: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
f670: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
f680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f690: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
f6a0: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
f6b0: 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
f6c0: 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
f6d0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
f6e0: 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
f6f0: 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
f700: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
f710: 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
f720: 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
f730: 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
f740: 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
f750: 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
f760: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
f770: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
f780: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
f790: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
f7a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
f7b0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
f7c0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
f7d0: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
f7e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f7f0: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
f800: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
f810: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
f820: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
f830: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
f840: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
f850: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
f860: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
f870: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
f880: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
f890: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
f8a0: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
f8b0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
f8c0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
f8d0: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
f8e0: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
f8f0: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
f900: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
f910: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
f920: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
f930: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
f940: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
f950: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
f960: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
f970: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
f980: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
f990: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
f9a0: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
f9b0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
f9c0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
f9d0: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
f9e0: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
f9f0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
fa00: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fa10: 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
fa20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
fa30: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
fa40: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
fa50: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
fa60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
fa70: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
fa80: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
fa90: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
faa0: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
fab0: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
fac0: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
fad0: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
fae0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
faf0: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
fb00: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
fb10: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
fb20: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
fb30: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
fb40: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
fb50: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
fb60: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
fb70: 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
fb80: 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
fb90: 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20   No rowid used. 
fba0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
fbb0: 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  he key */.../*.*
fbc0: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
fbd0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
fbe0: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
fbf0: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
fc00: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
fc10: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
fc20: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
fc30: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
fc40: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
fc50: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
fc60: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
fc70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
fc80: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fc90: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
fca0: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
fcb0: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
fcc0: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
fcd0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
fce0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
fcf0: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
fd00: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
fd10: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
fd20: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
fd30: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
fd40: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
fd50: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  X) 0.#endif../* 
fd60: 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
fd70: 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
fd80: 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
fd90: 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
fda0: 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
fdb0: 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  outRowid)==0)../
fdc0: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
fdd0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
fde0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
fdf0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
fe00: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
fe10: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
fe20: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
fe30: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
fe40: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
fe50: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
fe60: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
fe70: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
fe80: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
fe90: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
fea0: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
feb0: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
fec0: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
fed0: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
fee0: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
fef0: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
ff00: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
ff10: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
ff20: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
ff30: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
ff40: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
ff50: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
ff60: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
ff70: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
ff80: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
ff90: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
ffa0: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
ffb0: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
ffc0: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
ffd0: 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
ffe0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
fff0: 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
10000 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
10010 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
10020 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
10030 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
10040 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
10050 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10060 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10070 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
10080 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
10090 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
100a0 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
100b0 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
100c0 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
100d0 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
100e0 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
100f0 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
10100 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
10110 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
10120 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
10130 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
10140 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
10150 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
10160 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
10170 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
10180 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
10190 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
101a0 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
101b0 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
101c0 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
101d0 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
101e0 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
101f0 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
10200 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
10210 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10220 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
10230 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10240 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
10250 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
10260 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
10270 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
10280 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
10290 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
102a0 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
102b0 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
102c0 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
102d0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
102e0 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
102f0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
10300 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
10310 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
10320 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
10330 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
10340 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
10350 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
10360 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10370 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
10380 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
10390 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
103a0 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
103b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
103c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
103d0 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
103e0 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
103f0 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
10400 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
10410 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
10420 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
10430 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
10440 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
10450 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
10460 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
10470 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
10480 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
10490 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
104a0 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
104b0 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
104c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
104d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
104e0 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
104f0 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
10500 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
10510 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10520 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
10530 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
10540 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
10550 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
10560 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
10570 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
10580 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
10590 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
105a0 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
105b0 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
105c0 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
105d0 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
105e0 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
105f0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
10600 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
10610 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
10620 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
10630 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
10640 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
10650 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
10660 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
10670 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
10680 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
10690 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
106a0 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
106b0 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
106c0 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
106d0 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
106e0 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
106f0 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
10700 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
10710 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
10720 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10730 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
10740 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
10750 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
10760 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
10770 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
10780 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
10790 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
107a0 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
107b0 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
107c0 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
107d0 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
107e0 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
107f0 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
10800 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
10810 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
10820 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
10830 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
10840 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
10850 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
10860 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
10870 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
10880 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
10890 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
108a0 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
108b0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
108c0 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
108d0 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
108e0 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
108f0 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
10900 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10910 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10920 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
10930 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
10940 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
10950 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
10960 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
10970 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
10980 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
10990 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
109a0 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
109b0 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
109c0 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
109d0 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
109e0 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
109f0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
10a00 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
10a10 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
10a20 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
10a30 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
10a40 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
10a50 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
10a60 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
10a70 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
10a80 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
10a90 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
10aa0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10ab0 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
10ac0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
10ad0 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
10ae0 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
10af0 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
10b00 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
10b10 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
10b20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
10b30 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
10b40 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
10b50 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
10b60 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
10b70 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
10b80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
10b90 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
10ba0 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
10bb0 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
10bc0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
10bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
10be0 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
10bf0 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
10c00 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
10c10 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
10c20 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
10c30 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
10c40 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
10c50 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
10c60 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
10c70 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
10c80 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
10c90 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
10ca0 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
10cb0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
10cc0 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
10cd0 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
10ce0 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
10cf0 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
10d00 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
10d10 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
10d20 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
10d30 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
10d40 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
10d50 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
10d60 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
10d70 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
10d80 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
10d90 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
10da0 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
10db0 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
10dc0 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
10dd0 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
10de0 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
10df0 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
10e00 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
10e10 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
10e20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10e30 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
10e40 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
10e50 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
10e60 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
10e70 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
10e80 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
10e90 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
10ea0 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
10eb0 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
10ec0 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
10ed0 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
10ee0 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
10ef0 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
10f00 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
10f10 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
10f20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
10f30 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
10f40 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
10f50 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
10f60 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
10f70 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
10f80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10f90 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
10fa0 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
10fb0 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10fd0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
10fe0 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
10ff0 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
11000 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11010 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11020 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
11030 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
11040 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20   u16 nXField;   
11050 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11060 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64  f columns beyond
11070 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73   the key columns
11080 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
11090 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
110a0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
110b0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
110c0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
110d0 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
110e0 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
110f0 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
11100 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
11110 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
11120 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
11130 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
11140 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11150 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11160 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
11170 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11180 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
11190 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
111a0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
111b0 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
111c0 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
111d0 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
111e0 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
111f0 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
11200 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
11210 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
11220 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
11230 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
11240 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
11250 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
11260 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
11270 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
11280 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
11290 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
112a0 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
112b0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
112c0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
112d0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
112e0 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
112f0 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
11300 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
11310 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
11320 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
11330 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
11340 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
11350 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
11360 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  s..**.** The r1 
11370 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61  and r2 member va
11380 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
11390 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74   used by the opt
113a0 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f  imized compariso
113b0 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76  n.** functions v
113c0 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
113d0 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65  Int() and vdbeRe
113e0 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e  cordCompareStrin
113f0 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  g()..*/.struct U
11400 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
11410 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11420 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
11430 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
11440 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
11450 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
11460 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11470 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
11480 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
11490 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
114a0 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
114b0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
114c0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
114d0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
114e0 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
114f0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
11500 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
11510 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20  NOMEM) */.  Mem 
11520 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
11530 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69  /* Values */.  i
11540 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  nt r1;          
11550 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
11560 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
11570 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32  rhs) */.  int r2
11580 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11590 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
115a0 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
115b0 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
115c0 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
115d0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
115e0 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
115f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11600 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11610 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
11620 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
11630 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
11640 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
11650 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
11660 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
11670 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
11680 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
11690 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
116a0 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
116b0 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
116c0 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
116d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
116e0 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
116f0 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
11700 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
11710 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
11720 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
11730 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
11740 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
11750 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
11760 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
11770 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
11780 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
11790 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
117a0 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
117b0 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
117c0 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
117d0 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
117e0 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
117f0 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
11800 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
11810 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
11820 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
11830 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
11840 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
11850 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
11860 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
11870 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
11880 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
11890 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
118a0 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
118b0 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
118c0 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
118d0 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
118e0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
118f0 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
11900 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
11910 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
11920 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
11930 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
11940 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
11950 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
11960 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
11970 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
11980 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
11990 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
119a0 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
119b0 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
119c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
119d0 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
119e0 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
119f0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
11a00 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
11a10 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
11a20 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
11a30 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
11a40 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
11a50 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  element..*/.stru
11a60 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
11a70 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11a80 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11a90 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
11aa0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
11ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11ac0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
11ad0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
11ae0 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
11af0 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
11b00 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
11b10 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
11b20 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
11b30 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
11b40 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
11b50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11b60 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
11b70 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
11b80 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
11b90 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
11ba0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
11bb0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
11bc0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11bd0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
11be0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
11bf0 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
11c00 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
11c10 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
11c20 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
11c30 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
11c40 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
11c50 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
11c60 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
11c70 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
11c80 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
11c90 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
11ca0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  .  char **azColl
11cb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
11cc0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
11cd0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
11ce0 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
11cf0 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
11d00 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
11d10 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
11d20 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
11d30 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11d40 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20  nfo;       /* A 
11d50 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73  KeyInfo object s
11d60 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  uitable for this
11d70 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
11d80 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
11d90 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
11da0 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
11db0 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
11dc0 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
11dd0 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
11de0 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
11df0 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
11e00 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
11e10 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
11e20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11e30 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
11e40 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
11e50 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11e60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11e70 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
11e80 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
11e90 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
11ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
11eb0 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
11ec0 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
11ed0 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
11ee0 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
11ef0 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
11f00 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
11f10 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
11f20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
11f30 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
11f40 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
11f50 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
11f60 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
11f70 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
11f80 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
11f90 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
11fa0 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
11fb0 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
11fc0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
11fd0 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
11fe0 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
11ff0 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
12000 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
12010 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
12020 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
12030 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
12040 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23  ering index */.#
12050 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12060 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12070 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12090 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
120a0 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
120b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
120c0 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
120d0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
120e0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
120f0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12100 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12110 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12120 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12130 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12140 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12150 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12160 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12170 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12180 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
12190 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
121a0 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
121b0 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
121c0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
121d0 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
121e0 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
121f0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
12200 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12210 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
12220 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
12230 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
12240 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
12250 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
12260 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
12270 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
12280 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
12290 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
122a0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
122b0 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
122c0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
122d0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
122e0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
122f0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
12300 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12310 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
12320 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
12330 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
12340 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12350 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
12360 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
12370 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
12380 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
12390 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
123a0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
123b0 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
123c0 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
123d0 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
123e0 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
123f0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
12400 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
12410 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
12420 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
12430 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
12440 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
12450 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
12460 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
12470 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
12480 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
12490 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
124a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
124b0 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
124c0 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
124d0 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
124e0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
124f0 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
12500 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
12510 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
12520 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
12530 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
12540 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
12550 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
12560 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
12570 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
12580 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
12590 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
125a0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
125b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
125c0 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
125d0 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
125e0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
125f0 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
12600 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
12610 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
12620 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
12630 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
12640 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
12650 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
12660 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
12670 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
12680 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
12690 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
126a0 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
126b0 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
126c0 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
126d0 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
126e0 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
126f0 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
12700 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
12710 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
12720 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
12730 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
12740 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
12750 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12760 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
12770 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
12780 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
12790 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
127a0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
127b0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
127c0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
127d0 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
127e0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
127f0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12800 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
12810 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
12820 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
12830 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
12840 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
12850 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
12860 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
12870 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
12880 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
12890 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
128a0 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
128b0 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
128c0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
128d0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
128e0 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
128f0 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
12900 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
12910 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
12920 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
12930 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
12940 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
12950 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
12960 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
12970 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
12980 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
12990 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
129a0 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
129b0 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
129c0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
129d0 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
129e0 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
129f0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
12a00 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
12a10 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
12a20 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
12a50 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
12a60 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
12a70 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
12a80 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
12a90 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
12aa0 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
12ab0 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
12ac0 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
12ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ae0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
12af0 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
12b00 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
12b10 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
12b20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
12b30 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
12b40 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
12b50 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
12b60 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
12b70 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
12b80 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
12b90 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
12ba0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12bb0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
12bc0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
12bd0 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
12be0 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
12bf0 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
12c00 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
12c10 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
12c20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
12c30 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
12c40 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
12c50 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
12c60 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
12c70 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
12c80 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
12c90 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
12ca0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
12cb0 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
12cc0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
12cd0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
12ce0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
12cf0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
12d00 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
12d10 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
12d20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
12d30 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
12d40 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
12d50 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
12d60 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
12d70 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
12d80 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
12d90 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
12da0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
12db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
12dc0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
12dd0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
12de0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
12df0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12e00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
12e10 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
12e20 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
12e30 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
12e40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12e50 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
12e60 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
12e70 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
12e80 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
12e90 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
12ea0 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
12eb0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
12ee0 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
12ef0 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
12f00 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
12f30 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
12f40 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
12f50 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
12f60 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
12f70 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
12f80 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
12f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
12fa0 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
12fb0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
12fc0 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
12fd0 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
12fe0 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
12ff0 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
13000 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
13010 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
13020 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
13030 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
13040 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
13050 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
13060 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
13070 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
13080 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
13090 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
130a0 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
130b0 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
130c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
130d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
130e0 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
130f0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
13100 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
13110 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
13120 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
13130 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
13140 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
13150 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
13160 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
13170 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
13180 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
13190 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
131a0 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
131b0 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
131c0 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
131d0 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
131e0 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
131f0 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
13200 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
13210 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
13220 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
13230 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
13240 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
13250 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
13260 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
13270 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
13280 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
13290 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
132a0 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
132b0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
132c0 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
132d0 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
132e0 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
132f0 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
13300 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
13310 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
13320 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
13330 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
13340 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
13350 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
13360 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
13370 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
13380 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
13390 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
133a0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
133b0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
133c0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
133d0 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
133e0 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
133f0 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
13400 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
13410 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
13420 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
13430 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
13440 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
13450 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
13460 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
13470 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
13480 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
13490 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
134a0 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
134b0 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
134c0 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
134d0 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
134e0 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
134f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
13500 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
13510 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
13520 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
13530 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f  , TK_BLOB, .** o
13540 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
13550 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13560 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
13570 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
13580 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
13590 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
135a0 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
135b0 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
135c0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
135d0 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  he .** variable 
135e0 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
135f0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13600 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
13610 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
13620 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
13630 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
13640 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
13650 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
13660 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
13670 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
13680 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
13690 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
136a0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
136b0 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
136c0 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
136d0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
136e0 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
136f0 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
13700 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13710 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
13720 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
13730 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
13740 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
13750 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
13760 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
13770 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
13780 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
13790 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
137a0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
137b0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
137c0 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
137d0 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
137e0 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
137f0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
13800 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
13810 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
13820 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
13830 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
13840 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
13850 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20  .x.pList is .** 
13860 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
13870 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
13880 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
13890 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
138a0 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
138b0 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
138c0 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
138d0 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
138e0 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
138f0 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
13900 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
13910 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
13920 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
13930 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
13940 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
13950 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
13960 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
13970 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
13980 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
13990 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
139a0 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
139b0 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
139c0 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
139d0 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
139e0 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
139f0 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
13a00 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
13a10 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
13a20 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
13a30 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
13a40 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
13a50 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
13a60 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
13a70 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
13a80 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
13a90 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74  mark .** charact
13aa0 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
13ab0 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
13ac0 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
13ad0 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
13ae0 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20   .** number for 
13af0 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
13b00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
13b10 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
13b20 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
13b30 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
13b40 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
13b50 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
13b60 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
13b70 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
13b80 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
13b90 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
13ba0 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
13bb0 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
13bc0 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
13bd0 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
13be0 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
13bf0 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
13c00 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
13c10 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
13c20 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
13c30 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
13c40 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
13c50 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
13c60 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
13c70 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
13c80 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
13c90 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
13ca0 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
13cb0 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
13cc0 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
13cd0 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
13ce0 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
13cf0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
13d00 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
13d10 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
13d20 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
13d30 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
13d40 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
13d50 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
13d60 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
13d70 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
13d80 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
13d90 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
13da0 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
13db0 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
13dc0 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
13dd0 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
13de0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
13df0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
13e00 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
13e10 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
13e20 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
13e30 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
13e40 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
13e50 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
13e60 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
13e70 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
13e80 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
13e90 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
13ea0 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
13eb0 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
13ec0 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
13ed0 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
13ee0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
13ef0 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
13f00 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
13f10 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
13f20 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
13f30 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
13f40 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
13f50 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
13f60 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13f70 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
13f80 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
13f90 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
13fa0 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
13fb0 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
13fc0 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
13fd0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
13fe0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
13ff0 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
14000 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
14010 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
14020 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
14030 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
14040 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
14050 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
14060 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
14070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
14080 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
14090 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
140a0 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
140b0 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
140c0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
140d0 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
140e0 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
140f0 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
14100 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
14110 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
14120 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
14130 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
14140 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
14150 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14160 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
14170 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
14180 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
14190 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
141a0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
141b0 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
141c0 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
141d0 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
141e0 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
141f0 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
14200 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
14210 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
14220 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
14230 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
14240 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
14250 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a  alfunction. .  *
14260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
142a0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
142b0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
142c0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
142d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
142e0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
142f0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
14300 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
14310 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
14320 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
14330 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
14340 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
14350 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
14360 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
14370 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
14380 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
14390 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
143a0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
143b0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
143c0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
143d0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
143e0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
143f0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
14400 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
14410 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
14420 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
14430 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
14440 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
14450 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
14460 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
14470 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
14480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
144b0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
144c0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
144d0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
144e0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
144f0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
14500 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
14510 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
14520 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
14530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
14540 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
14550 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
14560 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
14590 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
145a0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
145d0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
145e0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
145f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
14600 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30  P_Unlikely:  100
14610 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  0 times likeliho
14620 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  od */.  ynVar iC
14630 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
14640 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
14650 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
14660 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
14690 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
146a0 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
146b0 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146d0 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
146e0 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
146f0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
14700 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
14710 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
14720 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
14730 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
14740 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
14750 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
14760 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
14770 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
14780 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
147b0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
147c0 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
147d0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
147f0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
14800 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
14810 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
14820 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
14830 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
14840 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
14850 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
14860 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
14870 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
14880 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
14890 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
148a0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
148b0 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
148c0 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
148d0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
148e0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
148f0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30  EP_FromJoin  0x0
14900 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
14910 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49  ted in ON or USI
14920 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
14930 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
14940 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
14950 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
14960 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
14970 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
14980 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
14990 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30  esolved  0x00000
149a0 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65  4 /* IDs have be
149b0 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
149c0 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
149d0 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30  e EP_Error     0
149e0 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65  x000008 /* Expre
149f0 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
14a00 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
14a10 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
14a20 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
14a30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
14a40 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
14a50 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
14a60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
14a70 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
14a80 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
14a90 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
14aa0 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
14ab0 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
14ac0 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
14ad0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
14ae0 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
14af0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
14b00 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
14b10 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
14b20 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
14b30 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
14b40 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
14b50 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
14b60 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
14b70 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
14b80 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
14b90 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
14ba0 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
14bb0 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
14bc0 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
14bd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
14be0 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
14bf0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
14c00 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
14c10 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
14c20 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
14c30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
14c40 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
14c50 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
14c60 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
14c70 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
14c80 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
14c90 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
14ca0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
14cb0 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
14cc0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
14cd0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
14ce0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
14cf0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
14d00 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
14d10 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
14d20 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
14d30 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
14d40 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
14d50 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
14d60 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
14d70 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
14d80 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
14d90 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
14da0 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
14db0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
14dc0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
14dd0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
14de0 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
14df0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
14e00 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
14e10 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
14e20 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
14e30 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
14e40 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
14e50 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
14e60 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
14e70 74 61 6e 74 20 20 30 78 30 38 30 30 30 30 20 2f  tant  0x080000 /
14e80 2a 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e 73  * Node is a cons
14e90 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tant */../*.** T
14ea0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
14eb0 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
14ec0 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
14ed0 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45  its in the .** E
14ee0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
14ef0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
14f00 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
14f10 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
14f20 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
14f30 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f  ne ExprHasAllPro
14f40 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
14f50 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
14f60 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
14f70 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
14f80 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
14f90 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
14fa0 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
14fb0 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
14fc0 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45  &=~(P)../* The E
14fd0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
14fe0 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
14ff0 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
15000 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
15010 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
15020 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
15030 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
15040 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
15050 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
15060 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
15070 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
15080 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
15090 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
150a0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
150b0 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
150c0 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
150d0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
150e0 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
150f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
15100 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
15110 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
15120 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
15130 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
15140 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20   .** struct, an 
15150 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
15160 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
15170 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
15180 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61  .flags .** and a
15190 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
151a0 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
151b0 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
151c0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
151d0 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
151e0 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
151f0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
15200 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
15210 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
15220 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
15230 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
15240 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
15250 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
15260 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
15270 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
15280 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
15290 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
152a0 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
152b0 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
152c0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
152d0 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
152e0 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a  eader comment .*
152f0 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
15300 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
15310 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
15320 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
15330 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
15340 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
15350 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
15360 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
15370 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
15380 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
15390 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
153a0 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
153b0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
153c0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
153d0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
153e0 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
153f0 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
15400 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
15410 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
15420 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
15430 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
15440 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
15450 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
15460 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
15470 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
15480 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
15490 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
154a0 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
154b0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
154c0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
154d0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
154e0 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
154f0 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
15500 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
15510 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
15520 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
15530 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
15540 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
15550 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
15560 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
15570 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
15580 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
15590 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
155a0 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
155b0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
155c0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
155d0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
155e0 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
155f0 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
15600 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
15610 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
15620 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
15630 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
15640 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
15650 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
15660 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
15670 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
15680 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
15690 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
156a0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
156b0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
156c0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
156d0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
156e0 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
156f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15700 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
15710 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
15720 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
15730 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
15740 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
15750 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
15760 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
15770 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69         /* The li
15780 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
15790 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  s */.    char *z
157a0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
157b0 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
157c0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
157d0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
157e0 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
157f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
15800 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
15810 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
15820 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
15830 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
15840 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
15850 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
15860 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
15870 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
15880 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
15890 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
158a0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
158b0 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
158c0 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
158d0 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
158e0 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69  LUMN */.    unsi
158f0 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31  gned reusable :1
15900 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  ;   /* Constant 
15910 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65  expression is re
15920 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e  usable */.    un
15930 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75  ion {.      stru
15940 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36  ct {.        u16
15950 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
15960 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
15970 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
15980 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
15990 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69  */.        u16 i
159a0 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
159b0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
159c0 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
159d0 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20  r zName */.     
159e0 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20   } x;.      int 
159f0 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20  iConstExprReg;  
15a00 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
15a10 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61  in which Expr va
15a20 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f  lue is cached */
15a30 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61  .    } u;.  } *a
15a40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15a50 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f     /* Alloc a po
15a60 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74  wer of two great
15a70 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e  er or equal to n
15a80 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Expr */.};../*.*
15a90 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15aa0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15ab0 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
15ac0 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
15ad0 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
15ae0 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
15af0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
15b00 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
15b10 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
15b20 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
15b30 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
15b40 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
15b50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
15b60 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
15b70 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
15b80 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
15b90 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
15ba0 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
15bb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
15bc0 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
15bd0 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
15be0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
15bf0 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
15c00 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
15c10 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15c20 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
15c30 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
15c40 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
15c50 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
15c60 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
15c70 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
15c80 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
15c90 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
15ca0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
15cb0 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
15cc0 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
15cd0 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
15ce0 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
15cf0 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
15d00 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
15d10 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
15d20 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
15d30 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
15d40 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
15d50 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
15d60 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
15d70 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
15d80 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
15d90 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
15da0 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
15db0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
15dc0 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
15dd0 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
15de0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
15df0 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
15e00 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
15e10 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
15e20 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
15e30 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
15e40 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15e50 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
15e60 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
15e70 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
15e80 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
15e90 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
15ea0 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
15eb0 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
15ec0 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
15ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15ee0 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
15ef0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
15f00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
15f10 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
15f20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
15f30 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
15f40 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
15f50 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
15f60 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
15f70 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
15f80 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
15f90 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
15fa0 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
15fb0 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
15fc0 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
15fd0 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
15fe0 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
15ff0 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
16000 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64  n ix86..*/.typed
16010 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
16020 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
16030 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
16040 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
16050 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
16060 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
16070 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
16080 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
16090 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
160a0 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
160b0 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
160c0 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
160d0 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
160e0 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
160f0 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
16100 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  n))../*.** The f
16110 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
16120 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
16130 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
16140 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16150 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
16160 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
16170 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
16180 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
16190 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
161a0 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
161b0 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
161c0 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
161d0 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
161e0 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
161f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
16200 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
16210 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
16220 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
16230 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
16240 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
16250 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
16260 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
16270 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
16280 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
16290 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
162a0 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
162b0 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
162c0 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
162d0 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
162e0 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
162f0 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
16300 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
16310 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
16320 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
16330 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
16340 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
16350 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
16360 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
16370 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
16380 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
16390 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
163a0 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
163b0 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
163c0 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
163d0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
163e0 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
163f0 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
16400 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
16410 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
16420 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
16430 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
16440 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
16450 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
16460 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
16470 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
16480 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
16490 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
164a0 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
164b0 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
164c0 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
164d0 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
164e0 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
164f0 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
16500 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
16510 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16520 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
16530 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
16540 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
16550 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
16560 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16570 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
16580 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
16590 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
165a0 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
165b0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
165c0 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
165d0 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
165e0 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
165f0 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
16600 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
16610 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
16620 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
16630 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
16640 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
16650 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
16660 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
16670 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
16680 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
16690 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
166a0 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
166b0 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
166c0 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
166d0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
166e0 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
166f0 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
16700 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16710 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
16720 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
16730 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
16740 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
16750 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
16760 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
16770 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
16780 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
16790 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
167a0 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
167b0 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
167c0 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
167d0 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
167e0 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
167f0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
16800 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
16810 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
16820 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
16830 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
16840 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
16850 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
16860 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
16870 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
16880 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
16890 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
168a0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
168b0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
168c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
168d0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
168e0 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
168f0 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
16900 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
16910 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
16920 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73  utine */.    uns
16930 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
16940 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
16950 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
16960 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
16970 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
16980 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
16990 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b     u8 iSelectId;
169a0 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65       /* If pSele
169b0 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66  ct!=0, the id of
169c0 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
169d0 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66  in EQP */.#endif
169e0 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
169f0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
16a00 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
16a10 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
16a20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
16a30 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
16a40 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
16a50 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
16a60 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
16a70 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
16a80 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
16a90 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
16aa0 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
16ab0 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
16ac0 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
16ad0 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
16ae0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64  /.    char *zInd
16af0 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74  ex;     /* Ident
16b00 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
16b10 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
16b20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49   clause */.    I
16b30 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
16b40 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
16b50 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
16b60 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20  g to zIndex, if 
16b70 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  any */.  } a[1];
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16b90 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
16ba0 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
16bb0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
16bc0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
16bd0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
16be0 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
16bf0 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
16c00 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
16c10 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
16c20 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
16c30 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
16c40 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
16c50 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
16c60 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
16c70 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
16c80 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
16c90 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
16ca0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
16cb0 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
16cc0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16cd0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
16ce0 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
16cf0 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
16d00 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
16d10 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
16d20 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
16d30 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
16d40 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
16d50 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
16d60 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
16d70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
16d80 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
16d90 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
16da0 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
16db0 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
16dc0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
16dd0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
16de0 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
16df0 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
16e00 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
16e10 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
16e20 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
16e30 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
16e40 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
16e50 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
16e60 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
16e70 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
16e80 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
16e90 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
16ea0 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
16eb0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
16ec0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
16ed0 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
16ee0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
16ef0 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
16f00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16f10 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
16f20 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
16f30 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
16f40 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
16f50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16f60 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
16f70 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
16f80 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
16f90 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
16fa0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
16fb0 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
16fc0 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
16fd0 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
16fe0 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
16ff0 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
17000 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
17010 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
17020 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
17030 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
17040 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
17050 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
17060 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
17070 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
17080 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
17090 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20  HERE_AND_ONLY   
170a0 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
170b0 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65  Don't use indice
170c0 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a  s for OR terms *
170d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
170e0 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
170f0 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65   0x0100 /* pOrde
17100 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
17110 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
17120 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17130 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30  CTBY       0x020
17140 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
17150 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
17160 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
17170 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
17180 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34  DISTINCT    0x04
17190 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
171a0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
171b0 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
171c0 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
171d0 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f  UP      0x0800 /
171e0 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
171f0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
17200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17210 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20  E_REOPEN_IDX    
17220 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79     0x1000 /* Try
17230 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65   to use OP_Reope
17240 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  nIdx */../* Allo
17250 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
17260 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
17270 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
17280 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17290 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
172a0 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
172b0 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
172c0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
172d0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
172e0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
172f0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
17300 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17310 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
17320 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
17330 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
17340 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
17350 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
17360 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
17370 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
17380 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
17390 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
173a0 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
173b0 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
173c0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
173d0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
173e0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
173f0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
17400 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
17410 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
17420 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
17430 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
17440 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
17450 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
17460 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
17470 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
17480 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
17490 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
174a0 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
174b0 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
174c0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
174d0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
174e0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
174f0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
17500 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
17510 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
17520 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
17530 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
17540 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
17550 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
17560 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
17570 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
17580 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
17590 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
175a0 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
175b0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
175c0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
175d0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
175e0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
175f0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
17600 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
17610 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
17620 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
17630 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
17640 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
17650 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
17660 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
17670 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
17680 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
17690 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
176a0 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
176b0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
176c0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
176d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
176e0 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
176f0 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
17700 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
17710 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
17720 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
17730 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
17740 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
17750 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
17760 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
17770 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
17780 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
17790 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
177a0 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
177b0 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
177c0 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
177d0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
177e0 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
177f0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
17800 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
17810 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
17820 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
17830 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
17840 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
17850 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
17860 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
17870 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
17880 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
17890 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
178a0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
178b0 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
178c0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
178d0 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
178e0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
178f0 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
17900 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
17910 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
17920 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
17930 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
17940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17950 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
17960 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
17970 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
17980 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
17990 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
179a0 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
179b0 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
179c0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20   names */.  u16 
179d0 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ncFlags;        
179e0 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
179f0 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
17a00 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
17a10 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
17a20 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
17a30 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
17a40 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
17a50 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78  Note:  NC_MinMax
17a60 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74 68  Agg must have th
17a70 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
17a80 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64  SF_MinMaxAgg and
17a90 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
17aa0 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23  MINMAX..** .*/.#
17ab0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
17ac0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
17ad0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17ae0 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
17af0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
17b00 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30  C_HasAgg    0x00
17b10 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  02  /* One or mo
17b20 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
17b30 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
17b40 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
17b50 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54  k   0x0004  /* T
17b60 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
17b70 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
17b80 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
17b90 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
17ba0 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20  Func 0x0008  /* 
17bb0 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
17bc0 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
17bd0 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
17be0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
17bf0 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72     0x0010  /* Tr
17c00 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
17c10 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
17c20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
17c30 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
17c40 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
17c50 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
17c60 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
17c70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
17c80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
17c90 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
17ca0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
17cb0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
17cc0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
17cd0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
17ce0 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
17cf0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
17d00 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
17d10 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
17d20 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
17d30 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
17d40 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
17d50 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
17d60 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
17d70 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
17d80 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
17d90 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
17da0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
17db0 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
17dc0 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
17dd0 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
17de0 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
17df0 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
17e00 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
17e10 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
17e20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
17e30 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
17e40 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
17e50 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
17e60 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
17e70 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
17e80 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
17e90 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
17ea0 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
17eb0 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
17ec0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
17ed0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
17ee0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
17ef0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
17f00 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
17f10 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
17f20 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
17f30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
17f40 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
17f50 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
17f60 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
17f70 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
17f80 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
17f90 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
17fa0 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
17fb0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
17fc0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
17fd0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
17fe0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
17ff0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
18000 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
18010 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
18020 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
18030 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
18040 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
18050 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
18060 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
18070 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
18080 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
18090 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
180a0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
180b0 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
180c0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
180d0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
180e0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
180f0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
18100 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
18110 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
18120 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
18130 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
18140 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
18150 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
18160 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
18170 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
18180 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
18190 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
181a0 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
181b0 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
181c0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
181d0 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20  _ENABLED.  char 
181e0 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20  zSelName[12];   
181f0 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61    /* Symbolic na
18200 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43  me of this SELEC
18210 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67  T use for debugg
18220 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
18230 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
18240 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
18250 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
18260 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
18270 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e  elect */.  u64 n
18280 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20  SelectRow;      
18290 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
182a0 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
182b0 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
182c0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
182d0 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
182e0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
182f0 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
18300 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
18310 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
18320 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
18330 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
18340 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
18350 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
18360 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
18370 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18380 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
18390 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
183a0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
183b0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
183c0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
183d0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
183e0 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
183f0 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
18400 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
18410 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
18420 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
18430 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
18440 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
18450 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
18460 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
18470 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
18480 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
18490 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
184a0 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
184b0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
184c0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
184d0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
184e0 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
184f0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
18500 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
18510 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ULL. */.};../*.*
18520 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
18530 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
18540 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
18550 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
18560 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
18570 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
18580 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
18590 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
185a0 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
185b0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
185c0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
185d0 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
185e0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
185f0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
18600 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
18610 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
18620 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  004  /* Contains
18630 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18640 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
18650 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
18660 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73     0x0008  /* Us
18670 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
18680 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
18690 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
186a0 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30  ed        0x0010
186b0 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
186c0 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
186d0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
186e0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
186f0 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20  nfo     0x0020  
18700 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
18710 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
18720 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
18730 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
18740 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20       0x0040  /* 
18750 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
18760 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
18770 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
18780 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f         0x0080  /
18790 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
187a0 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
187b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
187c0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
187d0 78 30 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20  x0100  NOT USED 
187e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
187f0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78  stedFrom      0x
18800 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0200  /* Part of
18810 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
18820 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
18830 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
18840 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30  Convert    0x040
18850 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
18860 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
18870 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
18880 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72  #define SF_Recur
18890 73 69 76 65 20 20 20 20 20 20 20 30 78 30 38 30  sive       0x080
188a0 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73  0  /* The recurs
188b0 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65  ive part of a re
188c0 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23  cursive CTE */.#
188d0 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
188e0 41 67 67 20 20 20 20 20 20 20 30 78 31 30 30 30  Agg       0x1000
188f0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
18900 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
18910 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a  or max() */.../*
18920 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
18930 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
18940 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
18950 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
18960 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
18970 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
18980 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
18990 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
189a0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
189b0 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
189c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
189d0 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
189e0 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
189f0 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
18a00 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20  ndex .**        
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
18a20 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
18a30 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
18a40 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
18a50 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
18a60 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
18a70 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
18a80 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
18a90 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
18aa0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
18ab0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
18ac0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
18ad0 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
18b00 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
18b10 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
18b20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
18b30 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
18b40 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
18b50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18b60 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
18b70 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
18b80 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
18b90 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18bb0 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
18bc0 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
18bd0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
18be0 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
18bf0 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
18c00 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
18c10 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
18c20 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
18c30 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18c40 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
18c50 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
18c60 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
18c70 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
18c80 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
18c90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ca0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
18cb0 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
18cc0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
18cd0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
18ce0 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
18cf0 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
18d00 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
18d10 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
18d20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
18d30 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
18d40 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
18d50 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
18d80 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
18d90 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
18da0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
18db0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
18dc0 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
18dd0 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
18de0 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
18df0 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
18e00 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
18e10 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
18e20 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
18e30 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
18e50 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
18e60 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
18e70 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20  pDest->iSDParm. 
18e80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18e90 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
18ea0 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
18eb0 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
18ec0 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
18ef0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
18f00 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
18f10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
18f20 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
18f30 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
18f40 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18f50 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
18f80 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
18f90 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
18fa0 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
18fb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18fc0 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
18fd0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
18fe0 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
19010 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
19020 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
19030 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19040 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
19050 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
19060 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
19070 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
19080 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
19090 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
190a0 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
190b0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
190c0 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
190d0 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
190e0 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
19110 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
19120 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
19130 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
19160 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
19170 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
19180 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
191a0 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
191b0 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
191c0 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
191d0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
191e0 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
191f0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
19200 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
19210 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
19220 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
19230 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
19240 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
19270 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
19280 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
19290 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
192a0 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
192b0 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
192c0 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
192d0 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
192f0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
19300 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
19310 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
19320 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
19330 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19340 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
19350 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19360 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
19370 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
19380 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19390 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
193c0 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
193d0 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
193e0 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
19400 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
19410 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
19420 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
19430 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
19440 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
19450 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
19460 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
19470 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
19480 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
19490 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
194a0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
194b0 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
194c0 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
194d0 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
194e0 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
194f0 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
19500 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19510 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
19520 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
19530 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
19560 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
19570 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
19580 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
19590 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
195a0 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
195b0 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
195c0 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
195d0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
195e0 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
195f0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
19600 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
19610 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
19620 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
19630 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
19640 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
19650 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
19660 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
19670 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
19680 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
19690 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
196a0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
196b0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
196c0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
196d0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
196e0 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
196f0 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
19700 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
19710 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
19720 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
19730 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
19740 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
19750 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
19760 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
19770 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
19780 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
19790 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
197a0 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
197b0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
197c0 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
197d0 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
197e0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
197f0 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
19800 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19810 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
19820 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
19830 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
19840 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
19850 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
19860 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
19870 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
19880 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
19890 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
198a0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
198b0 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
198c0 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
198d0 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
198e0 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
198f0 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
19900 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
19910 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
19920 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
19930 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
19940 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
19950 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
19960 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
19970 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
19980 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
19990 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
199a0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
199b0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
199c0 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
199d0 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
199e0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
199f0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
19a00 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
19a10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19a20 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
19a30 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
19a40 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
19a50 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
19a60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
19a70 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
19a80 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
19a90 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
19aa0 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
19ab0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
19ac0 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
19ad0 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
19ae0 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f  ffSdst;        /
19af0 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
19b00 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
19b10 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
19b20 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
19b30 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
19b40 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
19b50 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
19b60 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
19b70 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
19b80 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
19b90 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
19ba0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
19bb0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
19bc0 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
19bd0 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
19be0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
19bf0 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
19c00 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
19c10 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
19c20 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
19c30 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
19c40 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
19c50 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
19c60 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
19c70 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
19c80 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
19c90 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
19ca0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
19cb0 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
19cc0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
19cd0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
19ce0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
19cf0 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
19d00 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
19d10 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
19d20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
19d30 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
19d40 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
19d50 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
19d60 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
19d70 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
19d80 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
19d90 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
19da0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
19db0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
19dc0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
19dd0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
19de0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
19df0 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
19e00 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
19e10 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
19e20 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
19e30 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
19e40 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
19e50 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
19e60 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
19e70 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
19e80 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
19e90 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
19ea0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
19eb0 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
19ec0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
19ed0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
19ee0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
19ef0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
19f00 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
19f10 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
19f20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
19f30 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
19f40 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
19f50 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
19f60 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
19f70 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
19f80 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
19f90 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
19fa0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
19fb0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
19fc0 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
19fd0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
19fe0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
19ff0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1a000 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
1a010 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1a020 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1a030 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1a040 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1a050 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1a060 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1a070 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1a080 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1a090 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1a0a0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1a0b0 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1a0c0 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1a0d0 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1a0e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1a0f0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1a100 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1a110 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1a120 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1a130 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1a140 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1a150 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1a160 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1a170 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1a180 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1a190 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1a1a0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1a1b0 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1a1c0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a1d0 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1a1e0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1a1f0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1a200 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1a210 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1a220 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1a230 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1a240 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1a250 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1a260 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1a270 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1a280 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1a290 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1a2a0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1a2b0 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
1a2c0 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
1a2d0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1a2e0 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
1a2f0 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
1a300 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
1a310 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
1a320 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
1a330 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1a340 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
1a350 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
1a360 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
1a370 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
1a380 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
1a390 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
1a3a0 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
1a3b0 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
1a3c0 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
1a3d0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
1a3e0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
1a3f0 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
1a400 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
1a410 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
1a420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a430 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1a440 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
1a450 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
1a460 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
1a470 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
1a480 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
1a490 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
1a4a0 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
1a4b0 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
1a4c0 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
1a4d0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
1a4e0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
1a4f0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
1a500 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1a510 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
1a520 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a530 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
1a540 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1a550 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
1a560 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
1a570 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1a580 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1a590 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
1a5a0 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
1a5b0 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1a5c0 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
1a5d0 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
1a5e0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1a5f0 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
1a600 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1a610 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1a620 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
1a630 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1a640 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
1a650 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1a660 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
1a670 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a680 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1a690 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
1a6a0 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
1a6b0 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1a6c0 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
1a6d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1a6e0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
1a6f0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1a700 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a710 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
1a720 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
1a730 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1a740 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
1a750 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
1a760 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
1a770 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
1a780 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
1a790 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
1a7a0 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
1a7b0 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
1a7c0 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
1a7d0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
1a7e0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
1a7f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1a800 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
1a810 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
1a820 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
1a830 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
1a840 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
1a850 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
1a860 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
1a870 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
1a880 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
1a890 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
1a8a0 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
1a8b0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
1a8c0 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
1a8d0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
1a8e0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
1a8f0 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
1a900 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
1a910 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
1a920 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
1a930 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
1a940 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
1a950 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
1a960 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1a970 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1a980 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1a990 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1a9a0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1a9b0 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1a9c0 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1a9d0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1a9e0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1a9f0 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1aa00 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1aa10 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1aa20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1aa30 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1aa40 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1aa50 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1aa60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1aa70 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1aa80 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1aa90 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1aaa0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1aab0 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1aac0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1aad0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1aae0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1aaf0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1ab00 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1ab10 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1ab20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1ab30 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1ab40 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1ab50 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1ab60 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1ab70 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1ab80 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1ab90 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1aba0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1abb0 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1abc0 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1abd0 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1abe0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1abf0 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1ac00 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1ac10 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1ac20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1ac30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ac40 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1ac50 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1ac60 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1ac70 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1ac80 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1ac90 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1aca0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1acb0 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1acc0 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1acd0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1ace0 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1acf0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1ad00 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1ad10 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1ad20 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1ad30 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1ad40 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1ad50 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1ad60 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1ad70 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1ad80 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ants */.  int aT
1ad90 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
1ada0 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1adb0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1adc0 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
1add0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
1ade0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1adf0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1ae00 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1ae10 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
1ae20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1ae30 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
1ae40 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1ae50 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1ae60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ae70 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
1ae80 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
1ae90 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1aea0 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
1aeb0 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
1aec0 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
1aed0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
1aee0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1aef0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1af00 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1af10 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
1af20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1af30 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
1af40 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1af50 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
1af60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
1af70 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
1af80 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1af90 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1afa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1afb0 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1afc0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1afd0 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b  .  int iFixedOp;
1afe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72          /* Never
1aff0 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65   back out opcode
1b000 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20  s iFixedOp-1 or 
1b010 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74  earlier */.  int
1b020 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
1b030 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1b040 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
1b050 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
1b060 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61  nts */.  int iPa
1b070 72 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a  rtIdxTab;     /*
1b080 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   Table correspon
1b090 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61  ding to a partia
1b0a0 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  l index */.  int
1b0b0 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1b0c0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1b0d0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1b0e0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1b0f0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1b100 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1b110 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1b120 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1b130 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1b140 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1b150 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1b160 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1b170 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1b180 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1b190 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1b1a0 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1b1b0 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  /.  struct yColC
1b1c0 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
1b1d0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
1b1e0 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
1b1f0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
1b200 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
1b210 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
1b220 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
1b230 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
1b240 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
1b250 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
1b260 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
1b270 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
1b280 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
1b290 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
1b2a0 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
1b2b0 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
1b2c0 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
1b2d0 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
1b2e0 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
1b2f0 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
1b300 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
1b310 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
1b320 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
1b330 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
1b340 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
1b350 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
1b360 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
1b370 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
1b380 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
1b390 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1b3a0 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
1b3b0 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1b3c0 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  s */.  Token con
1b3d0 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
1b3e0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
1b3f0 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
1b400 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
1b410 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
1b420 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
1b430 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
1b440 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
1b450 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
1b460 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
1b470 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
1b480 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
1b490 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
1b4a0 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51  t cookieValue[SQ
1b4b0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1b4c0 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73  D+2];  /* Values
1b4d0 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76   of cookies to v
1b4e0 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72  erify */.  int r
1b4f0 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
1b500 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1b510 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
1b520 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
1b530 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
1b540 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
1b550 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1b560 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
1b570 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
1b580 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
1b590 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
1b5a0 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
1b5b0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
1b5c0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23  sub-program */.#
1b5d0 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
1b5e0 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65  NABLED.  int nSe
1b5f0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
1b600 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
1b610 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65  T statements see
1b620 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65  n */.  int nSele
1b630 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48  ctIndent;   /* H
1b640 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74  ow far to indent
1b650 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f   SELECTTRACE() o
1b660 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1b670 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1b680 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
1b690 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
1b6a0 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
1b6b0 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
1b6c0 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
1b6d0 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
1b6e0 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
1b6f0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
1b700 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
1b710 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
1b720 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
1b730 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
1b740 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
1b750 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
1b760 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
1b770 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
1b780 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
1b790 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
1b7a0 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
1b7b0 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
1b7c0 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
1b7d0 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
1b7e0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
1b7f0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
1b800 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
1b810 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
1b820 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
1b830 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
1b840 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
1b850 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1b860 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
1b870 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b   */.  int addrSk
1b880 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64  ipPK;      /* Ad
1b890 64 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63  dress of instruc
1b8a0 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49  tion to skip PRI
1b8b0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
1b8c0 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1b8d0 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1b8e0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1b8f0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1b900 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1b910 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1b920 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1b930 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1b940 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1b950 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1b960 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1b970 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1b980 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1b990 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1b9a0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1b9b0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1b9c0 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1b9d0 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1b9e0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1b9f0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1ba00 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1ba10 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1ba20 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1ba30 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1ba40 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1ba50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ba90 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
1baa0 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
1bab0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
1bac0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
1bad0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
1bae0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
1baf0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
1bb00 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
1bb10 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
1bb20 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
1bb30 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
1bb40 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73  of(Parse,nVar) s
1bb50 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64  o the nVar field
1bb60 20 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72   must be the fir
1bb70 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e  st field.  ** in
1bb80 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1bb90 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1bba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bbe0 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
1bc10 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
1bc20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
1bc30 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
1bc40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bc50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
1bc60 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
1bc70 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
1bc80 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1bc90 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1bca0 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1bcb0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1bcc0 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68  /.  u8 bFreeWith
1bcd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1bce0 20 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73   True if pWith s
1bcf0 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77  hould be freed w
1bd00 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  ith parser */.  
1bd10 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1bd20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1bd30 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1bd40 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1bd50 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1bd60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1bd70 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1bd80 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1bd90 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1bda0 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1bdb0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1bdc0 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1bdd0 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1bde0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bdf0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1be00 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1be10 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1be30 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1be40 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1be50 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1be60 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1be70 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1be80 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1be90 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1bea0 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1beb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1bec0 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1bed0 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1bee0 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1bef0 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1bf00 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1bf10 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1bf20 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1bf30 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1bf40 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1bf50 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1bf60 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1bf70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1bf80 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1bf90 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1bfa0 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1bfb0 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1bfc0 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1bfd0 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1bfe0 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1bff0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1c000 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1c010 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1c020 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1c030 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1c040 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1c050 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1c060 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1c070 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1c080 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1c090 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1c0a0 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1c0b0 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1c0c0 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1c0d0 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1c0e0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1c0f0 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1c100 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1c110 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1c120 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1c130 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1c140 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1c150 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1c160 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1c170 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1c180 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1c190 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1c1a0 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1c1b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1c1c0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1c1d0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1c1e0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1c1f0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1c200 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1c210 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1c220 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1c230 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1c240 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1c250 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1c260 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1c270 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1c280 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1c290 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1c2a0 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1c2b0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1c2c0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1c2d0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1c2e0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1c2f0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c310 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1c320 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1c330 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1c340 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1c350 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1c360 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1c370 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1c380 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c390 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1c3a0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1c3b0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1c3c0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1c3d0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1c3e0 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1c3f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1c400 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1c410 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1c420 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1c430 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1c440 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1c450 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1c460 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1c470 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1c480 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1c490 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1c4a0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1c4b0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1c4c0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1c4d0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1c4e0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1c4f0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c510 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1c520 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1c530 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1c540 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1c550 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1c560 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
1c570 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1c580 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74    0x01    /* Set
1c590 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
1c5a0 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e  Change */.#defin
1c5b0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1c5c0 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f  ID     0x02    /
1c5d0 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1c5e0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
1c5f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1c600 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
1c610 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
1c620 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
1c630 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
1c640 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
1c650 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
1c660 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
1c670 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
1c680 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
1c690 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1c6a0 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
1c6b0 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
1c6c0 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
1c6d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1c6e0 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
1c6f0 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c     0x20    /* Cl
1c700 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  ear pseudo-table
1c710 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c   cache in OP_Col
1c720 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  umn */.#define O
1c730 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
1c740 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
1c750 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1c760 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
1c770 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c780 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
1c790 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
1c7a0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1c7b0 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
1c7c0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
1c7d0 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
1c7e0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
1c7f0 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
1c800 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
1c810 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
1c820 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20  REG       0x02  
1c830 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
1c840 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
1c850 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
1c860 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
1c870 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
1c880 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
1c890 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
1c8a0 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  tion */../*. * E
1c8b0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
1c8c0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
1c8d0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
1c8e0 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
1c8f0 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
1c900 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a   Trigger. . *. *
1c910 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
1c920 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1c930 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
1c940 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
1c950 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
1c960 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
1c970 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
1c980 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
1c990 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20  epresents the . 
1c9a0 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
1c9b0 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
1c9c0 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
1c9d0 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
1c9e0 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
1c9f0 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
1ca00 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
1ca10 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
1ca20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
1ca30 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
1ca40 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
1ca50 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
1ca60 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
1ca70 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1ca80 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
1ca90 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
1caa0 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
1cab0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1cac0 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
1cad0 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
1cae0 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
1caf0 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
1cb00 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1cb10 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
1cb20 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
1cb30 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
1cb40 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
1cb50 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
1cb60 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
1cb70 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
1cb80 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
1cb90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1cba0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
1cbb0 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1cbd0 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
1cbe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1cbf0 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
1cc00 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
1cc10 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
1cc20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1cc30 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1cc40 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1cc50 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1cc60 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
1cc70 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
1cc80 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1cc90 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
1cca0 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
1ccb0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
1ccc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ccd0 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
1cce0 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1ccf0 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
1cd00 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
1cd10 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
1cd20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
1cd30 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
1cd40 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1cd70 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
1cd80 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1cd90 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1cda0 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
1cdb0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1cdc0 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
1cdd0 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
1cde0 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
1cdf0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1ce00 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
1ce10 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
1ce20 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
1ce30 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
1ce40 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
1ce50 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
1ce60 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
1ce70 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
1ce80 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
1ce90 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
1cea0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
1ceb0 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
1cec0 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
1ced0 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
1cee0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
1cef0 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
1cf00 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
1cf10 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
1cf20 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
1cf30 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
1cf40 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
1cf50 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
1cf60 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
1cf70 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
1cf80 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
1cf90 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
1cfa0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
1cfb0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
1cfc0 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
1cfd0 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
1cfe0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1cff0 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
1d000 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
1d010 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
1d020 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
1d030 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
1d040 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
1d050 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1d060 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
1d070 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
1d080 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
1d090 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
1d0a0 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
1d0b0 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
1d0c0 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
1d0d0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1d0e0 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
1d0f0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
1d100 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
1d110 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1d120 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
1d130 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
1d140 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
1d150 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
1d160 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
1d170 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
1d180 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
1d190 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
1d1a0 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
1d1b0 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
1d1c0 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
1d1d0 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
1d1e0 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
1d1f0 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
1d200 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
1d210 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
1d220 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
1d230 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
1d240 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
1d250 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1d260 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
1d270 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1d280 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1d290 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
1d2a0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1d2b0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1d2c0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
1d2d0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
1d2e0 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
1d2f0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72  ise NULL.. * tar
1d300 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1d310 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1d320 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1d330 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
1d340 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
1d350 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
1d360 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1d370 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
1d380 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1d390 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d3a0 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
1d3b0 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
1d3c0 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
1d3d0 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
1d3e0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1d3f0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1d400 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
1d410 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1d430 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
1d440 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
1d450 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
1d460 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1d470 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
1d480 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1d490 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65  DELETE). * targe
1d4a0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1d4b0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1d4c0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1d4d0 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1d4e0 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1d4f0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1d500 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1d510 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1d520 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1d530 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1d540 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1d550 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1d560 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74   TK_UPDATE). * t
1d570 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1d580 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1d590 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1d5a0 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1d5b0 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70  te rows of.. * p
1d5c0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1d5d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1d5e0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1d5f0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1d600 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1d610 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1d620 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
1d630 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
1d640 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
1d650 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
1d660 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
1d670 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
1d680 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
1d690 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
1d6a0 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
1d6b0 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
1d6c0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1d6d0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20   argument.. * . 
1d6e0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1d6f0 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d710 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1d720 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1d730 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
1d740 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
1d750 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
1d760 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
1d770 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
1d780 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
1d790 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
1d7a0 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
1d7b0 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
1d7c0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1d7d0 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d   /* SELECT statm
1d7e0 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
1d7f0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c  SERT INTO .. SEL
1d800 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b  ECT ... */.  Tok
1d810 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20  en target;      
1d820 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
1d830 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
1d840 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
1d850 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1d860 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1d870 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
1d880 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1d890 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
1d8a0 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
1d8b0 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
1d8c0 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49  r UPDATE. */.  I
1d8d0 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
1d8e0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
1d8f0 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
1d900 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1d910 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1d920 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
1d930 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
1d940 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
1d950 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
1d960 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
1d970 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
1d980 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
1d990 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1d9a0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1d9b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
1d9c0 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
1d9d0 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
1d9e0 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
1d9f0 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
1da00 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
1da10 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
1da20 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
1da30 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
1da40 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
1da50 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
1da60 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1da70 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
1da80 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
1da90 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
1daa0 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
1dab0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
1dac0 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
1dad0 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
1dae0 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
1daf0 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
1db00 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
1db10 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
1db20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
1db30 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
1db40 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
1db50 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
1db60 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
1db70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
1db80 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
1db90 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1dba0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1dbb0 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
1dbc0 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
1dbd0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1dbe0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1dbf0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1dc00 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
1dc10 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
1dc20 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
1dc30 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
1dc40 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
1dc50 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
1dc60 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
1dc70 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
1dc80 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
1dc90 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
1dca0 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
1dcb0 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
1dcc0 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
1dcd0 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
1dce0 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
1dcf0 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
1dd00 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
1dd10 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
1dd20 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
1dd30 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1dd40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1dd50 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1dd60 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1dd70 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1dd80 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1dd90 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1dda0 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1ddb0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1ddc0 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1ddd0 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1dde0 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1ddf0 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1de00 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74  ximum allowed st
1de10 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1de20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1de30 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1de40 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1de50 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1de60 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1de70 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1de80 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1de90 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1dea0 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1deb0 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1dec0 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1ded0 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1dee0 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1def0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1df00 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1df10 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1df20 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1df30 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1df40 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1df50 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1df60 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1df70 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1df80 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1df90 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1dfa0 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1dfb0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1dfc0 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1dfd0 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1dfe0 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1dff0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1e000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1e010 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1e020 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1e030 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1e040 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1e050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1e060 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1e070 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1e080 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1e090 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1e0a0 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1e0b0 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1e0c0 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1e0d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1e0e0 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1e0f0 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1e100 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1e110 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1e120 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1e130 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1e140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e150 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1e160 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1e170 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1e1a0 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1e1b0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1e1c0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1e1d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e1e0 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1e1f0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1e200 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1e230 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1e240 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1e250 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e270 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1e280 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1e290 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1e2a0 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1e2c0 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1e2d0 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
1e2e0 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1e300 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
1e310 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
1e320 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1e330 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1e340 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1e350 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1e360 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1e370 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e390 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1e3a0 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1e3b0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1e3c0 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1e3d0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1e3e0 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1e3f0 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1e400 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1e410 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1e420 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1e430 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1e440 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1e450 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1e460 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1e470 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1e480 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1e490 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4b0 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1e4c0 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1e4d0 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1e500 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1e510 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1e520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1e530 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1e540 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1e550 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1e560 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1e570 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1e580 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1e590 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1e5a0 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1e5b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1e5c0 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1e5d0 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1e5e0 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1e600 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1e610 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1e620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e630 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1e640 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1e650 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1e660 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1e670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e680 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1e690 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1e6a0 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e6c0 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1e6d0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1e6e0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1e6f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1e700 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1e710 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1e720 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e740 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1e750 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1e760 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1e770 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1e780 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1e790 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1e7a0 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1e7b0 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1e7c0 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1e7d0 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1e7e0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1e7f0 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20  enabled */.  /* 
1e800 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1e810 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1e820 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1e830 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1e840 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1e850 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1e860 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1e870 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1e8a0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1e8b0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1e8c0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1e8f0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1e900 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1e910 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1e920 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e930 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1e940 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1e950 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1e960 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1e990 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1e9a0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1e9b0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1e9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e9d0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1e9e0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1e9f0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
1ea00 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1ea10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ea20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
1ea30 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
1ea40 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
1ea50 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
1ea60 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
1ea70 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1ea80 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
1ea90 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1eaa0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1eab0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1eac0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1ead0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1eb00 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
1eb10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1eb20 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
1eb30 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
1eb40 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
1eb50 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
1eb60 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
1eb70 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1eb80 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1eb90 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
1eba0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
1ebb0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
1ebc0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
1ebd0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
1ebe0 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
1ebf0 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
1ec00 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
1ec10 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
1ec20 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
1ec30 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
1ec40 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c  (void*,int iSrcL
1ec50 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
1ec60 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
1ec70 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
1ec80 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
1ecc0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1ecd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ece0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69  BUILTIN_TEST.  i
1ecf0 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
1ed00 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
1ed10 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
1ed20 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
1ed30 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1ed40 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
1ed50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1ed60 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
1ed70 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
1ed80 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1ed90 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
1eda0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
1edb0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
1edc0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
1edd0 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
1ede0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
1edf0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
1ee00 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
1ee10 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
1ee20 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
1ee30 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
1ee40 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1ee50 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
1ee60 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
1ee70 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
1ee80 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
1ee90 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
1eea0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
1eeb0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
1eec0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
1eed0 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
1eee0 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
1eef0 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
1ef00 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
1ef10 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
1ef20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
1ef30 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
1ef40 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
1ef50 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
1ef60 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
1ef70 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
1ef80 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
1ef90 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
1efa0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
1efb0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
1efc0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
1efd0 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
1efe0 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
1eff0 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
1f000 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
1f010 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
1f020 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
1f030 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
1f040 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70  r {.  int (*xExp
1f050 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
1f060 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
1f070 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1f080 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1f090 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
1f0a0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1f0b0 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
1f0c0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1f0d0 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
1f0e0 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
1f0f0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1f100 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
1f110 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1f120 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
1f130 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
1f160 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  t.  */.  int wal
1f170 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f190 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f1a0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
1f1b0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
1f1e0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
1f1f0 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
1f200 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
1f230 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1f240 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1f270 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20  teger value */. 
1f280 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
1f290 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f2b0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1f2c0 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
1f2d0 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f2f0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
1f300 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
1f310 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
1f320 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
1f330 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
1f340 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
1f350 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1f360 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
1f370 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
1f380 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1f390 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
1f3a0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1f3b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1f3c0 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
1f3d0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1f3e0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1f3f0 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
1f400 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a   Select*);../*.*
1f410 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1f420 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
1f430 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
1f440 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
1f450 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
1f460 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
1f470 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
1f480 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
1f490 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
1f4a0 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
1f4b0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
1f4c0 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
1f4d0 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
1f4e0 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
1f4f0 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
1f500 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
1f510 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
1f520 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1f530 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
1f540 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65  tructure represe
1f550 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65  nts a set of one
1f560 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a   or more CTEs.**
1f570 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   (common table e
1f580 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61  xpressions) crea
1f590 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ted by a single 
1f5a0 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  WITH clause..*/.
1f5b0 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20  struct With {.  
1f5c0 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20  int nCte;       
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45  /* Number of CTE
1f5f0 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  s in the WITH cl
1f600 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a  ause */.  With *
1f610 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20  pOuter;         
1f620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
1f630 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61  taining WITH cla
1f640 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1f650 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20    struct Cte {  
1f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f670 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54    /* For each CT
1f680 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  E in the WITH cl
1f690 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20  ause.... */.    
1f6a0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
1f6d0 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  CTE */.    ExprL
1f6e0 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20  ist *pCols;     
1f6f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
1f700 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63  st of explicit c
1f710 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20  olumn names, or 
1f720 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65  NULL */.    Sele
1f730 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1f740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f750 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
1f760 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
1f770 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
1f780 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1f790 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1f7a0 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72  e for circular r
1f7b0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1f7c0 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a   a[1];.};../*.**
1f7d0 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
1f7e0 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1f7f0 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
1f800 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
1f810 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
1f820 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
1f830 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
1f840 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
1f850 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
1f860 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
1f870 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1f890 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
1f8a0 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
1f8d0 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
1f8e0 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
1f8f0 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
1f900 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
1f940 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
1f950 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
1f960 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
1f970 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
1f980 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
1f990 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
1f9a0 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
1f9b0 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
1f9c0 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
1f9d0 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
1f9e0 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
1f9f0 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
1fa00 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
1fa10 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
1fa20 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
1fa30 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
1fa40 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
1fa50 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
1fa60 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
1fa70 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
1fa80 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1fa90 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
1faa0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
1fab0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1fac0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
1fad0 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
1fae0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
1faf0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1fb00 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1fb10 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
1fb20 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
1fb30 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
1fb40 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1fb50 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
1fb60 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
1fb70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
1fb80 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
1fb90 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
1fba0 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
1fbb0 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
1fbc0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
1fbd0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
1fbe0 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
1fbf0 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
1fc00 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68   also call.** th
1fc10 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1fc20 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
1fc30 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20  rve as an alias 
1fc40 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
1fc50 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
1fc60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1fc70 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
1fc80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1fc90 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
1fca0 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
1fcb0 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS3.#endif../
1fcc0 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
1fcd0 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
1fce0 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
1fcf0 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
1fd00 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
1fd10 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
1fd20 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
1fd30 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
1fd40 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1fd50 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
1fd60 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
1fd70 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1fd80 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
1fd90 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
1fda0 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
1fdb0 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
1fdc0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1fdd0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
1fde0 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
1fdf0 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1fe00 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
1fe10 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
1fe20 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
1fe30 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
1fe40 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
1fe50 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
1fe60 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
1fe70 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
1fe80 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
1fe90 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
1fea0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
1feb0 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
1fec0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
1fed0 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
1fee0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1fef0 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
1ff00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ff10 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
1ff20 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1ff30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ff40 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
1ff50 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1ff60 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1ff70 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1ff80 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
1ff90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ffa0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
1ffb0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1ffc0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ffd0 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
1ffe0 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1fff0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
20000 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
20010 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
20020 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20030 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
20040 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
20050 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20060 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
20070 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
20080 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
20090 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
200a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
200b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
200c0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
200d0 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
200e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
200f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20100 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
20110 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
20120 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
20130 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
20140 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
20150 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20160 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20170 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
20180 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
20190 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
201a0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
201b0 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
201c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
201d0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
201e0 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
201f0 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
20200 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
20210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
20220 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
20230 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
20240 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )(x)).#endif../*
20250 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
20260 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
20270 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
20280 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
20290 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
202a0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
202b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
202c0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
202d0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
202e0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
202f0 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
20300 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20310 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
20320 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
20330 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
20340 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
20350 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
20360 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
20370 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
20380 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20390 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
203a0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
203b0 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
203c0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
203d0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
203e0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
203f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20400 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
20410 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
20420 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
20430 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
20440 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
20450 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20460 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20470 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
20480 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20490 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
204a0 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
204b0 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
204c0 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
204d0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
204e0 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
204f0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
20500 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
20510 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
20520 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
20530 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
20540 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
20550 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
20560 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
20570 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
20580 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
20590 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f  efault(void);.vo
205a0 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
205b0 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
205c0 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
205d0 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74   (*)(void));.int
205e0 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
205f0 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
20600 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
20610 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
20620 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
20630 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
20640 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
20650 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
20660 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
20670 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
20680 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
20690 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
206a0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
206b0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
206c0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
206d0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
206e0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
206f0 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
20700 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
20710 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
20720 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
20730 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
20740 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20750 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
20760 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20770 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
20780 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
20790 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
207a0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
207b0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
207c0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
207d0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
207e0 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
207f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20800 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
20810 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
20820 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
20830 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20840 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
20850 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
20860 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
20870 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20880 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
20890 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
208a0 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
208b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
208c0 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
208d0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
208e0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
208f0 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
20900 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
20910 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
20920 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
20930 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
20940 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
20950 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
20960 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
20970 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
20980 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
20990 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
209a0 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
209b0 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
209c0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
209d0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
209e0 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
209f0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
20a00 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
20a10 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
20a20 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
20a30 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
20a40 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
20a50 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  oid);.#endif..in
20a60 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  t sqlite3StatusV
20a70 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
20a80 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64  sqlite3StatusAdd
20a90 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
20aa0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
20ab0 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  t(int, int);..#i
20ac0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20ad0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
20ae0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
20af0 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
20b00 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20b10 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
20b20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20b30 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
20b40 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
20b50 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
20b60 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
20b70 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
20b80 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
20b90 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
20ba0 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
20bb0 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
20bc0 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
20bd0 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bf0 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
20c00 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
20c10 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
20c20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20c30 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
20c40 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
20c50 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
20c60 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
20c70 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
20c80 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e  es */.};..#defin
20c90 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
20ca0 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64  INTERNAL 0x01.#d
20cb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
20cc0 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
20cd0 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  2.void sqlite3VX
20ce0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
20cf0 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
20d00 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
20d10 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
20d20 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32  f(StrAccum*, u32
20d30 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
20d40 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
20d50 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
20d60 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
20d70 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
20d80 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
20d90 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
20da0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72  , va_list);.char
20db0 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
20dc0 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a  f(sqlite3*,char*
20dd0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  ,const char*,...
20de0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
20df0 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64  QLITE_TEST) || d
20e00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
20e10 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
20e20 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
20e30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
20e40 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
20e50 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
20e60 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
20e70 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
20e80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
20e90 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66  dif../* Output f
20ea0 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51  ormatting for SQ
20eb0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58  LITE_TESTCTRL_EX
20ec0 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66  PLAIN */.#if def
20ed0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
20ee0 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29  LE_TREE_EXPLAIN)
20ef0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20f00 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65  xplainBegin(Vdbe
20f10 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20f20 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28  e3ExplainPrintf(
20f30 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
20f40 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64  r*, ...);.  void
20f50 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e   sqlite3ExplainN
20f60 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  L(Vdbe*);.  void
20f70 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
20f80 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  ush(Vdbe*);.  vo
20f90 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
20fa0 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76  nPop(Vdbe*);.  v
20fb0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20fc0 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b  inFinish(Vdbe*);
20fd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20fe0 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62  xplainSelect(Vdb
20ff0 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e*, Select*);.  
21000 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
21010 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45  ainExpr(Vdbe*, E
21020 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
21030 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
21040 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72  List(Vdbe*, Expr
21050 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20  List*);.  const 
21060 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62  char *sqlite3Vdb
21070 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62  eExplanation(Vdb
21080 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
21090 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
210a0 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  inBegin(X).# def
210b0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
210c0 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20  inSelect(A,B).# 
210d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
210e0 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23  plainExpr(A,B).#
210f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
21100 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41  xplainExprList(A
21110 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
21120 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
21130 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  h(X).# define sq
21140 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61  lite3VdbeExplana
21150 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  tion(X) 0.#endif
21160 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
21170 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
21180 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
21190 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
211a0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
211b0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
211c0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
211d0 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  nt sqlite3Dequot
211e0 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  e(char*);.int sq
211f0 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
21200 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
21210 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
21220 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
21230 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
21240 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
21250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
21260 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
21270 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
21280 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
21290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
212a0 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
212b0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
212c0 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
212d0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
212e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
212f0 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
21300 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
21310 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
21320 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
21330 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
21340 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
21350 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
21360 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
21370 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
21380 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
21390 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
213a0 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
213b0 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
213c0 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
213d0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
213e0 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
213f0 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
21400 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
21410 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
21420 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
21430 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
21440 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
21450 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
21460 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
21470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21480 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
21490 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
214a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
214b0 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
214c0 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
214d0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
214e0 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
214f0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
21500 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21510 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
21520 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
21530 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
21540 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
21550 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
21560 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
21570 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
21580 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
21590 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
215a0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
215b0 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
215c0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
215d0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
215e0 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
215f0 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
21600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
21610 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
21620 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21630 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21640 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
21650 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
21660 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
21670 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
21680 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
21690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
216a0 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
216b0 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
216c0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
216d0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
216e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
216f0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
21700 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
21710 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
21720 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
21730 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
21740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
21750 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
21760 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64  rse *, int);.Ind
21770 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61  ex *sqlite3Prima
21780 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65  ryKeyIndex(Table
21790 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43  *);.i16 sqlite3C
217a0 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64  olumnOfIndex(Ind
217b0 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20  ex*, i16);.void 
217c0 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
217d0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
217e0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
217f0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
21800 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
21810 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
21820 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
21830 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
21840 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21850 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
21860 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
21870 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
21880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
21890 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
218a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
218b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
218c0 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
218d0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
218e0 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
218f0 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
21900 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
21910 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
21920 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
21930 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21940 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
21950 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
21960 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
21970 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
21980 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
21990 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
219a0 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
219b0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
219c0 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
219d0 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
219e0 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
219f0 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
21a00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
21a10 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
21a20 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64  (Parse *);..#ifd
21a30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
21a40 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65  UILTIN_TEST.# de
21a50 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
21a60 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
21a70 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
21a80 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
21a90 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
21aa0 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
21ab0 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
21ac0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
21ad0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
21ae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
21af0 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
21b00 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
21b10 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
21b20 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
21b30 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
21b40 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
21b50 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
21b60 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
21b70 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c  itvec*);.int sql
21b80 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
21b90 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
21ba0 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
21bb0 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
21bc0 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73  te3*, void*, uns
21bd0 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64  igned int);.void
21be0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
21bf0 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f  ear(RowSet*);.vo
21c00 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
21c10 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
21c20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
21c30 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
21c40 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c  et*, int iBatch,
21c50 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
21c60 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77  e3RowSetNext(Row
21c70 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f  Set*, i64*);..vo
21c80 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
21c90 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65  View(Parse*,Toke
21ca0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
21cb0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74  ,Select*,int,int
21cc0 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
21cd0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
21ce0 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53  W) || !defined(S
21cf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21d00 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73  ALTABLE).  int s
21d10 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
21d20 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  umnNames(Parse*,
21d30 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
21d40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21d50 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
21d60 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a  s(A,B) 0.#endif.
21d70 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
21d80 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e  ATTACHED>30.  in
21d90 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41  t sqlite3DbMaskA
21da0 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b  llZero(yDbMask);
21db0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21dc0 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
21dd0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
21de0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21df0 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
21e00 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
21e10 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
21e20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
21e30 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
21e40 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
21e50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
21e60 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
21e70 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
21e80 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
21e90 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
21ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
21eb0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
21ec0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
21ed0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21ee0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
21ef0 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
21f00 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
21f10 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
21f20 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
21f30 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
21f40 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  rcList*, Select*
21f50 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
21f60 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
21f70 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
21f80 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
21f90 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
21fa0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
21fb0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
21fc0 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
21fd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
21fe0 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
21ff0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
22000 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
22010 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
22020 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
22030 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
22040 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
22050 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
22060 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
22070 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
22080 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22090 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
220a0 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
220b0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
220c0 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
220f0 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
22100 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
22110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
22120 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
22130 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
22140 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20  , Token *);.int 
22150 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
22160 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
22170 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
22180 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
22190 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
221a0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
221b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
221c0 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
221d0 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
221e0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
221f0 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
22200 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
22210 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22220 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
22230 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
22240 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
22250 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
22260 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
22270 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
22280 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72  Index *sqlite3Cr
22290 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
222a0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
222b0 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
222c0 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
222f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22300 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
22310 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22320 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
22330 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
22340 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
22350 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
22360 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
22370 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
22380 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
22390 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223b0 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
223c0 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c  List*,u16,Expr*,
223d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
223e0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
223f0 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
22400 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
22410 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
22420 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22430 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22440 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
22450 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
22460 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
22470 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
22480 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
22490 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
224a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
224b0 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
224c0 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
224d0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
224e0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
224f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
22500 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
22510 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
22520 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
22530 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
22540 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
22550 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
22560 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
22570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22580 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
22590 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
225a0 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
225b0 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
225c0 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
225d0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
225e0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
225f0 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
22600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
22610 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
22620 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57  *);.u64 sqlite3W
22630 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
22640 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
22650 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
22660 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
22670 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
22680 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
22690 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
226a0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
226b0 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
226c0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
226d0 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
226e0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
226f0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
22700 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
22710 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
22720 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
22730 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
22740 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22750 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
22760 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
22770 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
22780 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
22790 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
227a0 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
227b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
227c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
227d0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
227e0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
227f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22800 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
22810 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
22820 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
22830 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22840 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
22850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22860 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
22870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22880 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
22890 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
228a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
228b0 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
228c0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
228d0 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
228e0 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
228f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22900 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22910 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22920 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22930 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f  te3ExprCodeFacto
22940 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78  rable(Parse*, Ex
22950 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
22960 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
22970 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
22980 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  pr*, int, u8);.i
22990 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
229a0 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
229b0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
229c0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
229d0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
229e0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
229f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22a00 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
22a10 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
22a20 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22a30 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
22a40 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22a50 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53  , u8);.#define S
22a60 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20  QLITE_ECEL_DUP  
22a70 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65      0x01  /* Dee
22a80 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63  p, not shallow c
22a90 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  opies */.#define
22aa0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43   SQLITE_ECEL_FAC
22ab0 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46  TOR   0x02  /* F
22ac0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
22ad0 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64  nt terms */.void
22ae0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
22af0 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
22b00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22b10 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
22b20 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
22b30 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
22b40 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
22b50 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
22b60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
22b70 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
22b80 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
22b90 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
22ba0 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
22bb0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
22bc0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
22bd0 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
22be0 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
22bf0 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  w,struct SrcList
22c00 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
22c10 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
22c20 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
22c30 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
22c40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22c50 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
22c60 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
22c70 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
22c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
22c90 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
22ca0 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
22cb0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
22cc0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
22cd0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
22ce0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
22cf0 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
22d00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
22d10 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
22d20 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
22d30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
22d40 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
22d50 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
22d60 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
22d70 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
22d80 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
22d90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22da0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
22db0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
22dc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22dd0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
22de0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
22df0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
22e00 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
22e10 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
22e20 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
22e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
22e40 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
22e50 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
22e60 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
22e70 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
22e80 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
22e90 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
22ea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
22eb0 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
22ec0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
22ed0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
22ee0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
22ef0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
22f00 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
22f10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22f20 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
22f30 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
22f40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
22f50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
22f60 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
22f70 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
22f80 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
22f90 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
22fa0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22fb0 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
22fc0 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
22fd0 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
22fe0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
22ff0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
23000 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
23010 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
23020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
23030 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
23040 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
23050 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23060 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
23070 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
23080 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
23090 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
230a0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
230b0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
230c0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
230d0 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
230e0 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
230f0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23100 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
23110 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
23120 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
23130 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
23140 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
23150 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
23160 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
23170 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
23180 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
23190 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
231a0 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
231b0 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b  t,i16,u8,u8,u8);
231c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
231d0 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
231e0 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
231f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
23200 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23210 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
23220 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
23230 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
23240 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
23250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23260 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
23270 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
23280 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23290 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
232a0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
232b0 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
232c0 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
232f0 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
23300 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
23310 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
23320 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
23330 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
23340 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
23350 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
23360 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
23370 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
23380 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
23390 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
233a0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
233b0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
233c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
233d0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
233e0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
233f0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
23400 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23410 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
23420 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
23430 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
23440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
23450 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
23460 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
23470 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
23480 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
23490 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
234a0 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
234b0 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
234c0 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
234d0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
234e0 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
234f0 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
23500 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
23510 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
23520 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
23530 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
23540 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
23550 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
23560 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
23570 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
23580 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
23590 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
235a0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
235b0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
235c0 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
235d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
235e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
235f0 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
23600 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
23610 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
23620 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
23630 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
23640 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
23650 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
23660 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23670 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
23680 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
23690 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
236a0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
236b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
236c0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
236d0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
236e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
236f0 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
23700 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
23710 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
23720 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
23730 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
23740 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
23750 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
23760 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
23770 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
23780 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
23790 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
237a0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
237b0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
237c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
237d0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
237e0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
237f0 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
23800 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23810 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
23820 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
23830 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
23840 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
23850 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
23860 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
23890 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
238a0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
238b0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
238c0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
238d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
238e0 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
238f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
23900 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23910 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
23920 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
23930 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
23940 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
23950 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
23960 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
23970 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
23980 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
23990 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
239a0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
239b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
239c0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
239d0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
239e0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
239f0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
23a20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
23a30 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
23a40 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
23a50 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
23a60 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
23a70 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
23a80 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
23a90 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
23aa0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
23ab0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
23ac0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
23ad0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
23ae0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
23af0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
23b00 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
23b10 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
23b20 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
23b30 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
23b40 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
23b50 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
23b60 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
23b70 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
23ba0 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
23bb0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
23bc0 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
23bd0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
23be0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
23bf0 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
23c00 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
23c10 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
23c20 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
23c30 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
23c40 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
23c50 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
23c60 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
23c70 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23c80 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
23c90 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
23ca0 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
23cb0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
23cc0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
23cd0 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
23ce0 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
23cf0 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
23d00 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
23d10 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
23d20 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
23d30 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c  level : (p)).#el
23d40 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
23d50 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
23d60 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
23d70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
23d80 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
23d90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23da0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
23db0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
23dc0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
23dd0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
23de0 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
23df0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
23e00 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
23e10 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
23e20 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
23e30 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
23e40 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
23e50 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
23e60 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
23e70 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
23e80 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
23e90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
23ea0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
23eb0 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
23ec0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
23ed0 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
23ee0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
23ef0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
23f00 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
23f10 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
23f20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
23f30 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
23f40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23f50 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
23f60 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
23f70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23f80 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
23f90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
23fa0 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
23fb0 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
23fc0 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
23fd0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
23fe0 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
23ff0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24000 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
24010 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24020 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
24030 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
24040 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
24050 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24060 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
24070 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
24080 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
24090 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
240a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
240b0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
240c0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
240d0 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
240e0 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
240f0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
24100 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
24110 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
24120 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
24130 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
24140 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
24150 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
24160 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
24170 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
24180 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
24190 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
241a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
241b0 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
241c0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
241d0 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
241e0 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
241f0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
24200 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
24210 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
24220 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
24230 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
24240 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
24250 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
24260 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
24270 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
24280 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
24290 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
242a0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
242b0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
242c0 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
242d0 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
242e0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
242f0 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
24300 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
24310 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
24320 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
24330 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
24340 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
24350 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
24360 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
24370 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
24380 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
24390 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
243a0 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
243b0 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
243c0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
243d0 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
243e0 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
243f0 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
24400 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
24410 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
24420 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
24430 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
24440 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
24450 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
24460 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
24470 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
24480 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
24490 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
244a0 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
244b0 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
244c0 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
244d0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
244e0 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
244f0 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
24500 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
24510 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
24520 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
24530 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
24540 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
24550 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
24560 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
24570 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
24580 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
24590 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
245a0 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
245b0 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
245c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
245d0 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
245e0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
245f0 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
24600 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
24610 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
24620 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
24630 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
24640 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
24650 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
24660 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
24670 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
24680 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
24690 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
246a0 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
246b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
246c0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
246d0 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
246e0 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
246f0 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
24700 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
24710 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
24720 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
24730 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
24740 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
24750 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
24760 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
24770 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
24780 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
24790 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
247a0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
247b0 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
247c0 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
247d0 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
247e0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
247f0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
24800 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
24810 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24820 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
24830 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
24840 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
24850 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
24860 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
24870 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
24880 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
24890 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
248a0 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
248b0 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
248c0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
248d0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
248e0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
248f0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
24900 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
24910 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
24920 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
24930 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
24940 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
24950 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
24960 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
24970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
24980 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
24990 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
249a0 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
249b0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
249c0 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
249d0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
249e0 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
249f0 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
24a00 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
24a10 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
24a20 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
24a30 53 51 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f  SQLITE_TEST) .co
24a40 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
24a50 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
24a60 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
24a70 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
24a80 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
24a90 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
24aa0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
24ab0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
24ac0 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
24ad0 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
24ae0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
24af0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
24b00 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
24b10 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
24b20 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
24b30 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
24b40 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
24b50 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
24b60 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
24b70 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
24b80 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
24b90 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
24ba0 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
24bb0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
24bc0 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
24bd0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
24be0 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
24bf0 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
24c00 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
24c10 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
24c20 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
24c30 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
24c40 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
24c50 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
24c60 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
24c70 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
24c80 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
24c90 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
24ca0 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
24cb0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
24cc0 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
24cd0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
24ce0 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
24cf0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
24d00 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
24d10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24d20 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
24d30 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
24d40 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
24d50 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
24d60 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24d70 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
24d80 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
24d90 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
24da0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29  onst char *z,u8)
24db0 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
24dc0 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
24dd0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
24de0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24df0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
24e00 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
24e10 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
24e20 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
24e30 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
24e40 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20  st void *,u8, . 
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
24e70 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
24e80 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
24e90 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
24ea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
24eb0 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
24ec0 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
24ed0 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
24ee0 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
24ef0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
24f00 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
24f10 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
24f20 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
24f30 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
24f40 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
24f50 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
24f60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
24f70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
24f80 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
24f90 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
24fa0 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
24fb0 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
24fc0 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
24fd0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
24fe0 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
24ff0 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
25000 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
25010 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
25020 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
25030 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
25040 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
25050 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
25060 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
25070 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
25080 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
25090 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
250a0 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
250b0 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
250c0 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
250d0 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
250e0 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
250f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25100 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
25110 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
25120 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
25130 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
25140 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
25150 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
25160 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25170 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
25180 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
25190 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
251a0 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
251b0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
251c0 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
251d0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
251e0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
251f0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
25200 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
25210 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
25220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
25230 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
25240 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
25250 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
25260 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
25270 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
25280 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
25290 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
252a0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
252b0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
252c0 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
252d0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
252e0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
252f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
25300 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
25310 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25320 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
25330 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
25340 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
25350 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
25360 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
25370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
25380 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
25390 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
253a0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
253b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
253c0 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
253d0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
253e0 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
253f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25400 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
25410 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
25420 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
25430 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
25440 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
25450 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
25460 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
25470 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25480 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
25490 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
254a0 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
254b0 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
254c0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
254d0 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
254e0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
254f0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
25500 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
25510 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
25520 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
25530 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
25540 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  *, u8*);.void sq
25550 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
25560 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
25570 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
25580 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
25590 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
255a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
255b0 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
255c0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
255d0 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
255e0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
255f0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
25600 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
25610 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
25620 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
25630 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
25640 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
25650 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25660 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
25670 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
25680 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
25690 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
256a0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
256b0 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
256c0 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
256d0 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
256e0 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75  id sqlite3Minimu
256f0 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73  mFileFormat(Pars
25700 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
25710 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
25720 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
25730 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
25740 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
25750 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
25760 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
25770 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
25780 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
25790 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
257a0 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
257b0 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
257c0 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
257d0 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
257e0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
257f0 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
25800 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
25810 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
25820 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
25830 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20  Index*);.#ifdef 
25840 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
25850 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
25860 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
25870 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
25880 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
25890 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
258a0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
258b0 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20   int, void *, . 
258c0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
258d0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
258e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
258f0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
25900 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
25910 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
25920 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
25930 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
25940 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
25950 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
25960 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
25970 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
25980 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25990 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
259a0 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
259b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
259c0 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
259d0 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
259e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
259f0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
25a00 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
25a10 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
25a20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
25a30 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
25a40 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
25a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
25a60 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63  pendSpace(StrAcc
25a70 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a  um*,int);.char *
25a80 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
25a90 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
25aa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25ab0 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
25ac0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
25ad0 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
25ae0 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
25af0 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
25b00 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
25b10 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
25b20 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
25b30 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
25b40 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
25b50 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
25b60 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
25b70 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
25b80 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
25b90 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
25ba0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
25bb0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
25bc0 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
25bd0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
25be0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
25bf0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
25c00 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65  beSetValue(Parse
25c10 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
25c20 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
25c30 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  u8,int,int*);.in
25c40 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
25c50 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
25c60 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
25c70 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
25c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
25c90 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
25ca0 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
25cb0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
25cc0 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
25cd0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
25ce0 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
25cf0 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lue**);.#endif..
25d00 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
25d10 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
25d20 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
25d30 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
25d40 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
25d50 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f  id*(*)(u64));.vo
25d60 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
25d70 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
25d80 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
25d90 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
25da0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
25db0 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
25dc0 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
25dd0 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
25de0 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
25df0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
25e00 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
25e10 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
25e20 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
25e30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25e40 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
25e50 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
25e60 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
25e70 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
25e80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25e90 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
25ea0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
25eb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25ec0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
25ed0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
25ee0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
25ef0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
25f00 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
25f10 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25f20 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
25f30 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
25f40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
25f50 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
25f60 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
25f70 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
25f80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
25f90 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
25fa0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25fb0 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
25fc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25fd0 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
25fe0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
25ff0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
26000 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
26010 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
26020 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
26030 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
26040 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
26050 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
26060 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
26070 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
26080 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
26090 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
260a0 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
260b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
260c0 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
260d0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
260e0 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
260f0 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
26100 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
26110 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26120 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
26130 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
26140 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
26150 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
26160 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
26170 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
26180 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
26190 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
261a0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
261b0 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
261c0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
261d0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
261e0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
261f0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
26200 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
26210 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
26220 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
26230 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
26240 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
26250 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
26260 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
26270 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
26280 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
26290 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
262a0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
262b0 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
262c0 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
262d0 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
262e0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
262f0 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
26300 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
26310 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
26320 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
26330 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
26340 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26350 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
26360 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
26370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26380 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
26390 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
263a0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
263b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
263c0 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
263d0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
263e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
263f0 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
26400 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26410 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
26420 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
26430 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
26440 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
26450 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
26460 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
26470 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
26480 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
26490 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
264a0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
264b0 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
264c0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
264d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
264e0 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
264f0 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
26500 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
26510 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
26520 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
26530 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
26540 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
26550 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
26560 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
26570 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
26580 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
26590 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
265a0 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
265b0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
265c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
265d0 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
265e0 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
265f0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
26600 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
26610 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
26620 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
26630 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
26640 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
26650 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
26660 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
26670 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
26680 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
26690 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
266a0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
266b0 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
266c0 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
266d0 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
266e0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
266f0 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
26700 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
26710 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
26720 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
26730 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
26740 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
26750 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
26760 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
26770 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
26780 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
26790 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
267a0 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
267b0 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
267c0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
267d0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
267e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
267f0 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
26800 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
26810 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
26820 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
26830 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
26840 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
26850 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
26860 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
26870 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
26880 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
26890 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
268a0 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
268b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
268c0 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
268d0 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
268e0 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
268f0 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
26900 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
26910 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
26920 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
26930 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
26940 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
26950 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
26960 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
26970 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
26980 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
26990 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
269a0 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
269b0 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
269c0 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
269d0 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
269e0 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
269f0 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
26a00 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
26a10 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
26a20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
26a30 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65   .** provided (e
26a40 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
26a50 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
26a60 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
26a70 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
26a80 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
26a90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
26aa0 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
26ab0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26ac0 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
26ad0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
26ae0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
26af0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
26b00 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
26b10 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
26b20 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
26b30 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
26b40 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
26b50 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
26b60 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
26b70 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
26b80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
26b90 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
26ba0 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
26bb0 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
26bc0 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
26bd0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
26be0 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
26bf0 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
26c00 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
26c10 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
26c20 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
26c30 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26c40 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
26c50 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
26c60 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
26c70 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
26c80 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
26c90 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
26ca0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
26cb0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
26cc0 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65  a,b,c,d)    0.#e
26cd0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
26ce0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
26cf0 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
26d00 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
26d10 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
26d20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
26d30 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
26d40 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
26d50 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
26d60 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
26d70 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
26d80 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
26d90 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
26da0 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
26db0 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
26dc0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
26dd0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
26de0 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
26df0 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
26e00 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26e10 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
26e20 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
26e30 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
26e40 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
26e50 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
26e60 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
26e70 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
26e80 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
26e90 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
26ea0 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
26eb0 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
26ec0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
26ed0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
26ee0 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  EST.** is not de
26ef0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
26f00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
26f10 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69  ILTIN_TEST.  voi
26f20 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
26f30 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
26f40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26f50 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
26f60 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
26f70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
26f80 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
26f90 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26fa0 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
26fb0 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
26fc0 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
26fd0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
26fe0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
26ff0 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
27000 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
27010 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
27020 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
27030 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
27040 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
27050 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
27060 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
27070 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
27080 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27090 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
270a0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
270b0 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
270c0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
270d0 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
270e0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
270f0 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
27100 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27110 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
27120 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
27130 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
27140 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
27150 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
27160 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
27170 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
27180 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
27190 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
271a0 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
271b0 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
271c0 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
271d0 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
271e0 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
271f0 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
27200 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
27210 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
27220 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
27230 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
27240 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
27250 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
27260 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
27270 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
27280 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
27290 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
272a0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
272b0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
272c0 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
272d0 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
272e0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
272f0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
27300 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
27310 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
27320 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
27330 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
27340 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
27350 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
27360 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69  te3_file *);.  i
27370 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
27380 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f  lExists(sqlite3_
27390 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a  file *p);.#else.
273a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
273b0 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66  3JournalSize(pVf
273c0 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73  s) ((pVfs)->szOs
273d0 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20  File).  #define 
273e0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
273f0 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66  ists(p) 1.#endif
27400 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ..void sqlite3Me
27410 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
27420 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e  ite3_file *);.in
27430 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  t sqlite3MemJour
27440 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69  nalSize(void);.i
27450 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a  nt sqlite3IsMemJ
27460 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66  ournal(sqlite3_f
27470 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c  ile *);..#if SQL
27480 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
27490 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69  TH>0.  void sqli
274a0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
274b0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
274c0 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20  Expr *p);.  int 
274d0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
274e0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
274f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
27500 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
27510 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
27520 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27530 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
27540 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ht(x,y).  #defin
27550 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
27560 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
27570 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27580 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
27590 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
275a0 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
275b0 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
275c0 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
275d0 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
275e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
275f0 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
27600 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
27610 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
27620 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
27630 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
27640 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
27650 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
27660 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
27670 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
27680 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
27690 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
276a0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
276b0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
276c0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
276d0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
276e0 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
276f0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27700 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
27710 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
27720 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
27730 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
27740 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
27750 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
27760 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
27770 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
27780 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
27790 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
277a0 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
277b0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
277c0 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
277d0 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
277e0 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
277f0 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a  ing messages. .*
27800 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27810 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23  ENABLE_IOTRACE.#
27820 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
27830 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  A)  if( sqlite3I
27840 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65  oTrace ){ sqlite
27850 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20  3IoTrace A; }.  
27860 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
27870 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a  IOTraceSql(Vdbe*
27880 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  );.SQLITE_EXTERN
27890 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49   void (*sqlite3I
278a0 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
278b0 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
278c0 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
278d0 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
278e0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
278f0 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
27900 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
27910 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
27920 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
27930 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
27940 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
27950 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
27960 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
27970 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
27980 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
27990 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
279a0 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
279b0 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
279c0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
279d0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
279e0 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
279f0 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
27a00 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
27a10 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
27a20 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
27a30 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
27a40 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
27a50 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
27a60 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
27a70 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
27a80 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
27a90 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
27aa0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
27ab0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
27ac0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
27ad0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
27ae0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
27af0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
27b00 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
27b10 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
27b20 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
27b30 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
27b40 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
27b50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
27b60 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
27b70 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
27b80 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
27b90 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
27ba0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
27bb0 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
27bc0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
27bd0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
27be0 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
27bf0 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
27c00 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
27c10 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
27c20 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
27c30 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
27c40 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
27c50 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
27c60 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
27c70 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
27c80 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
27c90 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
27ca0 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
27cb0 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
27cc0 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
27cd0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
27ce0 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
27cf0 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
27d00 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
27d10 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
27d20 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
27d30 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
27d40 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
27d50 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
27d60 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
27d70 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
27d80 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
27d90 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
27da0 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
27db0 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
27dc0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
27dd0 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
27de0 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
27df0 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c  raint. .**.** Al
27e00 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
27e10 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
27e20 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
27e30 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
27e40 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
27e50 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
27e60 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
27e70 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
27e80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
27e90 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
27ea0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27eb0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
27ec0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
27ed0 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
27ee0 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
27ef0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
27f00 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
27f10 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
27f20 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27f30 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
27f40 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
27f50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27f60 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
27f70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
27f80 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
27f90 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
27fa0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
27fb0 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
27fc0 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
27fd0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
27fe0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
27ff0 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
28000 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65  * Might have bee
28010 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  n lookaside memo
28020 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ry */.#define ME
28030 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
28040 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
28050 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
28060 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
28070 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
28080 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
28090 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
280a0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44  define MEMTYPE_D
280b0 42 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  B         0x10  
280c0 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44  /* Uses sqlite3D
280d0 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c  bMalloc, not sql
280e0 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 2f  ite_malloc */../
280f0 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69  *.** Threading i
28100 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20  nterface.*/.#if 
28110 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
28120 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20  R_THREADS>0.int 
28130 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65  sqlite3ThreadCre
28140 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64  ate(SQLiteThread
28150 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64  **,void*(*)(void
28160 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *),void*);.int s
28170 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e  qlite3ThreadJoin
28180 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20  (SQLiteThread*, 
28190 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  void**);.#endif.
281a0 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
281b0 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.