/ Hex Artifact Content
Login

Artifact 6fd801cac974d310949ddefd6a6c6982c9778f3f:


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 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
5bf0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
5c00: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
5c10: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
5c20: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
5c30: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
5c40: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
5c50: 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65  ndle. .**.** The
5c60: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
5c70: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
5c80: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
5c90: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
5ca0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
5cb0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
5cc0: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
5cd0: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
5ce0: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
5cf0: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
5d00: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
5d10: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
5d20: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
5d30: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
5d40: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
5d50: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
5d60: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
5d70: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
5d80: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
5d90: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
5da0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
5db0: 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69  *xFunc)(void *,i
5dc0: 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73  nt);  /* The bus
5dd0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
5de0: 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20  void *pArg;     
5df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
5e00: 72 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20  rst arg to busy 
5e10: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
5e20: 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20  t nBusy;        
5e30: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
5e40: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
5e50: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d  h busy call */.}
5e60: 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66  ;../*.** Name of
5e70: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
5e80: 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65  base table.  The
5e90: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
5ea0: 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73   table.** is a s
5eb0: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61  pecial table tha
5ec0: 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
5ed0: 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73  s and attributes
5ee0: 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20   of all.** user 
5ef0: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
5f00: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
5f10: 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20  ASTER_NAME      
5f20: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
5f30: 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41  .#define TEMP_MA
5f40: 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69  STER_NAME  "sqli
5f50: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a  te_temp_master".
5f60: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d  ./*.** The root-
5f70: 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74  page of the mast
5f80: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
5f90: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  e..*/.#define MA
5fa0: 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20  STER_ROOT       
5fb0: 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d  1../*.** The nam
5fc0: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  e of the schema 
5fd0: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
5fe0: 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78  e SCHEMA_TABLE(x
5ff0: 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44  )  ((!OMIT_TEMPD
6000: 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f  B)&&(x==1)?TEMP_
6010: 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54  MASTER_NAME:MAST
6020: 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20  ER_NAME)../*.** 
6030: 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61  A convenience ma
6040: 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73  cro that returns
6050: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
6060: 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e  lements in.** an
6070: 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69   array..*/.#defi
6080: 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20  ne ArraySize(X) 
6090: 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66     ((int)(sizeof
60a0: 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29  (X)/sizeof(X[0])
60b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  ))../*.** Determ
60c0: 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d  ine if the argum
60d0: 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f  ent is a power o
60e0: 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65  f two.*/.#define
60f0: 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29   IsPowerOfTwo(X)
6100: 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d   (((X)&((X)-1))=
6110: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  =0)../*.** The f
6120: 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61  ollowing value a
6130: 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d  s a destructor m
6140: 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69  eans to use sqli
6150: 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20  te3DbFree()..** 
6160: 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  The sqlite3DbFre
6170: 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75  e() routine requ
6180: 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74  ires two paramet
6190: 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74  ers instead of t
61a0: 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  he .** one param
61b0: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
61c0: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
61d0: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
61e0: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a   to introduce .*
61f0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
6200: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
6210: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
6220: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
6230: 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  ny .** pointer w
6240: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
6250: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
6260: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
6270: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
6280: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
6290: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
62a0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
62b0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
62c0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
62d0: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
62e0: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
62f0: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
6300: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
6310: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
6320: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
6330: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
6340: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
6350: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
6360: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
6370: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
6380: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
6390: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
63a0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
63b0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
63c0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
63d0: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
63e0: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
63f0: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
6400: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
6410: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
6420: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
6430: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
6440: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
6450: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
6460: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
6470: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
6480: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
6490: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
64a0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
64b0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
64c0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
64d0: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
64e0: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
64f0: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
6500: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
6510: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
6520: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
6530: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
6540: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
6550: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
6560: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
6570: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
6580: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
6590: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
65a0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
65b0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
65c0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
65d0: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
65e0: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
65f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
6600: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
6610: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
6620: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
6630: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
6640: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
6650: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
6660: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
6670: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
6680: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
6690: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
66a0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
66b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
66c0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
66d0: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
66e0: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
66f0: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
6700: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
6710: 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66  LITE_WSD .  #def
6720: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
6730: 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  v.  #define sqli
6740: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
6750: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65  sqlite3Config.#e
6760: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
6770: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
6780: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70   are used to sup
6790: 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77  press compiler w
67a0: 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a  arnings and to.*
67b0: 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20  * make it clear 
67c0: 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  to human readers
67d0: 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   when a function
67e0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65   parameter is de
67f0: 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c  liberately .** l
6800: 65 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69  eft unused withi
6810: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
6820: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75  function. This u
6830: 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77  sually happens w
6840: 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f  hen.** a functio
6850: 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20  n is called via 
6860: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
6870: 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  er. For example 
6880: 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  the .** implemen
6890: 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  tation of an SQL
68a0: 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20   aggregate step 
68b0: 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74  callback may not
68c0: 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61   use the.** para
68d0: 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67  meter indicating
68e0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
68f0: 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
6900: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
6910: 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73  ,.** if it knows
6920: 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e   that this is en
6930: 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65  forced elsewhere
6940: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66  ..**.** When a f
6950: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
6960: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74  r is not used at
6970: 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20   all within the 
6980: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
6990: 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e  on,.** it is gen
69a0: 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f  erally named "No
69b0: 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73  tUsed" or "NotUs
69c0: 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69  ed2" to make thi
69d0: 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72  ngs even clearer
69e0: 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68  ..** However, th
69f0: 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61  ese macros may a
6a00: 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73  lso be used to s
6a10: 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73  uppress warnings
6a20: 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70   related to.** p
6a30: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d  arameters that m
6a40: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ay or may not be
6a50: 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20   used depending 
6a60: 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  on compilation o
6a70: 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65  ptions..** For e
6a80: 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72  xample those par
6a90: 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65  ameters only use
6aa0: 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74  d in assert() st
6ab0: 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65  atements. In the
6ac0: 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20  se.** cases the 
6ad0: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e  parameters are n
6ae0: 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20  amed as per the 
6af0: 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e  usual convention
6b00: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  s..*/.#define UN
6b10: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78  USED_PARAMETER(x
6b20: 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66  ) (void)(x).#def
6b30: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
6b40: 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45  ETER2(x,y) UNUSE
6b50: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55  D_PARAMETER(x),U
6b60: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
6b70: 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72  y)../*.** Forwar
6b80: 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  d references to 
6b90: 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79  structures.*/.ty
6ba0: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67  pedef struct Agg
6bb0: 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79  Info AggInfo;.ty
6bc0: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
6bd0: 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e  hContext AuthCon
6be0: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
6bf0: 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
6c00: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79   AutoincInfo;.ty
6c10: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74  pedef struct Bit
6c20: 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65  vec Bitvec;.type
6c30: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53  def struct CollS
6c40: 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65  eq CollSeq;.type
6c50: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d  def struct Colum
6c60: 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65  n Column;.typede
6c70: 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a  f struct Db Db;.
6c80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
6c90: 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79  chema Schema;.ty
6ca0: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
6cb0: 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20  r Expr;.typedef 
6cc0: 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
6cd0: 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65  ExprList;.typede
6ce0: 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61  f struct ExprSpa
6cf0: 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65  n ExprSpan;.type
6d00: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
6d10: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
6d20: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
6d30: 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74  tor FuncDestruct
6d40: 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  or;.typedef stru
6d50: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
6d60: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
6d70: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46  ct FuncDefHash F
6d80: 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65  uncDefHash;.type
6d90: 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73  def struct IdLis
6da0: 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65  t IdList;.typede
6db0: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49  f struct Index I
6dc0: 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74  ndex;.typedef st
6dd0: 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
6de0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79   IndexSample;.ty
6df0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
6e00: 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a  Class KeyClass;.
6e10: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
6e20: 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a  eyInfo KeyInfo;.
6e30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
6e40: 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69  ookaside Lookasi
6e50: 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  de;.typedef stru
6e60: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
6e70: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a   LookasideSlot;.
6e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d  typedef struct M
6e90: 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79  odule Module;.ty
6ea0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d  pedef struct Nam
6eb0: 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e  eContext NameCon
6ec0: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
6ed0: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
6ee0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6ef0: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
6f00: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
6f10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6f20: 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a   RowSet RowSet;.
6f30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
6f40: 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69  avepoint Savepoi
6f50: 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  nt;.typedef stru
6f60: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
6f70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6f80: 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51   SQLiteThread SQ
6f90: 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65  LiteThread;.type
6fa0: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
6fb0: 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74  tDest SelectDest
6fc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6fd0: 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74   SrcList SrcList
6fe0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6ff0: 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63   StrAccum StrAcc
7000: 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  um;.typedef stru
7010: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
7020: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7030: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
7040: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
7050: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
7060: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7070: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
7080: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7090: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
70a0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
70b0: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
70c0: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
70d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
70e0: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
70f0: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
7100: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
7110: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
7120: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
7130: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
7140: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
7150: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
7160: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
7170: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
7180: 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20  def struct With 
7190: 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  With;../*.** Def
71a0: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
71b0: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
71c0: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
71d0: 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73  u8" and .** "Bus
71e0: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
71f0: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
7200: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
7210: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
7220: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
7230: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
7240: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
7250: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
7260: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
7270: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
7280: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
7290: 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63  "pcache.h"..#inc
72a0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
72b0: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
72c0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
72d0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
72e0: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
72f0: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
7300: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
7310: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
7320: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
7330: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
7340: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
7350: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
7360: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
7370: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
7380: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
7390: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
73a0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
73b0: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
73c0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
73d0: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
73e0: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
73f0: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
7400: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
7410: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
7420: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
7430: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
7440: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
7450: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
7460: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
7470: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
7480: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
7490: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
74a0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
74b0: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
74c0: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
74d0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
74e0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
74f0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
7500: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
7510: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
7520: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
7530: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7540: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
7550: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
7560: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
7570: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
7580: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
7590: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
75a0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
75b0: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
75c0: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
75d0: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
75e0: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
75f0: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
7600: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
7610: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
7620: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
7630: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
7640: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
7650: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
7660: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
7670: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
7680: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
7690: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
76a0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
76b0: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
76c0: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
76d0: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
76e0: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
76f0: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
7700: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
7710: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
7720: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
7730: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
7740: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7750: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
7760: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
7770: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
7780: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
7790: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
77a0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
77b0: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
77c0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
77d0: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
77e0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
77f0: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
7800: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
7810: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
7820: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
7830: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
7840: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
7850: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
7860: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
7870: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
7880: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
7890: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
78a0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
78b0: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
78c0: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
78d0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
78e0: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
78f0: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
7900: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
7910: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7920: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
7930: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
7940: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
7950: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7960: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
7970: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
7980: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
7990: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
79a0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
79b0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
79c0: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
79d0: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
79e0: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
79f0: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
7a00: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
7a10: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
7a20: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
7a30: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
7a40: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
7a50: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
7a60: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
7a70: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
7a80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
7a90: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
7aa0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
7ab0: 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d  e */.  u16 schem
7ac0: 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46  aFlags;     /* F
7ad0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
7ae0: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
7af0: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
7b00: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
7b10: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
7b20: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
7b30: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
7b40: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
7b50: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
7b60: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
7b70: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
7b80: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
7b90: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
7ba0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
7bb0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
7bc0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7bd0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
7be0: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
7bf0: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
7c00: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
7c10: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7c20: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
7c30: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
7c40: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
7c50: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
7c60: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
7c70: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
7c80: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
7c90: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
7ca0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
7cb0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
7cc0: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
7cd0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
7ce0: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
7cf0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
7d00: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
7d10: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
7d20: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
7d30: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
7d40: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
7d50: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
7d60: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
7d70: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
7d80: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
7d90: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
7da0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
7db0: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
7dc0: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
7dd0: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
7de0: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
7df0: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
7e00: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
7e10: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
7e20: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
7e30: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
7e40: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
7e50: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
7e60: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
7e70: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
7e80: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
7e90: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
7ea0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
7eb0: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
7ec0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
7ed0: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
7ee0: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
7ef0: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
7f00: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
7f10: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
7f20: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
7f30: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
7f40: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
7f50: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
7f60: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
7f70: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
7f80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
7f90: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
7fa0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
7fb0: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
7fc0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
7fd0: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
7fe0: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
7ff0: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
8000: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
8010: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
8020: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
8030: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
8040: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
8050: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
8060: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
8070: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
8080: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
8090: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
80a0: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
80b0: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
80c0: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
80d0: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
80e0: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
80f0: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
8100: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
8110: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
8120: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
8130: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
8140: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
8150: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
8160: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
8170: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
8180: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
8190: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
81a0: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
81b0: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
81c0: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
81d0: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
81e0: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
81f0: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
8200: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
8210: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8220: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
8230: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
8240: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
8250: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
8260: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
8270: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
8280: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
8290: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
82a0: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
82b0: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
82c0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
82d0: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
82e0: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
82f0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
8300: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8310: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
8320: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
8330: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
8340: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
8350: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
8360: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
8370: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
8380: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
8390: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
83a0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
83b0: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
83c0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
83d0: 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20   {.  u16 sz;    
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
83f0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
8400: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
8410: 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20    u8 bEnabled;  
8420: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c            /* Fal
8430: 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65  se to disable ne
8440: 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  w lookaside allo
8450: 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  cations */.  u8 
8460: 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20  bMalloced;      
8470: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
8480: 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20  pStart obtained 
8490: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
84a0: 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  loc() */.  int n
84b0: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
84c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
84d0: 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c  buffers currentl
84e0: 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
84f0: 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20  .  int mxOut;   
8500: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69             /* Hi
8510: 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72  ghwater mark for
8520: 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61   nOut */.  int a
8530: 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20  nStat[3];       
8540: 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20     /* 0: hits.  
8550: 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20  1: size misses. 
8560: 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20   2: full misses 
8570: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
8580: 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20  ot *pFree;   /* 
8590: 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c  List of availabl
85a0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  e buffers */.  v
85b0: 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20  oid *pStart;    
85c0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
85d0: 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c  byte of availabl
85e0: 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a  e memory space *
85f0: 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20  /.  void *pEnd; 
8600: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
8610: 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65  irst byte past e
8620: 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  nd of available 
8630: 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75  space */.};.stru
8640: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
8650: 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c   {.  LookasideSl
8660: 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a  ot *pNext;    /*
8670: 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20   Next buffer in 
8680: 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65  the list of free
8690: 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a   buffers */.};..
86a0: 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62  /*.** A hash tab
86b0: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20  le for function 
86c0: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a  definitions..**.
86d0: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
86e0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
86f0: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
8700: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
8710: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
8720: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
8730: 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61  uncDef.pHash cha
8740: 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  in..*/.struct Fu
8750: 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75  ncDefHash {.  Fu
8760: 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20  ncDef *a[23];   
8770: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
8780: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
8790: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
87a0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
87b0: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
87c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
87d0: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
87e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
87f0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
8800: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
8810: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
8820: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
8830: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
8840: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
8850: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
8860: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
8870: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
8880: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
8890: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
88a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
88b0: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
88c0: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
88d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
88e0: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
88f0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
8900: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
8910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
8920: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
8930: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
8940: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
8950: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
8960: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
8970: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8980: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
8990: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
89a0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
89b0: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
89c0: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
89d0: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
89e0: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
89f0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
8a00: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8a10: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
8a20: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
8a30: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
8a40: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8a50: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
8a60: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
8a70: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
8a80: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
8a90: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
8aa0: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
8ab0: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
8ac0: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
8ad0: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
8ae0: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
8af0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
8b00: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
8b10: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
8b20: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
8b30: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
8b40: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
8b50: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
8b60: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
8b70: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
8b80: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
8b90: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
8ba0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
8bb0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
8bc0: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
8bd0: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
8be0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
8bf0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
8c00: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
8c10: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
8c20: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
8c30: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
8c40: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
8c50: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
8c60: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
8c70: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
8c80: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
8c90: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
8cc0: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
8cd0: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
8ce0: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
8cf0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
8d00: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
8d10: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8d20: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d40: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
8d50: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  har*);.#endif...
8d60: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
8d70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
8d80: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
8d90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
8da0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
8db0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
8dc0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
8dd0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
8de0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
8df0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
8e00: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
8e10: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
8e20: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
8e30: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
8e40: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
8e50: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
8e60: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
8e70: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
8e80: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
8e90: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
8ea0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
8eb0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
8ec0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8ee0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
8ef0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8f10: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
8f20: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
8f30: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
8f40: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
8f50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
8f60: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
8f70: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
8f80: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8fa0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
8fb0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
8fc0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
8fd0: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
8ff0: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
9000: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
9010: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
9020: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
9030: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
9040: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
9050: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
9060: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
9070: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
9080: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
9090: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
90a0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
90c0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
90d0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
90e0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
90f0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9110: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
9120: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
9130: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
9140: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
9150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
9160: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
9170: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
9180: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
9190: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
91a0: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
91b0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
91c0: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
91d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
91e0: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
91f0: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
9200: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
9210: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
9220: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
9230: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
9240: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
9250: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
9260: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
9270: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
9280: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
9290: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
92a0: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
92b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
92c0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
92d0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
92e0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
92f0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
9300: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
9310: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
9320: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
9330: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
9340: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
9350: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
9360: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
9370: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
9380: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
9390: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
93a0: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
93b0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
93c0: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
93d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
93e0: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
93f0: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
9400: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
9410: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9430: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
9440: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
9450: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
9460: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
9470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
9480: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
9490: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
94a0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
94b0: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
94c0: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
94d0: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
94e0: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
94f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
9500: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
9510: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
9520: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
9530: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
9540: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
9550: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
9560: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
9570: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
9580: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
9590: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
95a0: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
95b0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
95c0: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
95e0: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
95f0: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
9600: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
9610: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
9620: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
9630: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
9640: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
9650: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
9660: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
9670: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
9680: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
9690: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
96a0: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
96b0: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
96c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
96d0: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
96e0: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
96f0: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9710: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
9720: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
9730: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
9740: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9760: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
9770: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
9780: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
9790: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
97b0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
97c0: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
97d0: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
97e0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
97f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9800: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
9810: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
9820: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
9830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9840: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
9850: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
9860: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
9870: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
9880: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
9890: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
98a0: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
98b0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
98d0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
98e0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
98f0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
9900: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
9910: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
9920: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
9930: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9940: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9960: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9970: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
9980: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
9990: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
99a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
99b0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
99c0: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
99d0: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
99e0: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
99f0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
9a00: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9a10: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
9a20: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
9a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9a40: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
9a50: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
9a60: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
9a70: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
9a80: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
9a90: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9aa0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
9ab0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
9ac0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
9ad0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
9ae0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9af0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
9b00: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
9b10: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
9b20: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
9b30: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
9b40: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
9b50: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
9b60: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
9b70: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
9b80: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
9b90: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
9ba0: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
9bb0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9bc0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
9bd0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
9be0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
9bf0: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
9c00: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
9c10: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
9c20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
9c30: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
9c40: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
9c50: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
9c60: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
9c70: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
9c80: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
9c90: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
9ca0: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
9cb0: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
9cc0: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
9cd0: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
9ce0: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
9cf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
9d00: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
9d10: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
9d20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9d30: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
9d40: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
9d50: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
9d60: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
9d70: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
9d80: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
9d90: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
9da0: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
9db0: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
9dc0: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
9dd0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
9de0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
9df0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
9e00: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
9e10: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
9e20: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
9e30: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
9e40: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
9e50: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
9e60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
9e70: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
9e80: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
9e90: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
9ea0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9eb0: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
9ec0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
9ed0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9ee0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
9ef0: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
9f00: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
9f10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9f20: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
9f30: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
9f40: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
9f50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
9f60: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
9f70: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
9f80: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
9f90: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
9fa0: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
9fb0: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
9fc0: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
9fd0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
9fe0: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
9ff0: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
a000: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
a010: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
a020: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
a030: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
a040: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
a050: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
a060: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
a070: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
a080: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
a090: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
a0a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
a0b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
a0c0: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
a0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
a0e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
a0f0: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
a100: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
a110: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
a120: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
a130: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
a140: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
a150: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
a160: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
a170: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
a180: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
a190: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
a1a0: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
a1b0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
a1c0: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
a1d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
a1e0: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
a1f0: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
a200: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a220: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
a230: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
a240: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
a250: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
a260: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a270: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
a280: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
a290: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
a2a0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
a2b0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
a2c0: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
a2d0: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
a2e0: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
a2f0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
a300: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
a310: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
a320: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
a330: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
a340: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
a350: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
a360: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
a370: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
a380: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
a390: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
a3a0: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
a3b0: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
a3c0: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
a3d0: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
a3e0: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
a3f0: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
a400: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
a410: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
a420: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
a430: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
a440: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
a450: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
a460: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
a470: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
a480: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
a490: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
a4a0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
a4b0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
a4c0: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
a4d0: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
a4e0: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
a4f0: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
a500: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
a510: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
a520: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
a530: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
a540: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
a550: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
a560: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
a570: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
a580: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
a590: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
a5a0: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
a5b0: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
a5c0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
a5d0: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
a5e0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
a5f0: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a610: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
a620: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
a630: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
a640: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
a650: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
a660: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
a670: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
a680: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
a690: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
a6a0: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
a6b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
a6c0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
a6d0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
a6e0: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
a6f0: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
a700: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
a710: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
a720: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
a730: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
a740: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
a750: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
a760: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
a770: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  */.#define ENC(d
a780: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
a790: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a  .pSchema->enc)..
a7a0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
a7b0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
a7c0: 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a  lite3.flags..*/.
a7d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
a7e0: 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78  dbeTrace      0x
a7f0: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75  00000001  /* Tru
a800: 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20  e to trace VDBE 
a810: 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65  execution */.#de
a820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65  fine SQLITE_Inte
a830: 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30  rnChanges  0x000
a840: 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d  00002  /* Uncomm
a850: 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65  itted Hash table
a860: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
a870: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
a880: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
a890: 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c  0004  /* Use ful
a8a0: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
a8b0: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
a8c0: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
a8d0: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
a8e0: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
a8f0: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
a900: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
a910: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
a920: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30  l     0x00000010
a930: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
a940: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
a950: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a960: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
a970: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f  00000020  /* Sho
a980: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
a990: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
a9a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a9b0: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
a9c0: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
a9d0: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
a9e0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
a9f0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
aa00: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
aa10: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
aa20: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
aa30: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
aa70: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
aa80: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
aac0: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
aad0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
aae0: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
aaf0: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
ab00: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
ab10: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
ab20: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ab50: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
ab60: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
ab70: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
ab80: 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30  ce       0x00000
ab90: 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72  200  /* Debug pr
aba0: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
abb0: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
abc0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
abd0: 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34  ting    0x000004
abe0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  00  /* Debug lis
abf0: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
ac00: 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e  ograms */.#defin
ac10: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
ac20: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38  hema    0x000008
ac30: 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  00  /* OK to upd
ac40: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
ac50: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
ac60: 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61  ITE_VdbeAddopTra
ac70: 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f  ce 0x00001000  /
ac80: 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56  * Trace sqlite3V
ac90: 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73  dbeAddOp() calls
aca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
acb0: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
acc0: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
acd0: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
ace0: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
acf0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ad00: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
ad10: 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f  ted 0x0004000  /
ad20: 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63  * For shared-cac
ad30: 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69  he mode */.#defi
ad40: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
ad50: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38  FileFmt  0x00008
ad60: 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  000  /* Create n
ad70: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
ad80: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
ad90: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76  ine SQLITE_Recov
ada0: 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31  eryMode   0x0001
adb0: 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20  0000  /* Ignore 
adc0: 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f  schema errors */
add0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ade0: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
adf0: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65  x00020000  /* Re
ae00: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
ae10: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
ae20: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
ae30: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30  ggers    0x00040
ae40: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
ae50: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
ae60: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ae70: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
ae80: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
ae90: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
aea0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
aeb0: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
aec0: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
aed0: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
aee0: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
aef0: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
af00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
af10: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
af20: 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66  0200000  /* Pref
af30: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
af40: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
af50: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
af60: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30  xtension  0x0040
af70: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
af80: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
af90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
afa0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
afb0: 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54  0x00800000  /* T
afc0: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
afd0: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
afe0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
aff0: 73 20 20 20 20 20 20 20 30 78 30 31 30 30 30 30  s       0x010000
b000: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
b010: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
b020: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b030: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
b040: 20 30 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20   0x02000000  /* 
b050: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
b060: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
b070: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45  ine SQLITE_VdbeE
b080: 51 50 20 20 20 20 20 20 20 20 30 78 30 34 30 30  QP        0x0400
b090: 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45  0000  /* Debug E
b0a0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
b0b0: 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  N */.../*.** Bit
b0c0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
b0d0: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
b0e0: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
b0f0: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
b100: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
b110: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
b120: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
b130: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
b140: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
b150: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
b160: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
b170: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
b180: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
b190: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
b1a0: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
b1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
b1c0: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
b1d0: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
b1e0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
b1f0: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
b200: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
b210: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
b220: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
b230: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
b240: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
b250: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
b260: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
b290: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
b2a0: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
b2b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b2c0: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
b2d0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
b2e0: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
b2f0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
b300: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
b310: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
b320: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
b330: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
b340: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
b350: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
b360: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
b370: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
b380: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b390: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
b3a0: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
b3b0: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
b3c0: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
b3d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b3e0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
b3f0: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
b400: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
b410: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
b420: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
b430: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
b440: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
b450: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
b460: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
b470: 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30  at3          0x0
b480: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65  800   /* Use the
b490: 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61   SQLITE_STAT3 ta
b4a0: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
b4b0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
b4c0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
b4d0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
b4e0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
b4f0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
b500: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
b510: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
b520: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
b530: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
b540: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
b550: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
b560: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
b570: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
b580: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
b590: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
b5a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b5b0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
b5c0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
b5d0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
b5e0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
b5f0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
b600: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
b610: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
b620: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
b630: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
b640: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
b650: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
b660: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
b670: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
b680: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
b690: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
b6a0: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
b6b0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
b6c0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
b6d0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
b6e0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
b6f0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
b700: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
b710: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
b720: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
b730: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
b740: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
b750: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
b760: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
b770: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
b780: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
b790: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
b7a0: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
b7b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b7c0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
b7d0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
b7e0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
b7f0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
b800: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
b810: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
b820: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
b830: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
b840: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
b850: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
b860: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
b870: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
b880: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b890: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
b8a0: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
b8b0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
b8c0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
b8d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
b8e0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
b8f0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
b900: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
b910: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
b920: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
b930: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
b940: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
b950: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
b960: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
b970: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
b980: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
b990: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
b9a0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
b9b0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
b9c0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
b9d0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
b9e0: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
b9f0: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
ba00: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
ba10: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
ba20: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
ba30: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
ba40: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
ba50: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
ba60: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
ba70: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
ba80: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
ba90: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
baa0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
bab0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
bac0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
bad0: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
bae0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
baf0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
bb00: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
bb10: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
bb20: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
bb30: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
bb40: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
bb50: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
bb60: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
bb70: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
bb80: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
bb90: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
bba0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
bbb0: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
bbc0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
bbd0: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
bbe0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
bbf0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
bc00: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
bc10: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
bc20: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
bc30: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
bc40: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
bc50: 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a  gate finalizer *
bc60: 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
bc70: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
bc80: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
bc90: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44  tion. */.  FuncD
bca0: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
bcb0: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
bcc0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
bcd0: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
bce0: 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  */.  FuncDestruc
bcf0: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
bd00: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
bd10: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
bd20: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
bd30: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
bd40: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
bd50: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
bd60: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
bd70: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
bd80: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
bd90: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
bda0: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
bdb0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
bdc0: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
bdd0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
bde0: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
bdf0: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
be00: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
be10: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
be20: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
be30: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
be40: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
be50: 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20  f is set to .** 
be60: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
be70: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
be80: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
be90: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
bea0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
beb0: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
bec0: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
bed0: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
bee0: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
bef0: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
bf00: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
bf10: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
bf20: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
bf30: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
bf40: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
bf50: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
bf60: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
bf70: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
bf80: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
bf90: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
bfa0: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
bfb0: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
bfc0: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
bfd0: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
bfe0: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
bff0: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
c000: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
c010: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
c020: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
c030: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
c040: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
c050: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
c060: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
c070: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
c080: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
c090: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
c0a0: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
c0b0: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
c0c0: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
c0d0: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
c0e0: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
c0f0: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
c100: 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72  TYPEOFARG.  Ther
c110: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
c120: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
c130: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
c140: 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66  fy this..*/.#def
c150: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c160: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f  ENCMASK  0x003 /
c170: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
c180: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
c190: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
c1a0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c1b0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f  LIKE     0x004 /
c1c0: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
c1d0: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
c1e0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
c1f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
c200: 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43  E     0x008 /* C
c210: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
c220: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
c230: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c240: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
c250: 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65   0x010 /* Epheme
c260: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
c270: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
c280: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
c290: 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20  EDCOLL 0x020 /* 
c2a0: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
c2b0: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
c2c0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
c2d0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
c2e0: 45 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a  ENGTH   0x040 /*
c2f0: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
c300: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
c310: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c320: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38  NC_TYPEOF   0x08
c330: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
c340: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
c350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c360: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
c370: 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x100 /* Built-i
c380: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
c390: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
c3a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
c3b0: 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75  ESCE 0x200 /* Bu
c3c0: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
c3d0: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
c3e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c3f0: 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
c400: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
c410: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
c420: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c430: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
c440: 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e  ANT 0x800 /* Con
c450: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
c460: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
c470: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
c480: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
c490: 58 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75  X  0x1000 /* Tru
c4a0: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
c4b0: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
c4c0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
c4d0: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
c4e0: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
c4f0: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
c500: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
c510: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
c520: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
c530: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
c540: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
c550: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
c560: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c570: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c580: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
c590: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
c5a0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
c5b0: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
c5c0: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
c5d0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
c5e0: 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
c5f0: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
c600: 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
c610: 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
c620: 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
c630: 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
c640: 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
c650: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
c660: 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
c670: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
c680: 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
c690: 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20  ion. If .**     
c6a0: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
c6b0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
c6c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
c6d0: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
c6e0: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
c6f0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
c700: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
c710: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
c720: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
c730: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
c740: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
c750: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  flag..**.**   AG
c760: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
c770: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c780: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
c790: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c7a0: 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
c7b0: 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
c7c0: 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
c7d0: 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
c7e0: 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
c7f0: 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
c800: 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
c810: 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
c820: 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
c830: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
c840: 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
c850: 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
c860: 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
c870: 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28  *.**   LIKEFUNC(
c880: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
c890: 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20  g, flags).**    
c8a0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
c8b0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
c8c0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
c8d0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
c8e0: 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63   .**     that ac
c8f0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
c900: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
c910: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
c920: 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66  l to C .**     f
c930: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
c940: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
c950: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
c960: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
c970: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
c980: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
c990: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
c9a0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
c9b0: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
c9c0: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
c9d0: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
c9e0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
c9f0: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
ca00: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
ca10: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
ca20: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
ca30: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
ca40: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ca50: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
ca60: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
ca70: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ca80: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ca90: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
caa0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
cab0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
cac0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e   0}.#define VFUN
cad0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
cae0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
caf0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
cb00: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
cb10: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cb20: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
cb30: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
cb40: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
cb50: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
cb60: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
cb70: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
cb80: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cb90: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
cba0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
cbb0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
cbc0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
cbd0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cbe0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
cbf0: 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
cc00: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
cc10: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
cc20: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
cc30: 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49  efine STR_FUNCTI
cc40: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
cc50: 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  pArg, bNC, xFunc
cc60: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
cc70: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
cc80: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
cc90: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
cca0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
ccb0: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
ccc0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
ccd0: 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46  0}.#define LIKEF
cce0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
ccf0: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
cd00: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
cd10: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
cd20: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
cd30: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
cd40: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
cd50: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
cd60: 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  0}.#define AGGRE
cd70: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
cd80: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
cd90: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
cda0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
cdb0: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
cdc0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
cdd0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
cde0: 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78  TR(arg), 0, 0, x
cdf0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
ce00: 6d 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20  me,0,0}.#define 
ce10: 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65  AGGREGATE2(zName
ce20: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
ce30: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
ce40: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
ce50: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
ce60: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
ce70: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
ce80: 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
ce90: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
cea0: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
ceb0: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
cec0: 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  0,0}../*.** All 
ced0: 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
cee0: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
cef0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
cf00: 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
cf10: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
cf20: 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
cf30: 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
cf40: 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
cf50: 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
cf60: 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
cf70: 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
cf80: 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
cf90: 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
cfa0: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
cfb0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
cfc0: 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
cfd0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
d000: 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
d010: 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
d020: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d030: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d040: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
d050: 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
d060: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d070: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d080: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d090: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
d0a0: 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
d0b0: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0d0: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
d0e0: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
d0f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
d100: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
d110: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
d120: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
d130: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
d140: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
d150: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
d160: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
d170: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
d180: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
d190: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
d1a0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
d1b0: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
d1c0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
d1d0: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
d1e0: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
d1f0: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
d200: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
d210: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
d220: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
d230: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d240: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
d250: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
d260: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
d270: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
d280: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
d290: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
d2a0: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
d2b0: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
d2c0: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
d2d0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
d300: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
d310: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
d320: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
d330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
d340: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
d350: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d360: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
d370: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
d380: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
d390: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
d3a0: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
d3b0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
d3c0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d3d0: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
d3e0: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
d3f0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
d400: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
d410: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
d420: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d430: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
d440: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
d450: 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
d460: 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
d470: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
d480: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c   */.  char *zDfl
d490: 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e  t;     /* Origin
d4a0: 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64  al text of the d
d4b0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
d4c0: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
d4d0: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
d4e0: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
d4f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
d500: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
d510: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
d520: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
d530: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
d540: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
d550: 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
d560: 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
d570: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
d580: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
d590: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
d5a0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
d5b0: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
d5c0: 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
d5d0: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
d5e0: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
d5f0: 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38    INT==1 */.  u8
d600: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
d610: 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
d620: 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
d630: 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
d640: 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
d650: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
d660: 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
d670: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
d680: 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
d690: 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
d6a0: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
d6b0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
d6c0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
d6d0: 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
d6e0: 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
d6f0: 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
d700: 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
d710: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
d720: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
d730: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
d740: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
d750: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
d760: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
d770: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
d780: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
d790: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
d7a0: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
d7b0: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
d7c0: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
d7d0: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
d7e0: 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
d7f0: 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
d800: 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
d810: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d820: 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
d830: 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
d840: 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
d850: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
d860: 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
d870: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
d880: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
d890: 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
d8a0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
d8b0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
d8c0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
d8d0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
d8e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
d8f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
d900: 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
d910: 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
d920: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
d930: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
d940: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
d950: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
d960: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
d970: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
d980: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
d990: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
d9a0: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
d9b0: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
d9c0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
d9d0: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
d9e0: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
d9f0: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
da00: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
da10: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
da20: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
da30: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
da40: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
da50: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
da60: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
da70: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
da80: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
da90: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
daa0: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
dab0: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
dac0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
dad0: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
dae0: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
daf0: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
db00: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
db10: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
db20: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
db30: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
db40: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
db50: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
db60: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
db70: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
db80: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
db90: 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
dba0: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
dbb0: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
dbc0: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
dbd0: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
dbe0: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
dbf0: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
dc00: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
dc10: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
dc20: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
dc30: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
dc40: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
dc50: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
dc60: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
dc70: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
dc80: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
dc90: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
dca0: 64 20 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20  d the NONE type 
dcb0: 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
dcc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
dcd0: 4e 4f 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65  NONE     'A'.#de
dce0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
dcf0: 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
dd00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
dd10: 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
dd20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
dd30: 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
dd40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
dd50: 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
dd60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
dd70: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
dd80: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
dd90: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
dda0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ddb0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
ddc0: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
ddd0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
dde0: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
ddf0: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
de00: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
de10: 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a  SK     0x47../*.
de20: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
de30: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
de40: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
de50: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
de60: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
de70: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a  he affinity..**.
de80: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  ** The SQLITE_NO
de90: 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20  TNULL flag is a 
dea0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e  combination of N
deb0: 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46  ULLEQ and JUMPIF
dec0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73  NULL..** It caus
ded0: 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74  es an assert() t
dee0: 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72  o fire if either
def0: 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f   operand to a co
df00: 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72  mparison.** oper
df10: 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49  ator is NULL.  I
df20: 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65  t is added to ce
df30: 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  rtain comparison
df40: 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a   operators to.**
df50: 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20   prove that the 
df60: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77  operands are alw
df70: 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f  ays NOT NULL..*/
df80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df90: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31  JUMPIFNULL   0x1
dfa0: 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  0  /* jumps if e
dfb0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
dfc0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
dfd0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
dfe0: 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74       0x20  /* St
dff0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
e000: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
e010: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
e020: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e030: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
e040: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  ULL=NULL */.#def
e050: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  ine SQLITE_NOTNU
e060: 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a  LL      0x90  /*
e070: 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65   Assert that ope
e080: 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20  rands are never 
e090: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
e0a0: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
e0b0: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
e0c0: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
e0d0: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
e0e0: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
e0f0: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
e100: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
e110: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
e120: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
e130: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
e140: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
e150: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
e160: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e170: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
e180: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
e190: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
e1a0: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
e1b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e1c0: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
e1d0: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
e1e0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e1f0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e200: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
e210: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
e220: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
e230: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
e240: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
e250: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
e260: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
e270: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e280: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
e290: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
e2a0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
e2b0: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
e2c0: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
e2d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
e2e0: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
e2f0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
e300: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
e310: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
e320: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
e330: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
e340: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
e350: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
e360: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
e370: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
e380: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
e390: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
e3a0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
e3b0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
e3c0: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
e3d0: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
e3e0: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
e3f0: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
e400: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
e410: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
e420: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
e430: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
e440: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
e450: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
e460: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
e470: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
e480: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
e490: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
e4a0: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
e4b0: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
e4c0: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
e4d0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
e4e0: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
e4f0: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
e500: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
e510: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
e520: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
e530: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
e540: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
e550: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
e560: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
e570: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
e580: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
e590: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
e5a0: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
e5b0: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
e5c0: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
e5d0: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
e5e0: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
e5f0: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
e600: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
e610: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e620: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
e630: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
e640: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
e650: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
e660: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
e670: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
e680: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
e690: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
e6a0: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
e6b0: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
e6c0: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
e6d0: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
e6e0: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
e6f0: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
e700: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
e710: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
e720: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
e730: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
e740: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
e750: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
e760: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
e770: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
e780: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
e790: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
e7a0: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
e7b0: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
e7c0: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
e7d0: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
e7e0: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
e7f0: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
e800: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
e810: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
e820: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
e830: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
e840: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
e850: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
e860: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
e870: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
e880: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
e890: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
e8a0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
e8b0: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
e8c0: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
e8d0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
e8e0: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
e8f0: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
e900: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
e910: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
e920: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
e930: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
e940: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
e950: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
e960: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
e970: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
e980: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
e990: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
e9a0: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
e9b0: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
e9c0: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
e9d0: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
e9e0: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
e9f0: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
ea00: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
ea10: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
ea20: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
ea30: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
ea40: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
ea50: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
ea60: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ea70: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ea80: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
ea90: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
eaa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
eab0: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
eac0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
ead0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
eae0: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
eaf0: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
eb00: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
eb10: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
eb20: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
eb30: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
eb40: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
eb50: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
eb60: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
eb70: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
eb80: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
eb90: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
eba0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
ebb0: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
ebc0: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
ebd0: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
ebe0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
ebf0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
ec00: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
ec10: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
ec20: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
ec30: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
ec40: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
ec50: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
ec60: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
ec70: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
ec80: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
ec90: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
eca0: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
ecb0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
ecc0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
ecd0: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
ece0: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
ecf0: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
ed00: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
ed10: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
ed20: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
ed30: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
ed40: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
ed50: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
ed60: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
ed70: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
ed80: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
ed90: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
eda0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
edb0: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
edc0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
edd0: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
ede0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
edf0: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
ee00: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
ee10: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
ee20: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
ee30: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
ee40: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
ee50: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
ee60: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
ee70: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
ee80: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
ee90: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
eea0: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
eeb0: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
eec0: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
eed0: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
eee0: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
eef0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
ef00: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
ef10: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
ef20: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
ef30: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
ef40: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
ef50: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
ef60: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
ef70: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
ef80: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
ef90: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
efa0: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
efb0: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
efc0: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
efd0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
efe0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
eff0: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
f000: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
f010: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
f020: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
f030: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
f040: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
f050: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
f060: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
f070: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
f080: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
f090: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
f0a0: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
f0b0: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
f0c0: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
f0d0: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
f0e0: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
f0f0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
f100: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
f110: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
f120: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
f130: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
f140: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
f150: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
f160: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
f170: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
f180: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
f190: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
f1a0: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
f1b0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
f1c0: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
f1d0: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
f1e0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
f1f0: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
f200: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
f210: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
f220: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
f230: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
f240: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
f250: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
f260: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
f270: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
f280: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
f290: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
f2a0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
f2b0: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
f2c0: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
f2d0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
f2e0: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
f2f0: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
f300: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
f310: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
f320: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
f330: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
f340: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
f350: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
f360: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
f370: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
f380: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
f390: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
f3a0: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
f3b0: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
f3c0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
f3d0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f3e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f3f0: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
f400: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
f410: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
f420: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
f430: 64 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f  dif.  LogEst nRo
f440: 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73  wLogEst;   /* Es
f450: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
f460: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
f470: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
f480: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
f490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
f4a0: 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72  t BTree node for
f4b0: 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65   this table (see
f4c0: 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a   note above) */.
f4d0: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
f4e0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
f4f0: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
f500: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
f510: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
f520: 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
f530: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f540: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f550: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
f560: 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u16 nRef;       
f570: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f580: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
f590: 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  is Table */.  Lo
f5a0: 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
f5b0: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
f5c0: 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
f5d0: 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
f5e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
f5f0: 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
f600: 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
f610: 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
f620: 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
f630: 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
f640: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
f650: 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
f660: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
f670: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
f680: 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
f690: 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
f6a0: 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
f6b0: 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
f6c0: 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
f6d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
f6e0: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
f6f0: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
f700: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
f710: 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
f720: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
f730: 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
f740: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f750: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
f760: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
f770: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f780: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
f790: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
f7a0: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
f7b0: 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  rg;  /* Text of 
f7c0: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
f7d0: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
f7e0: 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ame */.  VTable 
f7f0: 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
f800: 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
f810: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
f820: 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
f830: 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
f840: 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
f850: 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
f860: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
f870: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
f880: 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
f890: 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
f8a0: 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
f8b0: 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
f8c0: 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
f8d0: 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
f8e0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
f8f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
f900: 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23  e.tabFlags..*/.#
f910: 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
f920: 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20  ly        0x01  
f930: 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
f940: 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
f950: 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
f960: 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20  ral       0x02  
f970: 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
f980: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
f990: 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
f9a0: 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a  Key   0x04    /*
f9b0: 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   Table has a pri
f9c0: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
f9d0: 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65  ine TF_Autoincre
f9e0: 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f  ment   0x08    /
f9f0: 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
fa00: 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
fa10: 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
fa20: 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20  e TF_Virtual    
fa30: 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
fa40: 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  Is a virtual tab
fa50: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
fa60: 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
fa70: 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72   0x20    /* No r
fa80: 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41  owid used. PRIMA
fa90: 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
faa0: 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  y */.../*.** Tes
fab0: 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
fac0: 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
fad0: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
fae0: 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
faf0: 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
fb00: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
fb10: 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
fb20: 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
fb30: 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
fb40: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
fb50: 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
fb60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
fb70: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
fb80: 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
fb90: 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d  l(X)      (((X)-
fba0: 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56  >tabFlags & TF_V
fbb0: 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64  irtual)!=0).#  d
fbc0: 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
fbd0: 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
fbe0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
fbf0: 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
fc00: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
fc10: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
fc20: 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
fc30: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
fc40: 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20  #endif../* Does 
fc50: 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
fc60: 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
fc70: 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
fc80: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
fc90: 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
fca0: 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
fcb0: 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
fcc0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
fcd0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
fce0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
fcf0: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
fd00: 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
fd10: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
fd20: 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
fd30: 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
fd40: 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
fd50: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
fd60: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
fd70: 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
fd80: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
fd90: 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
fda0: 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
fdb0: 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
fdc0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
fdd0: 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
fde0: 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
fdf0: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
fe00: 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
fe10: 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
fe20: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
fe30: 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
fe40: 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
fe50: 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
fe60: 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
fe70: 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
fe80: 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
fe90: 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
fea0: 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
feb0: 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
fec0: 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
fed0: 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
fee0: 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
fef0: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
ff00: 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
ff10: 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
ff20: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
ff30: 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
ff40: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
ff50: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
ff60: 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
ff70: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
ff80: 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
ff90: 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
ffa0: 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
ffb0: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
ffc0: 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
ffd0: 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
ffe0: 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
fff0: 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
10000 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
10010 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
10020 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
10030 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
10040 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
10050 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
10060 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
10070 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
10080 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
10090 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
100a0 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
100b0 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
100c0 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
100d0 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
100e0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
100f0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
10100 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
10110 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
10120 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
10130 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
10140 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
10150 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
10160 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
10170 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
10180 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
10190 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
101a0 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
101b0 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
101c0 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
101d0 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
101e0 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
101f0 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
10200 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
10210 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
10220 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
10230 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
10240 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
10250 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10260 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
10270 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
10280 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
10290 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
102a0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
102b0 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
102c0 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
102d0 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
102e0 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
102f0 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
10300 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
10310 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
10320 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
10330 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
10340 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
10350 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
10360 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
10370 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
10380 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
10390 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
103a0 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
103b0 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
103c0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
103d0 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
103e0 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
103f0 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
10400 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
10410 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
10420 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
10430 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
10440 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
10450 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
10460 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
10470 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
10480 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
10490 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
104a0 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
104b0 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
104c0 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
104d0 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
104e0 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
104f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
10500 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
10510 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
10520 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
10530 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
10540 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
10550 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
10560 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
10570 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
10580 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
10590 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
105a0 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
105b0 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
105c0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
105d0 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
105e0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
105f0 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
10600 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
10610 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
10620 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
10630 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
10640 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
10650 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
10660 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
10670 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
10680 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
10690 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
106a0 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
106b0 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
106c0 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
106d0 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
106e0 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
106f0 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
10700 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
10710 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
10720 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10730 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10740 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
10750 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
10760 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
10770 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
10780 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
10790 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
107a0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
107b0 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
107c0 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
107d0 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
107e0 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
107f0 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
10800 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
10810 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
10820 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
10830 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
10840 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
10850 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
10860 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
10870 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
10880 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
10890 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
108a0 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
108b0 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
108c0 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
108d0 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
108e0 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
108f0 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
10900 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
10910 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
10920 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
10930 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
10940 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
10950 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
10960 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
10970 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
10980 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
10990 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
109a0 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
109b0 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
109c0 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
109d0 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
109e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
109f0 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
10a00 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
10a10 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
10a20 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
10a30 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
10a40 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
10a50 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
10a60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
10a70 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
10a80 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
10a90 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
10aa0 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
10ab0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
10ac0 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
10ad0 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
10ae0 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
10af0 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
10b00 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
10b10 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
10b20 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
10b30 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
10b40 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
10b50 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
10b60 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
10b70 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
10b80 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
10b90 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
10ba0 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
10bb0 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
10bc0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
10bd0 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
10be0 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
10bf0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
10c00 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
10c10 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
10c20 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
10c30 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
10c40 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
10c50 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
10c60 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
10c70 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
10c80 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
10c90 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
10ca0 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
10cb0 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
10cc0 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f  fault  10  /* Do
10cd0 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
10ce0 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
10cf0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
10d00 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10d10 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10d20 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
10d30 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
10d40 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
10d50 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
10d60 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
10d70 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
10d80 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
10d90 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
10da0 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
10db0 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
10dc0 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
10dd0 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
10de0 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
10df0 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
10e00 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
10e10 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
10e20 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
10e30 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
10e40 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
10e50 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e  eyInfo {.  u32 n
10e60 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ref;           /
10e70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65  * Number of refe
10e80 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b  rences to this K
10e90 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f  eyInfo object */
10ea0 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
10eb0 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
10ec0 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
10ed0 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
10ee0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
10ef0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
10f00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65   /* Number of ke
10f10 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  y columns in the
10f20 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20   index */.  u16 
10f30 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20  nXField;        
10f40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10f50 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20  umns beyond the 
10f60 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  key columns */. 
10f70 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
10f80 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
10f90 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
10fa0 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
10fb0 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
10fc0 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
10fd0 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
10fe0 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
10ff0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
11000 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
11010 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
11020 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
11030 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11040 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11050 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
11060 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
11070 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
11080 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
11090 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
110a0 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
110b0 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
110c0 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
110d0 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
110e0 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
110f0 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
11100 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
11110 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
11120 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
11130 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
11140 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
11150 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
11160 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
11170 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
11180 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
11190 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
111a0 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
111b0 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
111c0 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
111d0 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
111e0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
111f0 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
11200 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
11210 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
11220 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
11230 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
11240 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  tuent fields..**
11250 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72  .** The r1 and r
11260 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  2 member variabl
11270 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
11280 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65   by the optimize
11290 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  d comparison.** 
112a0 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65  functions vdbeRe
112b0 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29  cordCompareInt()
112c0 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43   and vdbeRecordC
112d0 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a  ompareString()..
112e0 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
112f0 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
11300 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
11310 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
11320 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
11330 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31  ormation */.  u1
11340 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
11350 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
11360 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
11370 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
11380 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
11390 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
113a0 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
113b0 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
113c0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
113d0 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
113e0 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
113f0 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
11400 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ) */.  Mem *aMem
11410 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
11420 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31  lues */.  int r1
11430 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11440 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
11450 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
11460 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20  */.  int r2;    
11470 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
11480 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
11490 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b  rhs < lhs) */.};
114a0 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
114b0 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
114c0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
114d0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
114e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
114f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
11500 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
11510 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
11520 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
11530 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
11540 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
11550 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
11560 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
11570 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
11580 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
11590 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
115a0 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
115b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
115c0 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
115d0 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
115e0 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
115f0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
11600 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
11610 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
11620 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
11630 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
11640 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
11650 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
11660 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
11670 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
11680 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
11690 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
116a0 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
116b0 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
116c0 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
116d0 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
116e0 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
116f0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
11700 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
11710 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20  e the .** first 
11720 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
11730 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
11740 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
11750 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
11760 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
11770 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
11780 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
11790 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
117a0 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
117b0 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
117c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
117d0 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
117e0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
117f0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
11800 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
11810 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
11820 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
11830 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
11840 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
11850 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
11860 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
11870 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
11880 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
11890 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
118a0 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
118b0 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
118c0 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
118d0 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
118e0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a  t resolution .**
118f0 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d   algorithm to em
11900 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e  ploy whenever an
11910 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
11920 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e   to insert a non
11930 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65  -unique.** eleme
11940 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  nt..*/.struct In
11950 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
11960 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11970 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
11980 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
11990 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
119a0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
119b0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
119c0 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
119d0 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
119e0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
119f0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
11a00 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
11a10 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
11a20 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
11a30 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
11a40 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
11a50 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
11a60 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
11a70 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
11a80 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
11a90 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
11aa0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
11ab0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
11ac0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
11ad0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
11ae0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
11af0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
11b00 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
11b10 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
11b20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
11b30 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
11b40 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
11b50 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
11b60 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
11b70 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
11b80 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68  lse==ASC */.  ch
11b90 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
11ba0 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
11bb0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
11bc0 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
11bd0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
11be0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
11bf0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
11c00 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
11c10 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79  indices */.  Key
11c20 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
11c30 20 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e        /* A KeyIn
11c40 66 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62  fo object suitab
11c50 6c 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  le for this inde
11c60 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  x */.  int tnum;
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
11c90 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
11ca0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
11cb0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
11cc0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
11cd0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
11ce0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
11cf0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
11d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11d10 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
11d20 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
11d30 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
11d40 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
11d50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
11d60 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
11d70 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
11d80 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
11d90 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
11da0 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
11db0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
11dc0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
11dd0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
11de0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
11df0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
11e00 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
11e10 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
11e20 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
11e30 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
11e40 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
11e50 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
11e60 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
11e70 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
11e80 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
11e90 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
11ea0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
11eb0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
11ec0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
11ed0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
11ee0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
11ef0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
11f00 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
11f10 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
11f20 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
11f30 20 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66   index */.#ifdef
11f40 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
11f50 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
11f60 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
11f70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11f80 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
11f90 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
11fa0 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
11fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
11fc0 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
11fd0 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
11fe0 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
11ff0 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
12000 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
12010 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
12020 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
12030 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
12040 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
12050 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
12060 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23  ft-most key */.#
12070 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
12080 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
12090 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
120a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
120b0 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
120c0 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
120d0 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
120e0 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
120f0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
12100 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
12110 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
12120 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
12130 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
12140 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
12150 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
12160 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
12170 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
12180 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
12190 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
121a0 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
121b0 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
121c0 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
121d0 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
121e0 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
121f0 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
12200 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
12210 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
12220 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
12230 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
12240 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
12250 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
12260 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20  OE_None)../*.** 
12270 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
12280 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
12290 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
122a0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
122b0 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
122c0 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
122d0 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
122e0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
122f0 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
12300 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
12310 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
12320 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
12330 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
12340 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
12350 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
12360 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
12370 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
12380 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
12390 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
123a0 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
123b0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
123c0 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
123d0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
123e0 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
123f0 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
12400 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
12410 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
12420 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
12430 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
12440 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
12450 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
12460 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
12470 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
12480 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
12490 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
124a0 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
124b0 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
124c0 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
124d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
124e0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
124f0 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
12500 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
12510 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
12520 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54  .**.** Note if T
12530 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54  oken.z==0 then T
12540 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b  oken.dyn and Tok
12550 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e  en.n are undefin
12560 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f  ed and.** may co
12570 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c  ntain random val
12580 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b  ues.  Do not mak
12590 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e  e any assumption
125a0 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
125b0 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
125c0 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
125d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
125e0 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
125f0 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74   *z;     /* Text
12600 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20   of the token.  
12610 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  Not NULL-termina
12620 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ted! */.  unsign
12630 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20  ed int n;    /* 
12640 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  Number of charac
12650 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b  ters in this tok
12660 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  en */.};../*.** 
12670 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
12680 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  his structure co
12690 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
126a0 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
126b0 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
126c0 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20  r a SELECT that 
126d0 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
126e0 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
126f0 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d  .** If Expr.op==
12700 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72  TK_AGG_COLUMN or
12710 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
12720 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49   then Expr.pAggI
12730 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  nfo is a.** poin
12740 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
12750 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72  cture.  The Expr
12760 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69  .iColumn field i
12770 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a  s the index in.*
12780 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d  * AggInfo.aCol[]
12790 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e   or AggInfo.aFun
127a0 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  c[] of informati
127b0 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
127c0 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
127d0 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a  r that node..**.
127e0 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75  ** AggInfo.pGrou
127f0 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e  pBy and AggInfo.
12800 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e  aFunc.pExpr poin
12810 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68  t to fields with
12820 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  in the.** origin
12830 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74  al Select struct
12840 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ure that describ
12850 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  es the SELECT st
12860 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a  atement.  These.
12870 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74  ** fields do not
12880 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65   need to be free
12890 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74  d when deallocat
128a0 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20  ing the AggInfo 
128b0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
128c0 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20  ruct AggInfo {. 
128d0 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20   u8 directMode; 
128e0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65           /* Dire
128f0 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64  ct rendering mod
12900 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74  e means take dat
12910 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20  a directly.     
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75       ** from sou
12940 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65  rce tables rathe
12950 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75  r than from accu
12960 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38  mulators */.  u8
12970 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20   useSortingIdx; 
12980 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65        /* In dire
12990 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e  ct mode, referen
129a0 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  ce the sorting i
129b0 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20  ndex rather.    
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68        ** than th
129e0 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
129f0 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
12a00 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  dx;         /* C
12a10 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
12a20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
12a30 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  x */.  int sorti
12a40 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f  ngIdxPTab;     /
12a50 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
12a60 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  of pseudo-table 
12a70 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
12a80 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
12a90 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
12aa0 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
12ab0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
12ac0 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20  mnReg, mxReg;   
12ad0 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20      /* Range of 
12ae0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
12af0 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64  ted for aCol and
12b00 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72   aFunc */.  Expr
12b10 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
12b20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
12b30 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
12b40 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63  struct AggInfo_c
12b50 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65  ol {    /* For e
12b60 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20  ach column used 
12b70 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  in source tables
12b80 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
12b90 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
12ba0 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65   /* Source table
12bb0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62   */.    int iTab
12bc0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
12bd0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
12be0 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  r of the source 
12bf0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
12c00 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
12c10 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
12c20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68  number within th
12c30 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
12c40 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65  /.    int iSorte
12c50 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f  rColumn;       /
12c60 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
12c70 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
12c80 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
12c90 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
12ca0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
12cb0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
12cc0 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
12cd0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
12ce0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
12cf0 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
12d00 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
12d10 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20   } *aCol;.  int 
12d20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
12d30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12d40 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e   used entries in
12d50 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
12d60 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
12d70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12d80 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
12d90 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
12da0 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
12dd0 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
12de0 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
12df0 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
12e20 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
12e30 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
12e40 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
12e50 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
12e60 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
12e70 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12e80 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
12e90 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
12ea0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
12eb0 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
12ec0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
12ed0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
12ee0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
12ef0 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
12f00 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
12f10 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
12f20 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
12f30 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
12f40 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
12f50 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
12f60 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62  /* Ephemeral tab
12f70 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72  le used to enfor
12f80 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20  ce DISTINCT */. 
12f90 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74   } *aFunc;.  int
12fa0 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   nFunc;         
12fb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12fc0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75  f entries in aFu
12fd0 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
12fe0 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
12ff0 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
13000 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
13010 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
13020 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
13030 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
13040 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
13050 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
13060 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
13070 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
13080 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
13090 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
130a0 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
130b0 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
130c0 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
130d0 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
130e0 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
130f0 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
13100 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
13110 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
13120 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
13130 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
13140 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
13150 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
13160 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
13170 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
13180 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
13190 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
131a0 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
131b0 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
131c0 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
131d0 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
131e0 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
131f0 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
13200 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13210 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
13220 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
13230 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
13240 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
13250 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
13260 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
13270 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
13280 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
13290 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
132a0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
132b0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
132c0 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
132d0 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
132e0 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
132f0 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
13300 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
13310 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
13320 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
13330 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
13340 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
13350 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
13360 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
13370 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
13380 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
13390 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
133a0 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
133b0 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
133c0 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
133d0 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
133e0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
133f0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
13400 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
13410 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
13420 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f  BLOB, .** or TK_
13430 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
13440 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
13450 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
13460 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
13470 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
13480 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
13490 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
134a0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
134b0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a   contains the .*
134c0 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
134d0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
134e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
134f0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
13500 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
13510 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
13520 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
13530 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
13540 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
13550 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
13560 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
13570 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
13580 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
13590 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
135a0 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
135b0 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
135c0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
135d0 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
135e0 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
135f0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13600 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
13610 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
13620 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
13630 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
13640 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
13650 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
13660 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
13670 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
13680 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
13690 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
136a0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
136b0 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
136c0 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
136d0 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
136e0 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
136f0 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
13700 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
13710 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
13720 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
13730 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
13740 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64  ist is .** valid
13750 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
13760 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
13770 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
13780 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
13790 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
137a0 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
137b0 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
137c0 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
137d0 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
137e0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
137f0 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
13800 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
13810 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
13820 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
13830 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
13840 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
13850 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
13860 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
13870 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
13880 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
13890 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
138a0 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
138b0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
138c0 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
138d0 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
138e0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
138f0 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
13900 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
13910 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
13920 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
13930 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
13940 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
13950 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
13960 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
13970 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  a question mark 
13980 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
13990 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
139a0 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
139b0 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
139c0 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  s the index .** 
139d0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
139e0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
139f0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
13a00 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
13a10 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
13a20 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
13a30 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
13a40 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
13a50 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
13a60 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
13a70 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
13a80 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
13a90 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
13aa0 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
13ab0 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
13ac0 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
13ad0 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
13ae0 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
13af0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
13b00 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
13b10 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
13b20 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
13b30 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
13b40 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
13b50 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
13b60 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
13b70 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
13b80 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
13b90 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
13ba0 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
13bb0 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
13bc0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
13bd0 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
13be0 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
13bf0 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
13c00 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
13c10 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
13c20 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
13c30 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
13c40 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
13c50 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
13c60 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
13c70 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
13c80 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
13c90 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
13ca0 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
13cb0 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
13cc0 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
13cd0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
13ce0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
13cf0 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
13d00 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
13d10 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
13d20 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
13d30 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
13d40 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
13d50 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
13d60 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
13d70 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
13d80 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
13d90 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
13da0 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
13db0 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
13dc0 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
13dd0 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
13de0 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
13df0 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
13e00 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
13e10 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
13e20 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
13e30 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
13e40 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
13e50 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
13e60 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
13e70 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
13e80 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
13e90 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
13ea0 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
13eb0 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
13ec0 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
13ed0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
13ee0 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
13ef0 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
13f00 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
13f10 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
13f20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
13f30 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
13f40 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
13f50 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
13f60 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
13f70 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
13f80 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
13f90 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
13fa0 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
13fb0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
13fc0 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
13fd0 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
13fe0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
13ff0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
14000 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
14010 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
14020 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
14030 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
14040 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
14050 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
14060 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
14070 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
14080 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
14090 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
140a0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
140b0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
140c0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
140d0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
140e0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
140f0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
14100 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
14110 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
14120 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
14130 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
14140 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a  ction. .  ******
14150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
14190 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
141a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
141b0 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
141c0 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
141d0 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
141e0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
141f0 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
14200 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
14210 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
14220 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20  , SELECT, CASE, 
14230 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45  FUNCTION, BETWEE
14240 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  N */.    Select 
14250 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
14260 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e   EP_xIsSelect an
14270 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  d op = IN, EXIST
14280 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d  S, SELECT */.  }
14290 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   x;..  /* If the
142a0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
142b0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
142c0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
142d0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
142e0 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
142f0 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
14300 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
14310 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
14320 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
14330 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
14340 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
14350 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
14360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
143a0 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  */..#if SQLITE_M
143b0 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
143c0 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
143d0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67           /* Heig
143e0 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68  ht of the tree h
143f0 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f  eaded by this no
14400 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
14410 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
14420 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
14430 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
14440 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
14450 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
14480 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
14490 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
144a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
144b0 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
144c0 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20  new, 0 -> old.  
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c         ** EP_Unl
144f0 69 6b 65 6c 79 3a 20 20 31 30 30 30 20 74 69 6d  ikely:  1000 tim
14500 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f  es likelihood */
14510 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
14520 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
14530 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
14540 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
14550 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14570 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
14580 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
14590 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
145a0 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
145b0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
145c0 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
145d0 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
145e0 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
145f0 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
14600 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
14610 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
14620 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
14630 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b  oin */.  u8 op2;
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  /* TK_REGISTER: 
14660 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f  original value o
14670 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20  f Expr.op.      
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     ** TK_COLUMN:
146a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35   the value of p5
146b0 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20   for OP_Column. 
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47          ** TK_AG
146e0 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74  G_FUNCTION: nest
146f0 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41  ing depth */.  A
14700 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
14710 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79  ;     /* Used by
14720 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61   TK_AGG_COLUMN a
14730 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  nd TK_AGG_FUNCTI
14740 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ON */.  Table *p
14750 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
14760 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43  * Table for TK_C
14770 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e  OLUMN expression
14780 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  s. */.};../*.** 
14790 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
147a0 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
147b0 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
147c0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
147d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
147e0 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
147f0 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69   /* Originated i
14800 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  n ON or USING cl
14810 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
14820 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
14830 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
14840 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
14850 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
14860 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
14870 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
14880 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
14890 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
148a0 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
148b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
148c0 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
148d0 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
148e0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
148f0 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
14900 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
14910 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
14920 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
14930 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
14940 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
14950 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
14960 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
14970 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
14980 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
14990 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
149a0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
149b0 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
149c0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
149d0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
149e0 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
149f0 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
14a00 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
14a10 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
14a20 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
14a30 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
14a40 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
14a50 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
14a60 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
14a70 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
14a80 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
14a90 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
14aa0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
14ab0 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
14ac0 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
14ad0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
14ae0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
14af0 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
14b00 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
14b10 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
14b20 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
14b30 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
14b40 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
14b50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
14b60 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
14b70 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
14b80 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
14b90 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
14ba0 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
14bb0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
14bc0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
14bd0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
14be0 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
14bf0 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
14c00 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
14c10 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
14c20 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
14c30 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
14c40 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
14c50 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
14c60 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
14c70 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
14c80 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
14c90 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
14ca0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
14cb0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
14cc0 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
14cd0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
14ce0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
14cf0 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
14d00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
14d10 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
14d20 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
14d30 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
14d40 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
14d50 69 6e 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20  ine EP_Constant 
14d60 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64   0x080000 /* Nod
14d70 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
14d80 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  */../*.** These 
14d90 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
14da0 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
14db0 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
14dc0 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66  n the .** Expr.f
14dd0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
14de0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
14df0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
14e00 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
14e10 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
14e20 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
14e30 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
14e40 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
14e50 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
14e60 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
14e70 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
14e80 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
14e90 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
14ea0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
14eb0 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
14ec0 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
14ed0 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
14ee0 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
14ef0 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
14f00 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
14f10 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
14f20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
14f30 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
14f40 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
14f50 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
14f60 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
14f70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
14f80 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
14f90 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
14fa0 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
14fb0 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
14fc0 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
14fd0 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
14fe0 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
14ff0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
15000 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
15010 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
15020 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20  normal Expr .** 
15030 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
15040 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
15050 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
15060 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
15070 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  s .** and an Exp
15080 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
15090 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
150a0 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
150b0 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
150c0 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
150d0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
150e0 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
150f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
15100 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
15110 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
15120 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
15130 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
15140 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
15150 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
15160 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
15170 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
15180 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
15190 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
151a0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
151b0 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
151c0 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
151d0 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f   comment .** abo
151e0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
151f0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
15200 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
15210 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
15220 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
15230 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
15240 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
15250 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
15260 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
15270 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
15280 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
15290 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
152a0 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
152b0 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
152c0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
152d0 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
152e0 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
152f0 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
15300 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
15310 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
15320 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
15330 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
15340 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
15350 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
15360 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
15370 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
15380 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
15390 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
153a0 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
153b0 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
153c0 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
153d0 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
153e0 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
153f0 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
15400 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
15410 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
15420 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
15430 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
15440 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
15450 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
15460 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
15470 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
15480 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
15490 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
154a0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
154b0 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
154c0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
154d0 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
154e0 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
154f0 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
15500 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
15510 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
15520 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
15530 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
15540 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
15550 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
15560 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
15570 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
15580 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
15590 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
155a0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
155b0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
155c0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
155d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
155e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
155f0 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
15600 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
15610 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
15620 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
15630 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
15640 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
15650 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
15660 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
15670 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
15680 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
15690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
156a0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
156b0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
156c0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
156d0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
156e0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
156f0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
15700 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
15710 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
15720 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
15730 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
15740 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
15750 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
15760 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
15770 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
15780 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
15790 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
157a0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
157b0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
157c0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
157d0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
157e0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
157f0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
15800 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
15810 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
15820 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
15830 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
15840 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
15850 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
15860 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
15870 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
15880 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
15890 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
158a0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
158b0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
158c0 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
158d0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
158e0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
158f0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
15900 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
15910 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
15920 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15940 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
15950 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
15960 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
15970 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
15980 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
15990 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
159a0 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
159b0 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
159c0 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
159d0 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
159e0 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
159f0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
15a00 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
15a10 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
15a20 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
15a30 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15a40 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
15a50 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
15a60 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
15a70 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
15a80 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
15a90 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
15aa0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
15ab0 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
15ac0 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
15ad0 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
15ae0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
15af0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15b00 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
15b10 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
15b20 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
15b30 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
15b40 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
15b50 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
15b60 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
15b70 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
15b80 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
15b90 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
15ba0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
15bb0 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
15bc0 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
15bd0 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
15be0 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
15bf0 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
15c00 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
15c10 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
15c20 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
15c30 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
15c40 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
15c50 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
15c60 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
15c70 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
15c80 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
15c90 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
15ca0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
15cb0 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
15cc0 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
15cd0 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
15ce0 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
15cf0 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
15d00 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
15d10 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
15d20 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
15d30 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
15d40 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
15d50 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
15d60 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
15d70 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
15d80 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
15d90 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
15da0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
15db0 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
15dc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15dd0 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
15de0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
15df0 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
15e00 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
15e10 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
15e20 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
15e30 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
15e40 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
15e50 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
15e60 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
15e70 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
15e80 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
15e90 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
15ea0 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
15eb0 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
15ec0 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
15ed0 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
15ee0 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
15ef0 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36  6..*/.typedef u6
15f00 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a  4 Bitmask;../*.*
15f10 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
15f20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
15f30 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
15f40 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
15f50 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
15f60 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
15f70 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
15f80 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74  * A bit in a Bit
15f90 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  mask.*/.#define 
15fa0 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28  MASKBIT(n)   (((
15fb0 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29  Bitmask)1)<<(n))
15fc0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
15fd0 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65  32(n) (((unsigne
15fe0 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a  d int)1)<<(n))..
15ff0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
16000 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
16010 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
16020 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
16030 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
16040 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
16050 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
16060 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
16070 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
16080 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
16090 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
160a0 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
160b0 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
160c0 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
160d0 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
160e0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
160f0 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
16100 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
16110 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
16120 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
16130 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
16140 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
16150 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
16160 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
16170 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
16180 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
16190 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
161a0 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
161b0 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
161c0 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
161d0 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
161e0 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
161f0 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
16200 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
16210 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
16220 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
16230 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
16240 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
16250 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
16260 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
16270 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
16280 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
16290 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
162a0 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
162b0 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
162c0 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
162d0 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
162e0 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
162f0 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
16300 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
16310 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
16320 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
16330 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
16340 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
16350 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
16360 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
16370 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
16380 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
16390 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
163a0 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
163b0 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
163c0 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
163d0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
163e0 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
163f0 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
16400 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
16410 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
16420 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
16430 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
16440 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
16450 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
16460 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
16470 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
16480 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
16490 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
164a0 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
164b0 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
164c0 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
164d0 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
164e0 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
164f0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
16500 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
16510 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
16520 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
16530 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
16540 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
16550 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
16560 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
16570 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
16580 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
16590 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
165a0 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
165b0 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
165c0 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
165d0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
165e0 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
165f0 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
16600 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
16610 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
16620 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
16630 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
16640 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
16650 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
16660 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
16670 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
16680 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
16690 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
166a0 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
166b0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
166c0 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
166d0 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
166e0 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
166f0 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f  ine */.    u8 jo
16700 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
16710 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
16720 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61  ween this able a
16730 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
16740 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
16750 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
16760 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
16770 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
16780 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
16790 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
167a0 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
167b0 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
167c0 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
167d0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
167e0 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
167f0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
16800 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
16810 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16820 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b   isRecursive :1;
16830 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72     /* True for r
16840 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e  ecursive referen
16850 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69  ce in WITH */.#i
16860 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16870 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38  T_EXPLAIN.    u8
16880 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
16890 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30  /* If pSelect!=0
168a0 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20  , the id of the 
168b0 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51  sub-select in EQ
168c0 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20  P */.#endif.    
168d0 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
168e0 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
168f0 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
16900 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
16910 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
16920 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
16930 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
16940 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
16950 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
16960 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
16970 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
16980 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
16990 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
169a0 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
169b0 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
169c0 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
169d0 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20   char *zIndex;  
169e0 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
169f0 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
16a00 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
16a10 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  se */.    Index 
16a20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49  *pIndex;    /* I
16a30 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
16a40 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
16a50 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a  zIndex, if any *
16a60 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
16a70 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
16a80 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
16a90 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
16aa0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
16ab0 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
16ac0 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
16ad0 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
16ae0 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
16af0 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
16b00 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
16b10 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
16b20 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
16b30 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
16b40 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
16b50 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
16b60 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
16b70 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
16b80 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
16b90 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
16ba0 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
16bb0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
16bc0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
16bd0 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
16be0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
16bf0 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
16c00 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
16c10 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
16c20 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
16c30 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
16c40 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
16c50 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
16c60 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
16c70 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
16c80 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
16c90 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
16ca0 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
16cb0 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
16cc0 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
16cd0 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
16ce0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
16cf0 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
16d00 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
16d10 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23  ags member..*/.#
16d20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
16d30 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
16d40 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
16d50 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
16d60 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
16d70 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
16d80 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
16d90 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
16da0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
16db0 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
16dc0 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
16dd0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
16de0 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
16df0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
16e00 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
16e10 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
16e20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
16e30 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
16e40 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
16e50 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
16e60 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  08 /* Ok to retu
16e70 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
16e80 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
16e90 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50  ne WHERE_OMIT_OP
16ea0 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30  EN_CLOSE  0x0010
16eb0 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
16ec0 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70  s are already op
16ed0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  en */.#define WH
16ee0 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20  ERE_FORCE_TABLE 
16ef0 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44       0x0020 /* D
16f00 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64  o not use an ind
16f10 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a  ex-only search *
16f20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16f30 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20  ONETABLE_ONLY   
16f40 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20   0x0040 /* Only 
16f50 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62  code the 1st tab
16f60 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a  le in pTabList *
16f70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16f80 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20  AND_ONLY        
16f90 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74   0x0080 /* Don't
16fa0 20 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f 72   use indices for
16fb0 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65   OR terms */.#de
16fc0 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
16fd0 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31  BY          0x01
16fe0 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  00 /* pOrderBy i
16ff0 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
17000 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
17010 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
17020 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
17030 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
17040 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
17050 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
17060 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
17070 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a  NCT    0x0400 /*
17080 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
17090 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
170a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
170b0 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
170c0 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70     0x0800 /* Sup
170d0 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
170e0 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
170f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f  define WHERE_REO
17100 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78  PEN_IDX       0x
17110 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75  1000 /* Try to u
17120 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20  se OP_ReopenIdx 
17130 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
17140 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
17150 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
17160 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
17170 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17180 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
17190 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
171a0 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
171b0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
171c0 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
171d0 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
171e0 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
171f0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
17200 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
17210 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
17220 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
17230 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17240 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
17250 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
17260 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
17270 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
17280 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
17290 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
172a0 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
172b0 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
172c0 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
172d0 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
172e0 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
172f0 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
17300 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
17310 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
17320 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
17330 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
17340 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
17350 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
17360 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
17370 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
17380 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
17390 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
173a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
173b0 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
173c0 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
173d0 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
173e0 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
173f0 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
17400 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
17410 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
17420 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
17430 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
17440 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
17450 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
17460 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
17470 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
17480 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
17490 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
174a0 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
174b0 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
174c0 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
174d0 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
174e0 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
174f0 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
17500 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
17510 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
17520 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
17530 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
17540 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
17550 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
17560 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
17570 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
17580 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
17590 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
175a0 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
175b0 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
175c0 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
175d0 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
175e0 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
175f0 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
17600 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
17610 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
17620 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
17630 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
17640 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
17650 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
17660 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
17670 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
17680 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
17690 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
176a0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
176b0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
176c0 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
176d0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
176e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
176f0 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
17700 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
17710 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
17720 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
17730 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
17740 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
17750 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
17760 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
17770 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
17780 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
17790 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
177a0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
177b0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
177c0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
177d0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
177e0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
177f0 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
17800 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
17810 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
17820 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
17830 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17840 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
17850 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
17860 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
17870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17880 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
17890 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
178a0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
178b0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
178c0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
178d0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
178e0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
178f0 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
17900 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
17910 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
17920 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
17930 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
17940 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
17950 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
17960 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
17970 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
17980 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
17990 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e  X..** .*/.#defin
179a0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
179b0 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
179c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
179d0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
179e0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
179f0 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f  Agg    0x0002  /
17a00 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
17a10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17a20 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
17a30 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
17a40 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
17a50 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
17a60 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
17a70 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
17a80 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
17a90 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
17aa0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
17ab0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
17ac0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
17ad0 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
17ae0 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0010  /* True if
17af0 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
17b00 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
17b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
17b20 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
17b30 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
17b40 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
17b50 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
17b60 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
17b70 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
17b80 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
17b90 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
17ba0 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
17bb0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
17bc0 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
17bd0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
17be0 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
17bf0 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
17c00 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
17c10 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
17c20 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
17c30 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
17c40 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
17c50 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
17c60 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
17c70 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
17c80 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
17c90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
17ca0 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
17cb0 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
17cc0 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
17cd0 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
17ce0 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
17cf0 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
17d00 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
17d10 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
17d20 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
17d30 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
17d40 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
17d50 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
17d60 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
17d70 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
17d80 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
17d90 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
17da0 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
17db0 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
17dc0 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
17dd0 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
17de0 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
17df0 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
17e00 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
17e10 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
17e20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
17e30 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
17e40 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
17e50 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
17e60 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
17e70 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
17e80 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
17e90 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
17ea0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
17eb0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
17ec0 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
17ed0 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
17ee0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
17ef0 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
17f00 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
17f10 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
17f20 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
17f30 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
17f40 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
17f50 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
17f60 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
17f70 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
17f80 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17f90 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
17fa0 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
17fb0 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
17fc0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
17fd0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
17fe0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
17ff0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
18000 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
18010 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
18020 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73  XCEPT */.  u16 s
18030 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
18040 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
18050 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
18060 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
18070 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
18080 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
18090 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
180a0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e  counters */.  in
180b0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
180c0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
180d0 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
180e0 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
180f0 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65  ect */.  u64 nSe
18100 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20  lectRow;        
18110 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
18120 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
18130 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ws */.  SrcList 
18140 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
18150 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
18160 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
18170 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
18180 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
18190 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
181a0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
181b0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
181c0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
181d0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
181e0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
181f0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
18200 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
18210 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
18220 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
18230 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
18240 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
18250 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
18260 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
18270 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
18280 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
18290 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
182a0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
182b0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
182c0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
182d0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
182e0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
182f0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
18300 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
18310 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
18320 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
18330 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
18340 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
18350 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
18360 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
18370 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
18380 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
18390 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
183a0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
183b0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
183c0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
183d0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
183e0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
183f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
18400 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
18410 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
18420 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
18430 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
18440 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
18450 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64     0x0002  /* Id
18460 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
18470 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
18480 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
18490 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
184a0 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
184b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
184c0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
184d0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
184e0 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73   0x0008  /* Uses
184f0 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
18500 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
18510 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
18520 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
18530 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
18540 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
18550 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
18560 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
18570 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a  o     0x0020  /*
18580 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
18590 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
185a0 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
185b0 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
185c0 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 50 61     0x0040  /* Pa
185d0 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
185e0 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
185f0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
18600 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
18610 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
18620 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
18630 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
18640 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30        /*     0x0
18650 31 30 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f  100  NOT USED */
18660 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
18670 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32  edFrom      0x02
18680 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
18690 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
186a0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
186b0 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
186c0 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30 20  nvert    0x0400 
186d0 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
186e0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
186f0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
18700 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
18710 76 65 20 20 20 20 20 20 20 30 78 30 38 30 30 20  ve       0x0800 
18720 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
18730 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
18740 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
18750 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67  fine SF_MinMaxAg
18760 67 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  g       0x1000  
18770 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e  /* Aggregate con
18780 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72  taining min() or
18790 20 6d 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   max() */.../*.*
187a0 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
187b0 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
187c0 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
187d0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
187e0 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
187f0 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
18800 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
18810 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
18820 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
18830 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
18840 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
18850 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
18860 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
18870 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
18880 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ex .**          
18890 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74             ident
188a0 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e  ified by pDest->
188b0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
188c0 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20     SRT_Except   
188d0 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74     Remove result
188e0 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f  s from the tempo
188f0 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74  rary index pDest
18900 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
18910 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20       SRT_Exists 
18920 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69       Store a 1 i
18930 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44  n memory cell pD
18940 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20  est->iSDParm if 
18950 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20  the result.**   
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70    set is not emp
18980 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ty..**.**     SR
18990 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68  T_Discard     Th
189a0 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20  row the results 
189b0 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75  away.  This is u
189c0 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a  sed by SELECT.**
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
189f0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
18a00 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f  whose only purpo
18a10 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20  se is.**        
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18a30 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66   side-effects of
18a40 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
18a50 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  * All of the abo
18a60 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69  ve are free to i
18a70 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45  gnore their ORDE
18a80 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f  R BY clause. Tho
18a90 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f  se that.** follo
18aa0 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65  w must honor the
18ab0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
18ac0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18ad0 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65  Output      Gene
18ae0 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75  rate a row of ou
18af0 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20  tput (using the 
18b00 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20  OP_ResultRow.** 
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20      opcode) for 
18b30 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
18b40 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a  result set..**.*
18b50 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20  *     SRT_Mem   
18b60 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64        Only valid
18b70 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
18b80 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
18b90 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  n..**           
18ba0 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20            Store 
18bb0 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
18bc0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
18bd0 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20  sult row.**     
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
18c00 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20  t->iSDParm then 
18c10 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74  abandon the rest
18c20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18c30 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71          of the q
18c40 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74  uery.  This dest
18c50 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20  ination implies 
18c60 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a  "LIMIT 1"..**.**
18c70 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20       SRT_Set    
18c80 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20       The result 
18c90 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65  must be a single
18ca0 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20   column.  Store 
18cb0 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20  each.**         
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20              row 
18cd0 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  of result as the
18ce0 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44   key in table pD
18cf0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a  est->iSDParm. .*
18d00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18d10 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
18d20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
18d30 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
18d40 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18d60 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
18d70 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
18d80 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
18d90 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
18da0 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
18db0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18dc0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
18dd0 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
18e00 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
18e10 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
18e20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18e30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
18e40 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
18e50 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
18e60 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18e80 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
18e90 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
18ea0 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
18eb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ec0 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
18ed0 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
18ee0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
18ef0 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
18f00 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
18f10 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
18f20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18f30 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
18f40 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
18f50 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
18f60 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
18f90 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
18fa0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
18fb0 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
18fd0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
18fe0 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
18ff0 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
19000 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
19020 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
19030 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
19040 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
19050 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19060 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
19070 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
19080 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
19090 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
190a0 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
190b0 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
190c0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
190f0 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
19100 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
19110 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19120 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
19130 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
19140 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
19150 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19170 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19180 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19190 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
191a0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
191b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
191c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
191d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
191e0 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
191f0 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
19200 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
19210 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
19230 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
19240 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
19250 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
19260 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
19270 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
19280 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
19290 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
192a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
192b0 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
192c0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
192d0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
192e0 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
192f0 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
19300 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
19310 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
19320 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
19330 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
19340 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19350 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
19360 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
19370 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
19380 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
19390 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
193a0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
193b0 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
193d0 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
193e0 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
193f0 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
19400 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19410 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
19420 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
19430 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
19440 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
19450 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
19460 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
19470 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
19480 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
19490 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
194a0 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
194b0 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
194c0 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
194d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
194e0 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
194f0 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
19500 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
19510 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
19520 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
19530 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
19540 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
19550 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
19560 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
19570 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
19580 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
19590 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
195a0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
195b0 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
195c0 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
195d0 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
195e0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
195f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
19600 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
19610 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
19620 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
19630 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
19640 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
19650 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
19660 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
19670 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
19680 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
19690 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
196a0 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
196b0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
196c0 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
196d0 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
196e0 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
196f0 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
19700 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
19710 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
19720 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
19730 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
19740 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
19750 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
19760 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
19770 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
19780 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
19790 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
197a0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
197b0 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
197c0 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
197d0 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
197e0 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
197f0 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
19800 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
19810 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
19820 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
19830 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
19840 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
19850 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
19860 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
19870 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
19880 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
19890 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
198a0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
198b0 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
198c0 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
198d0 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
198e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
198f0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
19900 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
19910 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19920 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
19930 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
19940 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
19950 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  e. */.  char aff
19960 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Sdst;        /* 
19970 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
19980 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
19990 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
199a0 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
199b0 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
199c0 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
199d0 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
199e0 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
199f0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
19a00 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
19a10 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
19a20 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
19a30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
19a40 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
19a50 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
19a60 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
19a70 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
19a80 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
19a90 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
19aa0 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
19ab0 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
19ac0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
19ad0 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
19ae0 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
19af0 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74  OINCREMENT .** t
19b00 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
19b10 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
19b20 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
19b30 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
19b40 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
19b50 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
19b60 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
19b70 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
19b80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
19b90 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
19ba0 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
19bb0 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
19bc0 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
19bd0 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
19be0 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
19bf0 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20  nserts are down 
19c00 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
19c10 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
19c20 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
19c30 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
19c40 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
19c50 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
19c60 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
19c70 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
19c80 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
19c90 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
19ca0 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
19cb0 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
19cc0 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
19cd0 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
19ce0 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
19cf0 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
19d00 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
19d10 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
19d20 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
19d30 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
19d40 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
19d50 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
19d60 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
19d70 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
19d80 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
19d90 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
19da0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
19db0 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
19dc0 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
19dd0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f  };../*.** Size o
19de0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  f the column cac
19df0 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  he.*/.#ifndef SQ
19e00 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a  LITE_N_COLCACHE.
19e10 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
19e20 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65  N_COLCACHE 10.#e
19e30 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  ndif../*.** At l
19e40 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
19e50 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
19e60 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
19e70 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
19e80 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61   .** trigger tha
19e90 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
19ea0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
19eb0 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
19ec0 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
19ed0 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
19ee0 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
19ef0 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
19f00 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
19f10 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
19f20 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
19f30 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
19f40 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
19f50 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
19f60 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
19f70 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
19f80 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
19f90 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
19fa0 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
19fb0 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
19fc0 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
19fd0 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
19fe0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
19ff0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
1a000 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
1a010 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
1a020 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
1a030 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
1a040 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1a050 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
1a060 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
1a070 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
1a080 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
1a090 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
1a0a0 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
1a0b0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1a0c0 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
1a0d0 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
1a0e0 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1a0f0 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
1a100 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
1a110 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
1a120 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
1a130 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  RT .** statement
1a140 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1a150 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1a160 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1a170 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1a180 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1a190 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1a1a0 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1a1b0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1a1c0 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1a1d0 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1a1e0 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1a1f0 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1a200 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1a210 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1a220 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1a230 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1a240 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1a250 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1a260 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1a270 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1a280 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1a290 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1a2b0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1a2c0 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1a2d0 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1a2e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1a2f0 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1a300 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1a310 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1a320 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1a330 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1a340 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1a350 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1a360 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1a370 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1a380 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1a390 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1a3a0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1a3b0 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1a3c0 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1a3d0 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1a3e0 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1a3f0 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1a400 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1a410 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1a420 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1a430 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1a440 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1a450 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1a460 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1a470 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1a480 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1a490 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1a4a0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1a4b0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1a4c0 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1a4d0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1a4e0 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1a4f0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1a500 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1a510 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1a520 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1a530 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1a540 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1a550 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1a560 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1a570 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1a580 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a590 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1a5a0 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1a5b0 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1a5c0 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1a5d0 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1a5e0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1a5f0 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1a600 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1a610 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1a620 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1a630 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1a640 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1a650 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1a660 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1a670 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1a680 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1a690 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1a6a0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1a6b0 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1a6c0 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1a6d0 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1a6e0 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1a6f0 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1a700 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1a710 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1a720 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1a730 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1a740 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1a750 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1a760 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1a770 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1a780 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1a790 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1a7a0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1a7b0 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1a7c0 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1a7d0 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66  ared-cache .** f
1a7e0 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1a7f0 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1a800 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1a810 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1a820 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1a830 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1a840 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1a850 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1a860 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1a870 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1a880 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1a890 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1a8a0 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1a8b0 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1a8c0 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1a8d0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1a8e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1a8f0 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1a900 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1a910 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1a920 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1a930 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1a940 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1a950 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1a960 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1a970 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1a980 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1a990 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1a9a0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1a9b0 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1a9c0 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1a9d0 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1a9e0 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1a9f0 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1aa00 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1aa10 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1aa20 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1aa30 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1aa40 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1aa50 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1aa60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1aa70 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1aa80 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1aa90 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1aaa0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1aab0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1aac0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1aad0 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1aae0 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1aaf0 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1ab00 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1ab10 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1ab20 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1ab30 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1ab40 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1ab50 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1ab60 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1ab70 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1ab80 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1ab90 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1aba0 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1abb0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1abc0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1abd0 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1abe0 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1abf0 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1ac00 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  ts */.  int aTem
1ac10 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
1ac20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
1ac30 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1ac40 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
1ac50 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1ac60 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
1ac70 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1ac80 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1ac90 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
1aca0 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
1acb0 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
1acc0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1acd0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1ace0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1acf0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
1ad00 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ad20 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
1ad30 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
1ad40 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
1ad50 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
1ad60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ad70 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
1ad80 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1ad90 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
1ada0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1adb0 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
1adc0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
1add0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1ade0 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
1adf0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
1ae00 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1ae10 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1ae20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1ae30 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1ae40 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1ae50 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20   int iFixedOp;  
1ae60 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62        /* Never b
1ae70 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20  ack out opcodes 
1ae80 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61  iFixedOp-1 or ea
1ae90 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63  rlier */.  int c
1aea0 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
1aeb0 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1aec0 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
1aed0 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
1aee0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74  s */.  int iPart
1aef0 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54  IdxTab;     /* T
1af00 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
1af10 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20  ng to a partial 
1af20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69  index */.  int i
1af30 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
1af40 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
1af50 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
1af60 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
1af70 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
1af80 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
1af90 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
1afa0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
1afb0 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
1afc0 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  ues */.  int nLa
1afd0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
1afe0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   Number of label
1aff0 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
1b000 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20  *aLabel;        
1b010 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
1b020 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a  d the labels */.
1b030 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
1b040 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
1b050 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
1b060 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
1b070 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
1b080 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
1b090 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
1b0a0 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
1b0b0 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
1b0c0 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
1b0d0 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
1b0e0 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
1b0f0 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
1b100 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
1b110 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
1b120 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
1b130 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
1b140 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
1b150 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1b160 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
1b170 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
1b180 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
1b190 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
1b1a0 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
1b1b0 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
1b1c0 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
1b1d0 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
1b1e0 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
1b1f0 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
1b200 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
1b210 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
1b220 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
1b230 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
1b240 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
1b250 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
1b260 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
1b270 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
1b280 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
1b290 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
1b2a0 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
1b2b0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
1b2c0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
1b2d0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
1b2e0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
1b2f0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
1b300 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
1b310 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
1b320 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49  cookieValue[SQLI
1b330 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1b340 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f  2];  /* Values o
1b350 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72  f cookies to ver
1b360 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ify */.  int reg
1b370 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
1b380 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1b390 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
1b3a0 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
1b3b0 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
1b3c0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1b3d0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
1b3e0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
1b3f0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
1b400 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
1b410 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
1b420 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
1b430 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
1b440 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66  b-program */.#if
1b450 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1b460 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1b470 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1b480 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b490 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1b4a0 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1b4b0 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1b4c0 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1b4d0 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1b4e0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1b4f0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1b500 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1b510 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1b520 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1b530 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1b540 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
1b550 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
1b560 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
1b570 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
1b580 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
1b590 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
1b5a0 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
1b5b0 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
1b5c0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
1b5d0 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
1b5e0 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
1b5f0 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
1b600 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
1b610 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
1b620 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
1b630 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e  eTable opcode on
1b640 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1b650 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50  .  int addrSkipP
1b660 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  K;      /* Addre
1b670 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f  ss of instructio
1b680 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52  n to skip PRIMAR
1b690 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20  Y KEY index */. 
1b6a0 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
1b6b0 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
1b6c0 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
1b6d0 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
1b6e0 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
1b6f0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
1b700 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
1b710 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
1b720 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
1b730 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
1b740 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
1b750 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1b760 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
1b770 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
1b780 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
1b790 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
1b7a0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
1b7b0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
1b7c0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1b7d0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
1b7e0 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
1b7f0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
1b800 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
1b810 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
1b820 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
1b830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b870 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
1b880 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
1b890 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
1b8a0 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
1b8b0 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
1b8c0 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
1b8d0 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
1b8e0 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
1b8f0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
1b900 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
1b910 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
1b920 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74  Parse,nVar) so t
1b930 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75  he nVar field mu
1b940 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20  st be the first 
1b950 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68  field.  ** in th
1b960 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
1b970 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
1b980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b9a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b9b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1b9c0 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20  .  int nVar;    
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b9e0 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
1b9f0 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
1ba00 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
1ba10 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20  /.  int nzVar;  
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ba30 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c   Number of avail
1ba40 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a  able slots in az
1ba50 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50  Var[] */.  u8 iP
1ba60 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1ba70 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1ba80 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1ba90 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1baa0 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20   u8 bFreeWith;  
1bab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1bac0 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75  ue if pWith shou
1bad0 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68  ld be freed with
1bae0 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20   parser */.  u8 
1baf0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
1bb00 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1bb10 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
1bb20 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
1bb30 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
1bb40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1bb50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
1bb60 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
1bb70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1bb80 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
1bb90 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1bba0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
1bbb0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
1bbc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
1bbd0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
1bbe0 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
1bbf0 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
1bc00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bc10 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
1bc20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1bc30 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
1bc40 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
1bc50 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
1bc60 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
1bc70 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
1bc80 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
1bc90 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1bca0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
1bcb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bcc0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
1bcd0 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
1bce0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
1bcf0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
1bd00 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
1bd10 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
1bd20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
1bd30 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1bd40 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1bd60 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
1bd70 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
1bd80 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
1bd90 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
1bda0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
1bdb0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
1bdc0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
1bdd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
1bde0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
1bdf0 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
1be00 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
1be10 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
1be20 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
1be30 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
1be40 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
1be50 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
1be60 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
1be70 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
1be80 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
1be90 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
1bea0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
1beb0 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
1bec0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1bed0 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
1bee0 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
1bef0 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
1bf00 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1bf10 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1bf20 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
1bf30 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
1bf40 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
1bf50 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
1bf60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
1bf70 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
1bf80 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1bf90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1bfa0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
1bfb0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1bfc0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
1bfd0 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
1bfe0 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
1bff0 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
1c000 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1c010 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
1c020 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
1c030 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
1c040 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
1c050 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
1c060 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
1c070 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
1c080 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
1c090 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
1c0a0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
1c0b0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
1c0c0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
1c0d0 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1c0e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
1c0f0 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
1c100 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a  , or NULL */.};.
1c110 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1c120 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
1c130 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
1c140 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1c150 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
1c160 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1c170 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
1c180 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1c190 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
1c1a0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1c1b0 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
1c1c0 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
1c1d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
1c1e0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1c1f0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1c200 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
1c210 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
1c220 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
1c230 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
1c240 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
1c250 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
1c260 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
1c270 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
1c280 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
1c290 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1c2a0 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
1c2b0 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
1c2c0 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
1c2d0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1c2e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1c2f0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
1c300 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
1c310 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
1c320 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
1c330 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
1c340 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c350 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
1c360 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
1c370 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
1c380 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
1c390 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
1c3a0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
1c3b0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1c3c0 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
1c3d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
1c3e0 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
1c3f0 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
1c400 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
1c410 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
1c420 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
1c430 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
1c440 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
1c450 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
1c460 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c470 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
1c480 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
1c490 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
1c4a0 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
1c4b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1c4c0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20  G_CLEARCACHE    
1c4d0 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72  0x20    /* Clear
1c4e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61   pseudo-table ca
1c4f0 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e  che in OP_Column
1c500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c510 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
1c520 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
1c530 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1c540 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
1c550 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
1c560 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
1c570 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1c580 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1c590 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
1c5a0 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
1c5b0 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
1c5c0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
1c5d0 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
1c5e0 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
1c5f0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
1c600 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
1c610 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
1c620 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
1c630 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
1c640 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
1c650 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1c660 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
1c670 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
1c680 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
1c690 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
1c6a0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1c6b0 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
1c6c0 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
1c6d0 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
1c6e0 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
1c6f0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
1c700 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1c710 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
1c720 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
1c730 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
1c740 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
1c750 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
1c760 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
1c770 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
1c780 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
1c790 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
1c7a0 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
1c7b0 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
1c7c0 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
1c7d0 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1c7e0 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
1c7f0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
1c800 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
1c810 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
1c820 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
1c830 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
1c840 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
1c850 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1c860 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
1c870 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
1c880 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
1c890 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
1c8a0 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
1c8b0 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
1c8c0 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
1c8d0 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
1c8e0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1c8f0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
1c900 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
1c910 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
1c920 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
1c930 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
1c940 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
1c950 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
1c960 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1c970 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1c980 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
1c990 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
1c9a0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
1c9b0 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
1c9c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
1c9d0 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
1c9e0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
1c9f0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
1ca00 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1ca10 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1ca20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1ca30 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1ca40 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
1ca50 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
1ca60 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1ca70 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
1ca80 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
1ca90 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
1caa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1cab0 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1cac0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
1cad0 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
1cae0 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
1caf0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
1cb00 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
1cb10 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
1cb20 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb40 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
1cb50 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
1cb60 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
1cb70 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1cb80 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
1cb90 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1cba0 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
1cbb0 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
1cbc0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1cbd0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1cbe0 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
1cbf0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
1cc00 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
1cc10 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1cc20 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
1cc30 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1cc40 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1cc50 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1cc60 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1cc70 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1cc80 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1cc90 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1cca0 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1ccb0 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1ccc0 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1ccd0 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1cce0 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1ccf0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1cd00 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1cd10 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1cd20 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1cd30 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1cd40 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1cd50 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1cd60 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1cd70 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1cd80 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1cd90 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1cda0 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1cdb0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1cdc0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1cdd0 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1cde0 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1cdf0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1ce00 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1ce10 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1ce20 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1ce30 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1ce40 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1ce50 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1ce60 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1ce70 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1ce80 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1ce90 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1cea0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1ceb0 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1cec0 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1ced0 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1cee0 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1cef0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1cf00 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1cf10 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1cf20 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1cf30 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1cf40 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1cf50 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1cf60 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1cf70 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1cf80 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1cf90 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1cfa0 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1cfb0 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1cfc0 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1cfd0 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1cfe0 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1cff0 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1d000 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1d010 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1d020 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1d030 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1d040 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1d050 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1d060 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1d070 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1d080 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1d090 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1d0a0 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1d0b0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1d0c0 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1d0d0 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
1d0e0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1d0f0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1d100 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1d110 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1d120 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1d130 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1d140 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1d150 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1d160 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1d180 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1d190 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1d1a0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d1b0 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1d1c0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1d1d0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1d1e0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1d1f0 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
1d200 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1d210 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
1d220 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
1d230 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1d250 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
1d260 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
1d270 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
1d280 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1d290 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1d2a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1d2b0 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
1d2c0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1d2d0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1d2e0 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
1d2f0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1d300 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1d310 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d320 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1d330 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
1d340 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
1d350 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1d360 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1d370 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1d380 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
1d390 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
1d3a0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1d3b0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1d3c0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1d3d0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1d3e0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1d3f0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1d400 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
1d410 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
1d420 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
1d430 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
1d440 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
1d450 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
1d460 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
1d470 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
1d480 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
1d490 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1d4b0 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1d4c0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1d4d0 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d4f0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1d500 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1d510 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1d520 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1d530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1d540 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1d550 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1d560 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1d570 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1d580 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1d590 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1d5a0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1d5b0 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
1d5c0 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1d5d0 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
1d5e0 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
1d5f0 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
1d600 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1d610 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1d620 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1d630 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1d640 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1d650 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1d660 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1d670 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1d680 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1d690 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1d6a0 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
1d6b0 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
1d6c0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
1d6d0 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
1d6e0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
1d6f0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
1d700 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
1d710 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1d720 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
1d730 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
1d740 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
1d750 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
1d760 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1d770 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1d780 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
1d790 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
1d7a0 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
1d7b0 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
1d7c0 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
1d7d0 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
1d7e0 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
1d7f0 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
1d800 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20  t.  .*/.typedef 
1d810 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
1d820 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
1d830 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
1d840 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
1d850 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
1d860 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
1d870 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
1d880 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1d890 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
1d8a0 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
1d8b0 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
1d8c0 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
1d8d0 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
1d8e0 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
1d8f0 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
1d900 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
1d910 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
1d920 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
1d930 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
1d940 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
1d950 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
1d960 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
1d970 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1d980 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1d990 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
1d9a0 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
1d9b0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1d9c0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1d9d0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1d9e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1d9f0 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
1da00 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
1da10 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
1da20 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
1da30 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
1da40 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
1da50 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
1da60 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
1da70 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
1da80 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1da90 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
1daa0 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
1dab0 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
1dac0 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
1dad0 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
1dae0 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
1daf0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
1db00 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
1db10 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
1db20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
1db30 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
1db40 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1db50 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
1db60 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
1db70 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
1db80 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
1db90 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
1dba0 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
1dbb0 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
1dbc0 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
1dbd0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1dbe0 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e  um allowed strin
1dbf0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38  g length */.  u8
1dc00 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20     useMalloc;   
1dc10 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20     /* 0: none,  
1dc20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  1: sqlite3DbMall
1dc30 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f  oc,  2: sqlite3_
1dc40 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20  malloc */.  u8  
1dc50 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
1dc60 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
1dc70 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
1dc80 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66  OOBIG */.};.#def
1dc90 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  ine STRACCUM_NOM
1dca0 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  EM   1.#define S
1dcb0 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20  TRACCUM_TOOBIG  
1dcc0 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  2../*.** A point
1dcd0 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
1dce0 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
1dcf0 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
1dd00 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
1dd10 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
1dd20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
1dd30 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
1dd40 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
1dd50 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
1dd60 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1dd70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
1dd80 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
1dd90 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
1dda0 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
1ddb0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1ddc0 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
1ddd0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1dde0 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
1ddf0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
1de00 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
1de10 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
1de20 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1de30 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1de40 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
1de50 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
1de60 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
1de70 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
1de80 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
1de90 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
1dea0 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
1deb0 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
1dec0 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
1ded0 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
1dee0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1def0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
1df00 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
1df10 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
1df20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1df30 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
1df40 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
1df50 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1df70 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1df80 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
1df90 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
1dfa0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1dfb0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1dfc0 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
1dfd0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1dfe0 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e000 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
1e010 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
1e020 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
1e030 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
1e040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
1e050 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
1e060 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
1e070 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  s */.  int mxStr
1e080 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
1e090 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1e0a0 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
1e0b0 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
1e0c0 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
1e0d0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1e0e0 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
1e0f0 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
1e100 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1e130 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1e140 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1e150 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1e160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1e170 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1e180 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1e190 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1e1a0 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1e1b0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1e1c0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1e1d0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1e1e0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1e1f0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1e200 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1e210 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1e220 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1e230 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1e240 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1e250 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1e260 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1e270 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1e2a0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1e2b0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e2d0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1e2e0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1e2f0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1e300 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1e310 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1e320 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1e330 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
1e340 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1e350 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
1e360 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
1e370 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1e380 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
1e390 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1e3a0 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
1e3b0 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
1e3c0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1e3d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
1e3e0 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
1e3f0 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1e420 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
1e430 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
1e440 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1e450 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e460 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
1e470 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
1e480 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
1e490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1e4a0 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
1e4b0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
1e4c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e4d0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1e4e0 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
1e4f0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1e500 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e520 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
1e530 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
1e540 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
1e550 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
1e560 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
1e570 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
1e580 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
1e590 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
1e5a0 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
1e5b0 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
1e5c0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
1e5d0 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  bled */.  /* The
1e5e0 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1e5f0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1e600 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1e610 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1e620 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1e630 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1e640 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1e650 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e670 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1e680 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1e690 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1e6a0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1e6d0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1e6e0 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1e6f0 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e710 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1e720 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1e730 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1e740 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e760 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1e770 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1e780 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1e790 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1e7a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e7b0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1e7c0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1e7d0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1e7e0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e7f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e800 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1e810 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
1e820 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1e830 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1e840 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1e850 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1e860 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1e870 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1e880 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1e890 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1e8a0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1e8b0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e8d0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1e8e0 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
1e8f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1e900 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1e910 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1e920 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1e930 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1e940 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1e950 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1e960 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1e970 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
1e980 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
1e990 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
1e9a0 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
1e9b0 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
1e9c0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
1e9d0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
1e9e0 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
1e9f0 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
1ea00 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
1ea10 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
1ea20 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
1ea30 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
1ea40 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1ea50 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
1ea60 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea90 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
1eaa0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1eab0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
1eac0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
1ead0 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
1eae0 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
1eaf0 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
1eb00 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
1eb10 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
1eb20 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1eb40 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
1eb50 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
1eb60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
1eb70 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
1eb80 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
1eb90 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
1eba0 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
1ebb0 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
1ebc0 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
1ebd0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1ebe0 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
1ebf0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1ec00 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
1ec10 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
1ec20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
1ec30 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
1ec40 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
1ec50 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
1ec60 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
1ec70 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
1ec80 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
1ec90 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
1eca0 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
1ecb0 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
1ecc0 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
1ecd0 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
1ece0 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
1ecf0 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
1ed00 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
1ed10 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
1ed20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1ed30 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
1ed40 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
1ed50 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
1ed60 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
1ed70 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
1ed80 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
1ed90 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
1eda0 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
1edb0 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
1edc0 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
1edd0 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
1ede0 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1edf0 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1ee00 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1ee10 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1ee20 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1ee30 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1ee40 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1ee50 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1ee60 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1ee70 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1ee80 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1ee90 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1eea0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1eeb0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
1eec0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
1eed0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
1eee0 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
1eef0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1ef00 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1ef10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ef30 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1ef40 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1ef50 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
1ef80 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69  queries */.  uni
1ef90 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1efc0 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1efd0 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1efe0 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1f010 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1f020 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
1f050 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  er value */.    
1f060 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1f070 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
1f090 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
1f0a0 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
1f0b0 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1f0d0 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
1f0e0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1f0f0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
1f100 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
1f110 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
1f120 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
1f130 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1f140 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
1f150 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
1f160 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f170 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
1f180 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1f190 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1f1a0 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
1f1b0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1f1c0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1f1d0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
1f1e0 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  lect*);../*.** R
1f1f0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1f200 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
1f210 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
1f220 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
1f230 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
1f240 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
1f250 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
1f260 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
1f270 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
1f280 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
1f290 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
1f2a0 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
1f2b0 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
1f2c0 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
1f2d0 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
1f2e0 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
1f2f0 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
1f300 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1f310 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1f320 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
1f330 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
1f340 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
1f350 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
1f360 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
1f370 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
1f380 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
1f390 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
1f3a0 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f3c0 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
1f3d0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1f3e0 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
1f3f0 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
1f400 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
1f410 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
1f420 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
1f430 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f450 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
1f460 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1f470 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
1f480 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f4a0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
1f4b0 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
1f4c0 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
1f4d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1f4e0 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
1f4f0 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
1f500 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
1f510 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
1f520 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f530 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
1f540 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
1f550 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20  nst char *zErr; 
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f570 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
1f580 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
1f590 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
1f5a0 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73  1];.};../*.** As
1f5b0 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
1f5c0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
1f5d0 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
1f5e0 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
1f5f0 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
1f600 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
1f610 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
1f620 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
1f630 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
1f640 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
1f650 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
1f660 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
1f670 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
1f680 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
1f6b0 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
1f6c0 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1f6e0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
1f720 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
1f730 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
1f740 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
1f750 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
1f760 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
1f770 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
1f780 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
1f790 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
1f7a0 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
1f7b0 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
1f7c0 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
1f7d0 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
1f7e0 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
1f7f0 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
1f800 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
1f810 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
1f820 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1f830 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
1f840 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
1f850 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
1f860 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
1f870 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1f880 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
1f890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
1f8a0 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
1f8b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1f8c0 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
1f8d0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1f8e0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1f8f0 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
1f900 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
1f910 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
1f920 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1f930 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
1f940 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1f950 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
1f960 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
1f970 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
1f980 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
1f990 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
1f9a0 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
1f9b0 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
1f9c0 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
1f9d0 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
1f9e0 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  so call.** the S
1f9f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1fa00 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1fa10 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
1fa20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1fa30 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
1fa40 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1fa50 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
1fa60 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1fa70 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
1fa80 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1fa90 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS3.#endif../*.*
1faa0 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
1fab0 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
1fac0 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
1fad0 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
1fae0 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
1faf0 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
1fb00 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
1fb10 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
1fb20 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1fb30 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
1fb40 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
1fb50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1fb60 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
1fb70 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
1fb80 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
1fb90 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
1fba0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1fbb0 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
1fbc0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
1fbd0 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
1fbe0 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
1fbf0 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
1fc00 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
1fc10 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
1fc20 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
1fc30 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
1fc40 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
1fc50 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1fc60 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
1fc70 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
1fc80 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
1fc90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fca0 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
1fcb0 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
1fcc0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1fcd0 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
1fce0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1fcf0 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
1fd00 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1fd10 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1fd20 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
1fd30 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1fd40 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1fd50 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1fd60 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
1fd70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1fd80 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
1fd90 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1fda0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1fdb0 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
1fdc0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1fdd0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1fde0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1fdf0 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
1fe00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1fe10 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
1fe20 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1fe30 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1fe40 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
1fe50 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1fe60 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
1fe70 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
1fe80 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
1fe90 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1fea0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
1feb0 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
1fec0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1fed0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1fee0 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
1fef0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1ff00 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1ff10 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1ff20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
1ff30 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1ff40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1ff50 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
1ff60 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
1ff70 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1ff80 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1ff90 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
1ffa0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1ffb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ffc0 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
1ffd0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
1ffe0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1fff0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
20000 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
20010 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20020 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
20030 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
20040 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
20050 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
20060 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
20070 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
20080 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
20090 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
200a0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
200b0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
200c0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
200d0 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
200e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
200f0 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
20100 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
20110 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
20120 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
20130 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
20140 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
20150 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
20160 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
20170 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
20180 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
20190 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
201a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
201b0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
201c0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
201d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
201e0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
201f0 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
20200 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
20210 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
20220 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
20230 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
20240 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
20250 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
20260 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
20270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
20280 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
20290 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
202a0 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
202b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
202c0 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
202d0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
202e0 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
202f0 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
20300 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
20310 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
20320 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
20330 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
20340 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
20350 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
20360 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
20370 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ult(void);.void 
20380 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
20390 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
203a0 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
203b0 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71  )(void));.int sq
203c0 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
203d0 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
203e0 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
203f0 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
20400 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
20410 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
20420 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
20430 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
20440 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
20450 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
20460 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
20470 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
20480 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
20490 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
204a0 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
204b0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
204c0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
204d0 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
204e0 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
204f0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
20500 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
20510 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
20520 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
20530 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
20540 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
20550 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
20560 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
20570 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
20580 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
20590 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
205a0 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
205b0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
205c0 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65  ,P)       .#else
205d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
205e0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
205f0 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
20600 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
20610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20620 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
20630 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
20640 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
20650 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20660 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
20670 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
20680 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
20690 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
206a0 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
206b0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
206c0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
206d0 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
206e0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
206f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
20700 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
20710 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
20720 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
20730 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
20740 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
20750 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
20760 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
20770 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
20780 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
20790 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
207a0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
207b0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
207c0 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
207d0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
207e0 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
207f0 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
20800 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
20810 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
20820 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
20830 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
20840 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
20850 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
20860 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e  ite3StatusAdd(in
20870 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
20880 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
20890 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64  nt, int);..#ifnd
208a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
208b0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
208c0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
208d0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
208e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
208f0 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
20900 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
20910 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
20920 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
20930 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
20940 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
20950 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
20960 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
20970 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
20980 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
20990 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
209a0 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
209b0 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
209d0 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
209e0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
209f0 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
20a00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20a10 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
20a20 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
20a30 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
20a40 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
20a50 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
20a60 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53  */.};..#define S
20a70 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
20a80 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69  ERNAL 0x01.#defi
20a90 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
20aa0 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76  _SQLFUNC  0x02.v
20ab0 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
20ac0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
20ad0 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
20ae0 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20   va_list);.void 
20af0 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
20b00 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63  trAccum*, u32, c
20b10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
20b20 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
20b30 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
20b40 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
20b50 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
20b60 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
20b70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
20b80 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73  a_list);.char *s
20b90 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73  qlite3MAppendf(s
20ba0 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f  qlite3*,char*,co
20bb0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
20bc0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20bd0 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69  TE_TEST) || defi
20be0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
20bf0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
20c00 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
20c10 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
20c20 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20c30 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
20c40 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
20c50 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
20c60 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
20c70 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d  ../* Output form
20c80 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54  atting for SQLIT
20c90 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41  E_TESTCTRL_EXPLA
20ca0 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  IN */.#if define
20cb0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
20cc0 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20  TREE_EXPLAIN).  
20cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
20ce0 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b  ainBegin(Vdbe*);
20cf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20d00 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62  xplainPrintf(Vdb
20d10 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
20d20 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71   ...);.  void sq
20d30 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56  lite3ExplainNL(V
20d40 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
20d50 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68  lite3ExplainPush
20d60 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
20d70 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f  sqlite3ExplainPo
20d80 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  p(Vdbe*);.  void
20d90 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
20da0 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  inish(Vdbe*);.  
20db0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
20dc0 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c  ainSelect(Vdbe*,
20dd0 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69   Select*);.  voi
20de0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
20df0 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72  Expr(Vdbe*, Expr
20e00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20e10 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
20e20 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73  t(Vdbe*, ExprLis
20e30 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t*);.  const cha
20e40 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78  r *sqlite3VdbeEx
20e50 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29  planation(Vdbe*)
20e60 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20e70 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
20e80 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
20e90 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
20ea0 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66  elect(A,B).# def
20eb0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
20ec0 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65  inExpr(A,B).# de
20ed0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
20ee0 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29  ainExprList(A,B)
20ef0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20f00 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58  3ExplainFinish(X
20f10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20f20 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
20f30 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
20f40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
20f50 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
20f60 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
20f70 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
20f80 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
20f90 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20fa0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
20fb0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
20fc0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
20fd0 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
20fe0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
20ff0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
21000 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
21010 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
21020 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
21030 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
21040 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
21050 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
21060 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
21070 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
21080 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
21090 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
210a0 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
210b0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
210c0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
210d0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
210e0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
210f0 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
21100 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
21110 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
21120 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
21130 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
21140 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
21150 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
21160 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
21170 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21180 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
21190 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
211a0 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
211b0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
211c0 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
211d0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
211e0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
211f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
21200 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
21210 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
21220 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
21230 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
21240 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
21250 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21260 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
21270 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
21280 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21290 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
212a0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
212b0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
212c0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
212d0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
212e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
212f0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
21300 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
21310 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
21320 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
21330 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
21340 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
21350 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21360 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
21370 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
21380 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
21390 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
213a0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
213b0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
213c0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
213d0 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
213e0 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
213f0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
21400 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
21410 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21420 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
21430 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
21440 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
21450 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
21460 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
21470 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
21480 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
21490 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
214a0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
214b0 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
214c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
214d0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
214e0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
214f0 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
21500 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
21510 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
21520 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
21530 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
21540 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
21550 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
21560 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
21570 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
21580 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
21590 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
215a0 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
215b0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
215c0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
215d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
215e0 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
215f0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
21600 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
21610 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
21620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
21630 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
21640 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
21650 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
21660 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
21670 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
21680 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
21690 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
216a0 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
216b0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
216c0 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
216d0 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
216e0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
216f0 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
21700 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
21710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
21720 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
21730 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
21740 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
21750 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
21760 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
21770 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
21780 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
21790 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
217a0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
217b0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
217c0 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
217d0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
217e0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
217f0 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
21800 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20  rse *);..#ifdef 
21810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
21820 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e  TIN_TEST.# defin
21830 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
21840 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
21850 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
21860 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
21870 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
21880 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
21890 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
218a0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
218b0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
218c0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
218d0 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
218e0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
218f0 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
21900 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
21910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
21920 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
21930 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
21940 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
21950 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ec*);.int sqlite
21960 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
21970 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52  st(int,int*);..R
21980 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
21990 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
219a0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
219b0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
219c0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
219d0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
219e0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
219f0 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
21a00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
21a10 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
21a20 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
21a30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
21a40 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
21a50 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
21a60 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
21a70 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
21a80 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
21a90 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
21aa0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
21ab0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
21ac0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
21ad0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21ae0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
21af0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
21b00 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
21b10 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
21b20 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
21b30 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
21b40 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
21b50 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
21b60 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
21b70 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
21b80 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
21b90 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
21ba0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
21bb0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
21bc0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21bd0 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
21be0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
21bf0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21c00 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
21c10 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
21c20 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
21c30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
21c40 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
21c50 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
21c60 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
21c70 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
21c80 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
21c90 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
21ca0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
21cb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21cc0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
21cd0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
21ce0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
21cf0 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
21d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
21d10 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
21d20 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
21d30 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
21d40 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
21d50 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
21d60 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
21d70 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
21d80 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
21d90 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
21da0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
21db0 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
21dc0 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
21dd0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
21de0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
21df0 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
21e00 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
21e10 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
21e20 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
21e30 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
21e40 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
21e50 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
21e60 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
21e70 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
21e80 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
21e90 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
21ea0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
21ed0 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
21ee0 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
21ef0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
21f00 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
21f10 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
21f20 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  oken *);.int sql
21f30 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
21f40 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
21f50 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
21f60 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
21f70 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
21f80 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
21f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
21fa0 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
21fb0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
21fc0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
21fd0 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
21fe0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
21ff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
22000 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
22010 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
22020 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
22030 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
22040 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
22050 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
22060 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
22070 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
22080 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
22090 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
220a0 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
220d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
220e0 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
220f0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
22100 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22110 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
22120 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
22130 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
22140 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
22150 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
22160 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
22170 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22190 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
221a0 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70  t*,u16,Expr*,Exp
221b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
221c0 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
221d0 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
221e0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
221f0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
22200 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
22210 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
22220 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
22230 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
22240 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
22250 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
22260 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
22270 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
22280 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
22290 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
222a0 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
222b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
222c0 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
222d0 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
222e0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
222f0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
22300 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
22310 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
22320 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
22330 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
22340 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
22350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
22360 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
22370 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
22380 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
22390 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
223a0 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
223b0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
223c0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
223d0 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
223e0 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
223f0 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
22400 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72  .u64 sqlite3Wher
22410 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
22420 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
22430 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
22440 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
22450 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22460 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
22470 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
22480 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
22490 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
224a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
224b0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
224c0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
224d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
224e0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
224f0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22500 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
22510 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
22520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22530 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
22540 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
22550 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
22560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22570 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
22580 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
22590 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
225a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
225b0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
225c0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
225d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
225e0 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
225f0 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
22600 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22610 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
22620 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
22630 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22640 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
22650 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22660 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
22670 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
22680 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22690 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
226a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
226b0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
226c0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
226d0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
226e0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
226f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
22700 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22710 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
22720 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
22730 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22740 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
22750 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
22760 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
22770 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
22780 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
22790 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
227a0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
227b0 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
227c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
227d0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
227e0 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
227f0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
22800 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
22810 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
22820 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75  xprList*, int, u
22830 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
22840 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
22850 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
22860 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
22870 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
22880 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
22890 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
228a0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
228b0 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71  terms */.void sq
228c0 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
228d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
228e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
228f0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
22900 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22910 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
22920 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
22930 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
22940 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
22950 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
22960 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
22970 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
22980 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
22990 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
229a0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
229b0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
229c0 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
229d0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
229e0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
229f0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
22a00 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22a10 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
22a20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22a30 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
22a40 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
22a50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
22a60 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
22a70 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
22a80 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
22a90 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22aa0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
22ab0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
22ac0 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
22ad0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
22ae0 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
22af0 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
22b00 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
22b10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
22b20 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
22b30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
22b40 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
22b50 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
22b60 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
22b70 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
22b80 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c  pliesExpr(Expr*,
22b90 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
22ba0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
22bb0 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
22bc0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
22bd0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
22be0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
22bf0 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
22c00 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
22c10 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
22c20 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
22c30 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
22c40 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
22c50 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  dbe(Parse*);.voi
22c60 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
22c70 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
22c80 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
22c90 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
22ca0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22cb0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
22cc0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
22cd0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
22ce0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
22cf0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22d00 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
22d10 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
22d20 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
22d30 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
22d40 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
22d50 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
22d60 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
22d70 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
22d80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22d90 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
22da0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
22db0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
22dc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
22dd0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
22de0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
22df0 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
22e00 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
22e10 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
22e20 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
22e30 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
22e40 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
22e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22e60 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
22e70 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
22e80 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
22e90 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
22ea0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
22eb0 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
22ec0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
22ed0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
22ee0 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
22ef0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22f00 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
22f10 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
22f20 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
22f30 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
22f40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
22f50 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
22f60 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73  teRowDelete(Pars
22f70 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65  e*,Table*,Trigge
22f80 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  r*,int,int,int,i
22f90 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f  16,u8,u8,u8);.vo
22fa0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
22fb0 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
22fc0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22fd0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29   int, int, int*)
22fe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
22ff0 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
23000 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
23010 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
23020 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
23030 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
23040 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
23050 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
23060 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
23070 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73  ConstraintChecks
23080 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
23090 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
230a0 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  int,.           
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c            u8,u8,
230d0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
230e0 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
230f0 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
23100 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
23110 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
23120 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23130 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
23140 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
23150 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  le*, int, int, u
23160 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
23170 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
23180 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
23190 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
231a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
231b0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
231c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
231d0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
231e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
231f0 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
23200 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
23210 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
23220 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
23230 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
23240 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
23250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
23260 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
23270 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
23280 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
23290 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
232a0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
232b0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
232c0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
232d0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
232e0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
232f0 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
23300 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
23310 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
23320 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
23330 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
23340 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
23350 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
23360 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
23370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
23380 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e  uncDefInsert(Fun
23390 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44  cDefHash*, FuncD
233a0 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  ef*);.FuncDef *s
233b0 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
233c0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
233d0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c  t char*,int,int,
233e0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
233f0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
23400 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
23410 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
23420 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
23430 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
23440 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
23450 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
23460 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
23470 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
23480 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
23490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
234a0 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
234b0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
234c0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
234d0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
234e0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
234f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
23500 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
23510 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
23520 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
23530 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
23540 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
23550 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
23560 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
23570 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
23580 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
23590 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
235a0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
235b0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
235c0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235e0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
235f0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
23600 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
23610 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
23620 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
23630 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
23640 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
23650 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
23660 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
23670 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
23680 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
23690 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
236a0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
236b0 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
236c0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
236d0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
236e0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
236f0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
23700 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
23710 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
23720 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
23730 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
23740 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
23750 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
23760 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23780 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
23790 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
237a0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
237b0 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
237c0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
237d0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
237e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
237f0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
23800 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
23810 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
23820 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23830 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
23840 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
23850 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
23860 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
23870 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
23880 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
23890 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
238a0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
238b0 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
238c0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
238d0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
23910 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
23920 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
23930 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
23940 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
23950 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
23960 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
23970 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
23980 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
23990 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
239a0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
239b0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
239c0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
239d0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
239e0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
239f0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
23a00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
23a10 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
23a20 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
23a30 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
23a40 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
23a50 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
23a60 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
23a70 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
23a80 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
23a90 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
23aa0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
23ab0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
23ac0 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
23ad0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
23ae0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
23af0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
23b00 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
23b10 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
23b20 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
23b30 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
23b40 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
23b50 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
23b60 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
23b70 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
23b80 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
23b90 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
23ba0 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
23bb0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
23bc0 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
23bd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23be0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
23bf0 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
23c00 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
23c10 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
23c20 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
23c30 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
23c40 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
23c50 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
23c60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
23c70 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
23c80 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
23c90 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
23ca0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
23cb0 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
23cc0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
23cd0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
23ce0 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
23cf0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
23d00 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
23d10 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
23d20 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
23d30 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
23d40 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
23d50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
23d60 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
23d70 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
23d80 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
23d90 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
23da0 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
23db0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
23dc0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
23dd0 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
23de0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
23df0 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
23e00 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
23e10 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
23e20 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
23e30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
23e40 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
23e50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23e60 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
23e70 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
23e80 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
23e90 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
23ea0 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
23eb0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
23ec0 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
23ed0 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
23ee0 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
23ef0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
23f00 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
23f10 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
23f20 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
23f30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
23f40 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
23f50 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
23f60 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
23f70 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
23f80 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
23f90 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
23fa0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23fb0 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
23fc0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
23fd0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
23fe0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
23ff0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24000 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
24010 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
24020 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
24030 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
24040 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
24050 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
24060 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
24070 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
24080 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24090 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
240a0 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
240b0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
240c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
240d0 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
240e0 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
240f0 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
24100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
24110 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
24120 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
24130 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
24140 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
24150 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
24160 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
24170 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
24180 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
24190 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
241a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
241b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
241c0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
241d0 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
241e0 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34  ble);.#endif.u64
241f0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
24200 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a  Int(LogEst);../*
24210 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
24220 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
24230 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
24240 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
24250 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
24260 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
24270 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
24280 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
24290 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
242a0 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
242b0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
242c0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
242d0 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
242e0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
242f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
24300 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
24310 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
24320 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
24330 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
24340 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
24350 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
24360 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
24370 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
24380 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
24390 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
243a0 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
243b0 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
243c0 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
243d0 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
243e0 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
243f0 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
24400 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
24410 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
24420 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
24430 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
24440 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
24450 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
24460 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
24470 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
24480 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
24490 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
244a0 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
244b0 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
244c0 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
244d0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
244e0 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
244f0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
24500 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
24510 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
24520 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
24530 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
24540 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
24550 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
24560 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20  nityStr(Vdbe *, 
24570 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73  Index *);.void s
24580 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
24590 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
245a0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
245b0 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
245c0 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
245d0 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
245e0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
245f0 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
24600 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
24610 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
24620 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
24630 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
24640 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
24650 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
24660 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
24670 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
24680 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
24690 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
246a0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
246b0 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
246c0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
246d0 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
246e0 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
246f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  *,int);.void *sq
24700 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73  lite3HexToBlob(s
24710 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
24720 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a  har *z, int n);.
24730 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
24740 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73  nt(int h);.int s
24750 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
24760 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  e(Parse *, Token
24770 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
24780 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66  en **);..#if def
24790 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
247a0 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ) .const char *s
247b0 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
247c0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
247d0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
247e0 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
247f0 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
24800 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
24810 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
24820 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
24830 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
24840 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
24850 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
24860 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
24870 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
24880 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
24890 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
248a0 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
248b0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
248c0 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
248d0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
248e0 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
248f0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
24900 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
24910 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
24920 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
24930 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
24940 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
24950 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
24960 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
24970 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
24980 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
24990 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
249a0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
249b0 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
249c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
249d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
249e0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
249f0 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
24a00 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
24a10 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
24a20 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
24a30 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
24a40 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
24a50 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
24a60 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
24a70 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
24a80 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
24a90 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
24aa0 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
24ab0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
24ac0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24ad0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
24ae0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
24af0 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
24b00 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
24b10 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
24b20 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
24b30 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
24b40 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
24b50 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
24b60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
24b70 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
24b80 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
24b90 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
24ba0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
24bb0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
24bd0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
24be0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
24bf0 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
24c00 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
24c10 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
24c20 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
24c30 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
24c40 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
24c50 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
24c60 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
24c70 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
24c80 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
24c90 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
24ca0 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
24cb0 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
24cc0 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
24cd0 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
24ce0 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
24cf0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
24d00 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
24d10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24d20 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
24d30 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
24d40 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
24d50 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
24d60 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
24d70 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
24d80 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
24d90 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
24da0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
24db0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
24dc0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
24dd0 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
24de0 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
24df0 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
24e00 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
24e10 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
24e20 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
24e30 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
24e40 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  te3GlobalFunctio
24e50 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
24e60 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
24e70 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
24e80 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
24e90 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
24ea0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
24eb0 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
24ec0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24ed0 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
24ee0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
24ef0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24f00 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
24f10 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
24f20 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
24f30 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
24f40 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
24f50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
24f60 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
24f70 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
24f80 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
24f90 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
24fa0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
24fb0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
24fc0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
24fd0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
24fe0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
24ff0 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
25000 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ct(Parse *, Expr
25010 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
25020 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
25030 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
25040 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
25050 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
25060 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
25070 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25080 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
25090 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
250a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
250b0 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
250c0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
250d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
250e0 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
250f0 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
25100 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
25110 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
25120 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
25130 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
25140 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
25150 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
25160 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
25170 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
25180 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
25190 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
251a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
251b0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
251c0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
251d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
251e0 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
251f0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
25200 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
25210 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
25220 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
25230 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
25240 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
25250 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
25260 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
25270 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
25280 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
25290 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
252a0 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
252b0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
252c0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
252d0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
252e0 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
252f0 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
25300 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ler*);.int sqlit
25310 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33  e3FindDb(sqlite3
25320 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
25330 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
25340 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  e(sqlite3 *, con
25350 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
25360 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
25370 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
25380 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
25390 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61  te3DeleteIndexSa
253a0 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49  mples(sqlite3*,I
253b0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
253c0 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73  ite3DefaultRowEs
253d0 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  t(Index*);.void 
253e0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
253f0 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  ikeFunctions(sql
25400 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  ite3*, int);.int
25410 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75   sqlite3IsLikeFu
25420 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
25430 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a  Expr*,int*,char*
25440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
25450 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74  inimumFileFormat
25460 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
25470 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25480 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
25490 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
254a0 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
254b0 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
254c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
254d0 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
254e0 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
254f0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
25500 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
25510 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
25520 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25530 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
25540 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
25550 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
25560 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
25570 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
25580 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
25590 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
255a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
255b0 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
255c0 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
255d0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
255e0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
255f0 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
25600 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
25610 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
25620 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
25630 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
25640 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
25650 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
25660 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
25670 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
25680 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
25690 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
256a0 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
256b0 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
256c0 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
256d0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
256e0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
256f0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
25700 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
25710 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
25720 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
25730 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
25740 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25750 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
25760 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
25770 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
25780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
25790 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
257a0 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
257b0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
257c0 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53  te3AppendSpace(S
257d0 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63  trAccum*,int);.c
257e0 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
257f0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
25800 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
25810 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
25820 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
25830 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
25840 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
25850 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
25860 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
25870 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
25880 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
25890 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
258a0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
258b0 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
258c0 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
258d0 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
258e0 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
258f0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
25900 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
25910 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
25920 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
25930 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
25940 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
25950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
25960 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
25970 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
25980 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
25990 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
259a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
259b0 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
259c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
259d0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
259e0 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
259f0 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
25a00 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
25a10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
25a20 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
25a30 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
25a40 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
25a50 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
25a60 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
25a70 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
25a80 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
25a90 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
25aa0 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
25ab0 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
25ac0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
25ad0 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
25ae0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
25af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
25b00 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
25b10 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
25b20 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
25b30 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
25b40 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
25b50 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
25b60 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
25b70 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
25b80 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
25b90 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
25ba0 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
25bb0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
25bc0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
25bd0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
25be0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25bf0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
25c00 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
25c10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25c20 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
25c30 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
25c40 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
25c50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
25c60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
25c70 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
25c80 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
25c90 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
25ca0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
25cb0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
25cc0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
25cd0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
25ce0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
25cf0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25d00 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
25d10 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
25d20 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
25d30 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
25d40 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
25d50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
25d60 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
25d70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25d80 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
25d90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
25da0 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
25db0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25dc0 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
25dd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
25de0 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
25df0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
25e00 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
25e10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25e20 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
25e30 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
25e40 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25e50 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
25e60 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
25e70 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
25e80 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
25e90 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
25ea0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
25eb0 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
25ec0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
25ed0 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
25ee0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
25ef0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
25f00 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
25f10 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
25f20 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
25f30 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
25f40 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
25f50 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
25f60 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
25f70 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
25f80 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
25f90 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
25fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
25fb0 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
25fc0 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
25fd0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
25fe0 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
25ff0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
26000 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
26010 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
26020 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
26030 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
26040 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
26050 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
26060 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26070 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
26080 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
26090 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
260a0 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
260b0 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
260c0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
260d0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
260e0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
260f0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
26100 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
26110 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26120 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
26130 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
26140 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26150 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
26160 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26170 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
26180 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
26190 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
261a0 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
261b0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
261c0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
261d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
261e0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
261f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
26200 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
26210 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
26220 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
26230 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
26240 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
26250 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
26260 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
26270 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
26280 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
26290 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
262a0 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
262b0 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
262c0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
262d0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
262e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
262f0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
26300 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
26310 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
26320 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
26330 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
26340 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
26350 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
26360 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
26370 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
26380 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
26390 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
263a0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
263b0 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
263c0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
263d0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
263e0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
263f0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
26400 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
26410 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
26420 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
26430 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
26440 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
26450 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
26460 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
26470 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
26480 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
26490 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
264a0 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
264b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
264c0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
264d0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
264e0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
264f0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
26500 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
26510 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
26520 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
26530 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
26540 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
26550 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
26560 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
26570 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
26580 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
26590 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
265a0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
265b0 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
265c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
265d0 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
265e0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
265f0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
26600 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
26610 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
26620 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
26630 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
26640 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
26650 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
26660 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
26670 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
26680 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
26690 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
266a0 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
266b0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
266c0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
266d0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
266e0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
266f0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
26700 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
26710 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
26720 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
26730 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
26740 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
26750 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
26760 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
26770 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
26780 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
26790 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
267a0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
267b0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
267c0 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
267d0 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
267e0 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
267f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26800 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
26810 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26820 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
26830 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
26840 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
26850 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
26860 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
26870 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
26880 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
26890 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
268a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
268b0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
268c0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
268d0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
268e0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
268f0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
26900 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
26910 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
26920 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
26930 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
26940 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
26950 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
26960 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
26970 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
26980 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
26990 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
269a0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
269b0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
269c0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
269d0 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
269e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
269f0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
26a00 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
26a10 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
26a20 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
26a30 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
26a40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
26a50 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
26a60 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
26a70 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
26a80 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
26a90 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
26aa0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
26ab0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
26ac0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
26ad0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
26ae0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
26af0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
26b00 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
26b10 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
26b20 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
26b30 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
26b40 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
26b50 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
26b60 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
26b70 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
26b80 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
26b90 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
26ba0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
26bb0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
26bc0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
26bd0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
26be0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
26bf0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
26c00 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
26c10 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
26c20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
26c30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
26c40 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
26c50 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
26c60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
26c70 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
26c80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
26c90 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
26ca0 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
26cb0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
26cc0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
26cd0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
26ce0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
26cf0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
26d00 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
26d10 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
26d20 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
26d30 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
26d40 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
26d50 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
26d60 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
26d70 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
26d80 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
26d90 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
26da0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
26db0 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
26dc0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
26dd0 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
26de0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
26df0 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
26e00 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
26e10 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
26e20 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
26e30 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
26e40 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
26e50 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
26e60 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
26e70 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
26e80 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
26e90 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
26ea0 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
26eb0 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
26ec0 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
26ed0 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
26ee0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
26ef0 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
26f00 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
26f10 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
26f20 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
26f30 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
26f40 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
26f50 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
26f60 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
26f70 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
26f80 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
26f90 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
26fa0 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
26fb0 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
26fc0 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
26fd0 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
26fe0 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
26ff0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
27000 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
27010 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
27020 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
27030 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
27040 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
27050 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
27060 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
27070 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
27080 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
27090 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
270a0 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
270b0 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
270c0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
270d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
270e0 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
270f0 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
27100 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
27110 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
27120 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
27130 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
27140 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
27150 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
27160 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
27170 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
27180 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
27190 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
271a0 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
271b0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
271c0 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
271d0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69  te3_file *);..#i
271e0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
271f0 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64  R_DEPTH>0.  void
27200 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
27210 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61  eight(Parse *pPa
27220 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20  rse, Expr *p);. 
27230 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
27240 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
27250 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
27260 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
27270 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
27280 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27290 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  ne sqlite3ExprSe
272a0 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23  tHeight(x,y).  #
272b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
272c0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
272d0 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
272e0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
272f0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
27300 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
27310 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
27320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
27330 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
27340 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27350 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
27360 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
27370 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
27380 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
27390 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
273a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
273b0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
273c0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
273d0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
273e0 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
273f0 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
27400 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27410 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
27420 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
27430 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
27440 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
27450 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
27460 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
27470 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
27480 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27490 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
274a0 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
274b0 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
274c0 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
274d0 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
274e0 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
274f0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
27500 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
27510 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
27520 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
27530 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
27540 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
27550 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
27560 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  s. .*/.#ifdef SQ
27570 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
27580 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
27590 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
275a0 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
275b0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
275c0 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
275d0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
275e0 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45  Vdbe*);.SQLITE_E
275f0 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c  XTERN void (*sql
27600 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
27610 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
27620 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
27630 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
27640 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
27650 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
27660 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
27670 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
27680 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
27690 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
276a0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
276b0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
276c0 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
276d0 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
276e0 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
276f0 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
27700 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
27710 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
27720 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
27730 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
27740 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
27750 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
27760 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
27770 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
27780 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
27790 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
277a0 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
277b0 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
277c0 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
277d0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
277e0 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
277f0 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
27800 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
27810 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
27820 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
27830 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
27840 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
27850 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
27860 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
27870 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
27880 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
27890 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
278a0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
278b0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
278c0 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
278d0 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
278e0 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
278f0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
27900 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
27910 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
27920 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
27930 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
27940 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
27950 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
27960 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
27970 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
27980 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
27990 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
279a0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
279b0 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
279c0 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
279d0 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
279e0 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
279f0 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
27a00 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
27a10 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
27a20 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
27a30 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
27a40 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
27a50 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
27a60 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
27a70 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
27a80 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
27a90 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
27aa0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
27ab0 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
27ac0 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
27ad0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
27ae0 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
27af0 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
27b00 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
27b10 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
27b20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
27b30 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
27b40 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
27b50 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
27b60 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
27b70 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
27b80 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
27b90 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
27ba0 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
27bb0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
27bc0 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
27bd0 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
27be0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
27bf0 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
27c00 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
27c10 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
27c20 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
27c30 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
27c40 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
27c50 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
27c60 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
27c70 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
27c80 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
27c90 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
27ca0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
27cb0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
27cc0 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
27cd0 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
27ce0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
27cf0 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
27d00 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
27d10 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
27d20 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
27d30 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
27d40 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
27d50 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
27d60 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 76  02  /* Might hav
27d70 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
27d80 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69   memory */.#defi
27d90 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
27da0 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
27db0 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
27dc0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
27dd0 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
27de0 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
27df0 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
27e00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
27e10 59 50 45 5f 44 42 20 20 20 20 20 20 20 20 20 30  YPE_DB         0
27e20 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73 71 6c  x10  /* Uses sql
27e30 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f  ite3DbMalloc, no
27e40 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20  t sqlite_malloc 
27e50 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
27e60 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
27e70 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
27e80 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
27e90 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
27ea0 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
27eb0 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
27ec0 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
27ed0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
27ee0 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
27ef0 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
27f00 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
27f10 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
27f20 0a                                               .