/ Hex Artifact Content
Login

Artifact 97df117e13dea9d2fe8a8e32376222e03fe4a4c9:


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 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
16b0: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
16c0: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
16d0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
16e0: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
16f0: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1700: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1710: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1720: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1730: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1740: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1750: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1760: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1770: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1780: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1790: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
17a0: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
17b0: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
17c0: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
17d0: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
17e0: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
17f0: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1800: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1810: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1820: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1830: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1840: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1850: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1860: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1870: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1880: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1890: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
18a0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
18b0: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
18c0: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
18d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
18e0: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
18f0: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1910: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1920: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1930: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1940: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1950: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1960: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1970: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1980: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1990: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
19a0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
19b0: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
19c0: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
19d0: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
19e0: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
19f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1a00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1a10: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1a20: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45  ** The SQLITE_DE
1a30: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
1a40: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1a50: 66 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20  fined as either 
1a60: 30 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65  0 or 1..** It de
1a70: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
1a80: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74   or not the feat
1a90: 75 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  ures related to 
1aa0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  .** SQLITE_CONFI
1ab0: 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20  G_MEMSTATUS are 
1ac0: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ad0: 61 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69  ault or not. Thi
1ae0: 73 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62  s value can.** b
1af0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  e overridden at 
1b00: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
1b10: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  e sqlite3_config
1b20: 28 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21  () API..*/.#if !
1b30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b40: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1b50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b60: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1b70: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1b80: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1b90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba0: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1bb0: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1bc0: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1bd0: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1be0: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1bf0: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1c00: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1c10: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1c20: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1c30: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1c40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1c50: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1c60: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1c70: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1c80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1c90: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1ca0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1cb0: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1cc0: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1cd0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1ce0: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1cf0: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1d00: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1d10: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1d20: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1d30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1d40: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1d50: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1d60: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1d70: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1d80: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1d90: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
1da0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
1db0: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
1dc0: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
1dd0: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
1de0: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
1df0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
1e00: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
1e10: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
1e20: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
1e30: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1e40: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1e50: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1e60: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1e70: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1e80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1e90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1ea0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1eb0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
1ec0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1ed0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
1ee0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1ef0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1f00: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1f10: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1f40: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1f50: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1f60: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1f70: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1f80: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1f90: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
1fa0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
1fb0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
1fc0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
1fd0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1fe0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1ff0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2010: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2020: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2030: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2040: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2050: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
2060: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2070: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
2080: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2090: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
20a0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
20b0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
20c0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
20d0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
20e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
20f0: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2100: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2110: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2120: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2130: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
2140: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2150: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
2160: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
2170: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
2180: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
2190: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
21a0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
21b0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
21c0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
21d0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
21e0: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
21f0: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2200: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2210: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2220: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2230: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
2240: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
2250: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
2260: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
2270: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
2280: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
2290: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
22a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
22b0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
22c0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
22d0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
22e0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
22f0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2300: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2310: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2320: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2330: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
2340: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
2350: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
2360: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
2370: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
2380: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
2390: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
23a0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
23b0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
23c0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23d0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
23e0: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
23f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2400: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2410: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2420: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2430: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
2440: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
2450: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
2460: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
2470: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
2480: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
2490: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
24a0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
24b0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
24d0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
24e0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24f0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2500: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2510: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2520: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2530: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2540: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2550: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2560: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2570: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2580: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2590: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
25a0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
25c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
25d0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
25e0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
25f0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2600: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2610: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2620: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2630: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
2640: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2650: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2660: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2670: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2680: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2690: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
26a0: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
26b0: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
26c0: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
26d0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
26e0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
26f0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2700: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2710: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2720: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2730: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2740: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2750: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2760: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2770: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2780: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2790: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
27a0: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
27b0: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
27c0: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
27d0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
27e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
27f0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2800: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2810: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2820: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2830: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2840: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2850: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2860: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2870: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2880: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2890: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
28a0: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
28b0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
28c0: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28d0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
28e0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
28f0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2900: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2910: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2920: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2930: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2940: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2950: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2960: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2970: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2980: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2990: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
29a0: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
29b0: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
29c0: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
29d0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
29e0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
29f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2a00: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2a10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2a20: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2a30: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2a40: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2a50: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2a60: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2a70: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2a80: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2a90: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2aa0: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2ab0: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2ac0: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2ad0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2ae0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2af0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2b00: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2b10: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2b20: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2b30: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2b40: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2b50: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2b60: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2b70: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2b80: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2b90: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2ba0: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2bb0: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2bc0: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2bd0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2be0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2bf0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2c00: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2c10: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2c20: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2c30: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2c40: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2c50: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2c60: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2c70: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2c80: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2c90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2ca0: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2cb0: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2cc0: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2cd0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ce0: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2cf0: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2d00: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2d10: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2d20: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2d30: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2d40: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2d50: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2d60: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2d70: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2d80: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2d90: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
2da0: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
2db0: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
2dc0: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
2dd0: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
2de0: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
2df0: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
2e00: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
2e10: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
2e20: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
2e30: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
2e40: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
2e50: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
2e60: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
2e70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
2e80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2e90: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
2ea0: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
2eb0: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
2ec0: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
2ed0: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
2ee0: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
2ef0: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
2f00: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
2f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2f20: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2f30: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2f40: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
2f50: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
2f60: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
2f70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
2f80: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
2f90: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
2fa0: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
2fb0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2fc0: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
2fd0: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
2fe0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2ff0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3000: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3010: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3020: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3030: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
3040: 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e  he input is a in
3050: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
3060: 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69  o large.** to fi
3070: 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54  t in 32-bits.  T
3080: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
3090: 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69  d inside of vari
30a0: 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a  ous testcase().*
30b0: 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69  * macros to veri
30c0: 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20  fy that we have 
30d0: 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f  tested SQLite fo
30e0: 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70  r large-file sup
30f0: 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  port..*/.#define
3100: 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20   IS_BIG_INT(X)  
3110: 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66  (((X)&~(i64)0xff
3120: 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a  ffffff)!=0)../*.
3130: 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c  ** The macro unl
3140: 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e  ikely() is a hin
3150: 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73  t that surrounds
3160: 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78   a boolean.** ex
3170: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3180: 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20   usually false. 
3190: 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20   Macro likely() 
31a0: 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62  surrounds.** a b
31b0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
31c0: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
31d0: 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68  y true.  These h
31e0: 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69  ints could,.** i
31f0: 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65  n theory, be use
3200: 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  d by the compile
3210: 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65  r to generate be
3220: 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a  tter code, but.*
3230: 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79  * currently they
3240: 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e   are just commen
3250: 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61  ts for human rea
3260: 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ders..*/.#define
3270: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58   likely(X)    (X
3280: 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  ).#define unlike
3290: 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63  ly(X)  (X)..#inc
32a0: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
32b0: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
32c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
32d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
32e0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
32f0: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
3300: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
3310: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
3320: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
3330: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
3340: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
3350: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
3360: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
3370: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
3380: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
3390: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
33a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
33b0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
33c0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
33d0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
33e0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
33f0: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
3410: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
3420: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3430: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
3440: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
3450: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
3460: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
3470: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3480: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
3490: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
34a0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
34b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
34c0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
34d0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
34e0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
34f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3500: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3520: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
3530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
3540: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
3550: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
3560: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
3570: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
3580: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
3590: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
35a0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
35b0: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
35c0: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
35d0: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
35e0: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
35f0: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
3600: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
3610: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
3620: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
3630: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
3640: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3650: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3660: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
3670: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
3680: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
3690: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
36a0: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
36b0: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
36c0: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
36e0: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
36f0: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
3700: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
3710: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
3720: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
3730: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
3740: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
3750: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
3760: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
3770: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
3780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3790: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
37a0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
37b0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
37c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
37d0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
37e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
37f0: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
3800: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
3810: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
3820: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
3830: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
3840: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3850: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
3860: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3880: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
3890: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
38a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
38b0: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
38c0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
38d0: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
38e0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
38f0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
3900: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
3910: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3930: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
3940: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
3950: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
3960: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
3970: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
3980: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3990: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
39a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
39b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
39c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
39d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
39e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
39f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3a00: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3a10: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3a20: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
3a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
3a40: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
3a50: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
3a60: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
3a70: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rs..*/.#define M
3a80: 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29  IN(A,B) ((A)<(B)
3a90: 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e  ?(A):(B)).#defin
3aa0: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
3ab0: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a  (B)?(A):(B))../*
3ac0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ad0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
3ae0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
3af0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
3b00: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
3b10: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
3b20: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
3b30: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
3b40: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
3b50: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
3b60: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
3b70: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
3b80: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
3b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
3ba0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
3bb0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
3bc0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
3bd0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
3be0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
3bf0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
3c00: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
3c10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
3c20: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
3c30: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
3c40: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
3c50: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
3c60: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
3c70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
3c80: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
3c90: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
3ca0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
3cb0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
3cc0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
3cd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
3ce0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
3cf0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3d00: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
3d10: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
3d20: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3d30: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
3d40: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
3d50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3d60: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
3d70: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3d80: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
3d90: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
3da0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3db0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
3dc0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
3dd0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3de0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
3df0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
3e00: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3e10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3e20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
3e30: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
3e40: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
3e50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3e60: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
3e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e80: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
3e90: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
3ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
3eb0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3ec0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
3ed0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
3ee0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
3ef0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
3f00: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
3f10: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3f20: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
3f30: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
3f40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
3f50: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
3f60: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
3f70: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
3f80: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
3f90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3fa0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3fb0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
3fc0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
3fd0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3fe0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
3ff0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4000: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4010: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4020: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4030: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4040: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4050: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4060: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4070: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
4080: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
4090: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
40a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
40b0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
40c0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
40d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
40e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
40f0: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4100: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4120: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4130: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4140: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4150: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4160: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4170: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
4180: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
4190: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
41a0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
41b0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
41c0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
41d0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
41e0: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
41f0: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4200: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4210: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4220: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4240: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4250: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4260: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4270: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
4280: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
42a0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
42b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
42c0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
42d0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
42e0: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
42f0: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4300: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4310: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4320: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4330: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4340: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4350: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4360: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4370: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
4380: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
4390: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
43a0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
43b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
43c0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
43d0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
43e0: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
43f0: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4400: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4410: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4420: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4430: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4440: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4450: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4460: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4470: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
4480: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
4490: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
44a0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
44b0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
44c0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
44d0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
44e0: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
44f0: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4500: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4510: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4520: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4530: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4540: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4550: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4560: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4570: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4580: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74  e LogEst quantat
4590: 69 74 65 73 20 61 72 65 20 73 75 70 70 6f 73 65  ites are suppose
45a0: 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73   to be estimates
45b0: 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76  ,.** not exact v
45c0: 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72  alues, this impr
45d0: 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61  ecision is not a
45e0: 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20   problem..**.** 
45f0: 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72  "LogEst" is shor
4600: 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 69  t for "Logarithi
4610: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
4620: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
4630: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
4640: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
4650: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
4660: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
4670: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
4680: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
4690: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
46a0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
46b0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
46c0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
46d0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
46e0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
46f0: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
4700: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
4710: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
4720: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
4730: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
4740: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
4750: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
4760: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
4770: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
4780: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
4790: 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c  lues. .** Exampl
47a0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35  es:.**.**    0.5
47b0: 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20   -> -10         
47c0: 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20    0.1 -> -33    
47d0: 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34      0.0625 -> -4
47e0: 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54  0.*/.typedef INT
47f0: 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a  16_TYPE LogEst;.
4800: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
4810: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
4820: 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69  er the machine i
4830: 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20  s big or little 
4840: 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75  endian,.** evalu
4850: 61 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e  ated at runtime.
4860: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4870: 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63  E_AMALGAMATION.c
4880: 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33  onst int sqlite3
4890: 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65  one = 1;.#else.e
48a0: 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20  xtern const int 
48b0: 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64  sqlite3one;.#end
48c0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69  if.#if defined(i
48d0: 33 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  386) || defined(
48e0: 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66  __i386__) || def
48f0: 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20  ined(_M_IX86)\. 
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64              || d
4920: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29  efined(__x86_64)
4930: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
4940: 36 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65  6_64__).# define
4950: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
4960: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
4970: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
4980: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
4990: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
49a0: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
49b0: 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  E.#else.# define
49c0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
49d0: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
49e0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
49f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4a00: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
4a10: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
4a20: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
4a30: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
4a40: 41 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49  ATIVE (SQLITE_BI
4a50: 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55  GENDIAN?SQLITE_U
4a60: 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54  TF16BE:SQLITE_UT
4a70: 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f  F16LE).#endif../
4a80: 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66  *.** Constants f
4a90: 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61  or the largest a
4aa0: 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73  nd smallest poss
4ab0: 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e  ible 64-bit sign
4ac0: 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ed integers..** 
4ad0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65  These macros are
4ae0: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72   designed to wor
4af0: 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62  k correctly on b
4b00: 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
4b10: 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65  4-bit.** compile
4b20: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c  rs..*/.#define L
4b30: 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30  ARGEST_INT64  (0
4b40: 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34  xffffffff|(((i64
4b50: 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
4b60: 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c  )).#define SMALL
4b70: 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34  EST_INT64 (((i64
4b80: 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49  )-1) - LARGEST_I
4b90: 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f  NT64)../* .** Ro
4ba0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
4bb0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
4bc0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
4bd0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
4be0: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
4bf0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
4c00: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
4c10: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
4c20: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
4c30: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
4c40: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
4c50: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
4c60: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
4c70: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
4c80: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
4c90: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
4ca0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
4cb0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
4cc0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
4cd0: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
4ce0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
4cf0: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
4d00: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
4d10: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
4d20: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
4d30: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
4d40: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
4d50: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
4d60: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
4d70: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
4d80: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
4d90: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
4da0: 65 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74  ention might ret
4db0: 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c  urn us 4-byte al
4dc0: 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72  igned.** pointer
4dd0: 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  s.  In that case
4de0: 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d  , only verify 4-
4df0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a  byte alignment..
4e00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4e10: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
4e20: 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20  MALLOC.# define 
4e30: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4e40: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4e50: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
4e60: 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65  )0)&3)==0).#else
4e70: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
4e80: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
4e90: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
4ea0: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29  ) - (char*)0)&7)
4eb0: 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ==0).#endif../*.
4ec0: 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20  ** Disable MMAP 
4ed0: 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65  on platforms whe
4ee0: 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74  re it is known t
4ef0: 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69  o not work.*/.#i
4f00: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
4f10: 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  BSD__) || define
4f20: 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20  d(__QNXNTO__).# 
4f30: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
4f40: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
4f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
4f60: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69  MAP_SIZE 0.#endi
4f70: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74  f../*.** Default
4f80: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
4f90: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
4fa0: 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f  memory-mapped I/
4fb0: 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a  O in the VFS.*/.
4fc0: 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
4fd0: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67  .# include <Targ
4fe0: 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68  etConditionals.h
4ff0: 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53  >.# if TARGET_OS
5000: 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65  _IPHONE.#   unde
5010: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
5020: 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e  P_SIZE.#   defin
5030: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5040: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5050: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5060: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5070: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
5080: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
5090: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
50a0: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
50b0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
50c0: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
50d0: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
50e0: 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64  ned(__sun).#   d
50f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5100: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
5110: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
5120: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
5130: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5140: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5150: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
5160: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5170: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
5180: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5190: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
51a0: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
51b0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
51c0: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
51d0: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
51e0: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
51f0: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
5200: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
5210: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
5220: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
5230: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
5240: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
5250: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
5260: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5270: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
5280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5290: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
52a0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
52b0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
52c0: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
52d0: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
52e0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
52f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5300: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
5310: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5320: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
5330: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
5340: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5350: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5360: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5370: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
5380: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
5390: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
53a0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
53b0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
53c0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
53d0: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
53e0: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
53f0: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
5400: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
5410: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
5420: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5430: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
5440: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5450: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
5460: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5470: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
5480: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5490: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
54a0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
54b0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
54c0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
54d0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
54e0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
54f0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5500: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5510: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5520: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
5530: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
5540: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
5550: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
5560: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
5570: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
5580: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
5590: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
55a0: 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65  ndle. .**.** The
55b0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
55c0: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
55d0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
55e0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
55f0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
5600: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
5610: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
5620: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
5630: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
5640: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
5650: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
5660: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
5670: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
5680: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
5690: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
56a0: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
56b0: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
56c0: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
56d0: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
56e0: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
56f0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
5700: 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69  *xFunc)(void *,i
5710: 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73  nt);  /* The bus
5720: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
5730: 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20  void *pArg;     
5740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
5750: 72 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20  rst arg to busy 
5760: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
5770: 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20  t nBusy;        
5780: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
5790: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
57a0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d  h busy call */.}
57b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66  ;../*.** Name of
57c0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
57d0: 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65  base table.  The
57e0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
57f0: 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73   table.** is a s
5800: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61  pecial table tha
5810: 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
5820: 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73  s and attributes
5830: 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20   of all.** user 
5840: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
5850: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
5860: 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20  ASTER_NAME      
5870: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
5880: 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41  .#define TEMP_MA
5890: 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69  STER_NAME  "sqli
58a0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a  te_temp_master".
58b0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d  ./*.** The root-
58c0: 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74  page of the mast
58d0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
58e0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  e..*/.#define MA
58f0: 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20  STER_ROOT       
5900: 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d  1../*.** The nam
5910: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  e of the schema 
5920: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
5930: 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78  e SCHEMA_TABLE(x
5940: 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44  )  ((!OMIT_TEMPD
5950: 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f  B)&&(x==1)?TEMP_
5960: 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54  MASTER_NAME:MAST
5970: 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20  ER_NAME)../*.** 
5980: 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61  A convenience ma
5990: 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73  cro that returns
59a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
59b0: 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e  lements in.** an
59c0: 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69   array..*/.#defi
59d0: 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20  ne ArraySize(X) 
59e0: 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66     ((int)(sizeof
59f0: 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29  (X)/sizeof(X[0])
5a00: 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  ))../*.** Determ
5a10: 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d  ine if the argum
5a20: 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f  ent is a power o
5a30: 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65  f two.*/.#define
5a40: 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29   IsPowerOfTwo(X)
5a50: 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d   (((X)&((X)-1))=
5a60: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  =0)../*.** The f
5a70: 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61  ollowing value a
5a80: 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d  s a destructor m
5a90: 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69  eans to use sqli
5aa0: 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20  te3DbFree()..** 
5ab0: 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  The sqlite3DbFre
5ac0: 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75  e() routine requ
5ad0: 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74  ires two paramet
5ae0: 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74  ers instead of t
5af0: 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  he .** one param
5b00: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
5b10: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
5b20: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
5b30: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a   to introduce .*
5b40: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
5b50: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
5b60: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
5b70: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
5b80: 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  ny .** pointer w
5b90: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
5ba0: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
5bb0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
5bc0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
5bd0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
5be0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
5bf0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
5c00: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
5c10: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
5c20: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
5c30: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
5c40: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
5c50: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
5c60: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
5c70: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
5c80: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
5c90: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
5ca0: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
5cb0: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
5cc0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
5cd0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
5ce0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
5cf0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
5d00: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
5d10: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
5d20: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
5d30: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
5d40: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
5d50: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
5d60: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
5d70: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
5d80: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
5d90: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
5da0: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
5db0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
5dc0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
5dd0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
5de0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
5df0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
5e00: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
5e10: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
5e20: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
5e30: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
5e40: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
5e50: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
5e60: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
5e70: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
5e80: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
5e90: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
5ea0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
5eb0: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
5ec0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
5ed0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
5ee0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
5ef0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
5f00: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
5f10: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
5f20: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
5f30: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
5f40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
5f50: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
5f60: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
5f70: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
5f80: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
5f90: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
5fa0: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
5fb0: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
5fc0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5fd0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
5fe0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
5ff0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
6000: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
6010: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
6020: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
6030: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
6040: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
6050: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
6060: 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66  LITE_WSD .  #def
6070: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
6080: 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  v.  #define sqli
6090: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
60a0: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65  sqlite3Config.#e
60b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
60c0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
60d0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70   are used to sup
60e0: 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77  press compiler w
60f0: 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a  arnings and to.*
6100: 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20  * make it clear 
6110: 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  to human readers
6120: 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   when a function
6130: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65   parameter is de
6140: 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c  liberately .** l
6150: 65 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69  eft unused withi
6160: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
6170: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75  function. This u
6180: 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77  sually happens w
6190: 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f  hen.** a functio
61a0: 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20  n is called via 
61b0: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
61c0: 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  er. For example 
61d0: 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  the .** implemen
61e0: 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  tation of an SQL
61f0: 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20   aggregate step 
6200: 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74  callback may not
6210: 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61   use the.** para
6220: 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67  meter indicating
6230: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
6240: 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
6250: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
6260: 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73  ,.** if it knows
6270: 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e   that this is en
6280: 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65  forced elsewhere
6290: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66  ..**.** When a f
62a0: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
62b0: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74  r is not used at
62c0: 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20   all within the 
62d0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
62e0: 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e  on,.** it is gen
62f0: 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f  erally named "No
6300: 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73  tUsed" or "NotUs
6310: 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69  ed2" to make thi
6320: 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72  ngs even clearer
6330: 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68  ..** However, th
6340: 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61  ese macros may a
6350: 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73  lso be used to s
6360: 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73  uppress warnings
6370: 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70   related to.** p
6380: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d  arameters that m
6390: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ay or may not be
63a0: 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20   used depending 
63b0: 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  on compilation o
63c0: 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65  ptions..** For e
63d0: 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72  xample those par
63e0: 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65  ameters only use
63f0: 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74  d in assert() st
6400: 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65  atements. In the
6410: 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20  se.** cases the 
6420: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e  parameters are n
6430: 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20  amed as per the 
6440: 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e  usual convention
6450: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  s..*/.#define UN
6460: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78  USED_PARAMETER(x
6470: 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66  ) (void)(x).#def
6480: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
6490: 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45  ETER2(x,y) UNUSE
64a0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55  D_PARAMETER(x),U
64b0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
64c0: 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72  y)../*.** Forwar
64d0: 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  d references to 
64e0: 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79  structures.*/.ty
64f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67  pedef struct Agg
6500: 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79  Info AggInfo;.ty
6510: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
6520: 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e  hContext AuthCon
6530: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
6540: 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
6550: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79   AutoincInfo;.ty
6560: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74  pedef struct Bit
6570: 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65  vec Bitvec;.type
6580: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53  def struct CollS
6590: 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65  eq CollSeq;.type
65a0: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d  def struct Colum
65b0: 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65  n Column;.typede
65c0: 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a  f struct Db Db;.
65d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
65e0: 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79  chema Schema;.ty
65f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
6600: 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20  r Expr;.typedef 
6610: 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
6620: 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65  ExprList;.typede
6630: 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61  f struct ExprSpa
6640: 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65  n ExprSpan;.type
6650: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
6660: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
6670: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
6680: 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74  tor FuncDestruct
6690: 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  or;.typedef stru
66a0: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
66b0: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
66c0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46  ct FuncDefHash F
66d0: 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65  uncDefHash;.type
66e0: 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73  def struct IdLis
66f0: 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65  t IdList;.typede
6700: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49  f struct Index I
6710: 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74  ndex;.typedef st
6720: 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
6730: 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79   IndexSample;.ty
6740: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
6750: 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a  Class KeyClass;.
6760: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
6770: 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a  eyInfo KeyInfo;.
6780: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
6790: 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69  ookaside Lookasi
67a0: 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  de;.typedef stru
67b0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
67c0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a   LookasideSlot;.
67d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d  typedef struct M
67e0: 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79  odule Module;.ty
67f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d  pedef struct Nam
6800: 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e  eContext NameCon
6810: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
6820: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
6830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6840: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
6850: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
6860: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6870: 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a   RowSet RowSet;.
6880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
6890: 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69  avepoint Savepoi
68a0: 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  nt;.typedef stru
68b0: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
68c0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
68d0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
68e0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
68f0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
6900: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
6910: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
6920: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
6930: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
6940: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
6950: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
6960: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
6970: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
6980: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
6990: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
69a0: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
69b0: 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
69c0: 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65  TriggerPrg;.type
69d0: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
69e0: 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74  erStep TriggerSt
69f0: 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ep;.typedef stru
6a00: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
6a10: 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  d UnpackedRecord
6a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6a30: 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a   VTable VTable;.
6a40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
6a50: 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a  tabCtx VtabCtx;.
6a60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
6a70: 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79  alker Walker;.ty
6a80: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
6a90: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
6aa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6ab0: 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a   With With;../*.
6ac0: 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e  ** Defer sourcin
6ad0: 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72  g vdbe.h and btr
6ae0: 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72  ee.h until after
6af0: 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a   the "u8" and .*
6b00: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
6b10: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
6b20: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
6b30: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
6b40: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
6b50: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
6b60: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
6b70: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
6b80: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
6b90: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
6ba0: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
6bb0: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
6bc0: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68  ..#include "os.h
6bd0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65  ".#include "mute
6be0: 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  x.h".../*.** Eac
6bf0: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
6c00: 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62  to be accessed b
6c10: 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20  y the system is 
6c20: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
6c30: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
6c40: 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72  structure.  Ther
6c50: 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74  e are normally t
6c60: 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  wo of these stru
6c70: 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65  ctures.** in the
6c80: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72   sqlite.aDb[] ar
6c90: 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20  ray.  aDb[0] is 
6ca0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
6cb0: 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44  e file and.** aD
6cc0: 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61  b[1] is the data
6cd0: 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
6ce0: 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79  o hold temporary
6cf0: 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69   tables.  Additi
6d00: 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  onal.** database
6d10: 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  s may be attache
6d20: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20  d..*/.struct Db 
6d30: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
6d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
6d50: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
6d60: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
6d70: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
6d80: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
6d90: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
6da0: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
6db0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
6dc0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
6dd0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
6de0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
6df0: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
6e00: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
6e10: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
6e20: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
6e30: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
6e40: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
6e50: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
6e60: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
6e70: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
6e80: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
6e90: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
6ea0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
6eb0: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
6ec0: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
6ed0: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
6ee0: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
6ef0: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
6f00: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
6f10: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
6f20: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
6f30: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
6f40: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
6f50: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
6f60: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
6f70: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
6f80: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
6f90: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
6fa0: 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d  ct..** .** Schem
6fb0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
6fc0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
6fd0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
6fe0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
6ff0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
7000: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
7010: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
7020: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
7030: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
7040: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
7050: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
7060: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
7070: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
7080: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
7090: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
70a0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
70b0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
70c0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
70d0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
70e0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
70f0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
7100: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
7110: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
7120: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
7130: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
7140: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
7150: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
7160: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
7170: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
7180: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
7190: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
71a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
71b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
71c0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
71d0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
71e0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
71f0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
7200: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
7210: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
7220: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
7230: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
7240: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7250: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
7260: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
7270: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
7280: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
7290: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
72a0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
72b0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
72c0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
72d0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
72e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
72f0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
7300: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
7310: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
7320: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
7330: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
7340: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
7350: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
7360: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
7370: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
7380: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
7390: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
73a0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
73b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
73c0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
73d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
73e0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
73f0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
7400: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
7410: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
7420: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
7430: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
7440: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
7450: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
7460: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
7470: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
7480: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
7490: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
74a0: 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d   .** Db.pSchema-
74b0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
74c0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
74d0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
74e0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
74f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28  pSchema->flags&(
7500: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
7510: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
7520: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
7530: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7540: 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
7550: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
7560: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
7570: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
7580: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50  chema->flags|=(P
7590: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
75a0: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
75b0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
75c0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e  Schema->flags&=~
75d0: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
75e0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
75f0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
7600: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
7610: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
7620: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
7630: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
7640: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
7650: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
7660: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
7670: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
7680: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
7690: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
76a0: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
76b0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
76c0: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
76d0: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
76e0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
76f0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
7700: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
7710: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
7720: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
7730: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
7740: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
7750: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
7760: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
7770: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
7780: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
7790: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
77a0: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
77b0: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
77c0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
77d0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
77e0: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
77f0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
7800: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
7810: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
7820: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
7830: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
7840: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
7850: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
7860: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
7870: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
7880: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
7890: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
78a0: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
78b0: 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31  _TRIGGER_DEPTH+1
78c0: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
78d0: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
78e0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
78f0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
7900: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
7910: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
7920: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
7930: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
7940: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
7950: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
7960: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
7970: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7980: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
7990: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
79a0: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
79b0: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
79c0: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
79d0: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
79e0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
79f0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
7a00: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
7a10: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
7a20: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
7a30: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
7a40: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
7a50: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
7a60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
7a70: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
7a80: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
7a90: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
7aa0: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
7ab0: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
7ac0: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
7ad0: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
7ae0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
7af0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
7b00: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
7b10: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
7b20: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
7b30: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
7b40: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
7b50: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
7b60: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
7b70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7b80: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
7b90: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
7ba0: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
7bb0: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
7bc0: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
7bd0: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
7be0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
7bf0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
7c00: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
7c10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
7c20: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
7c30: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
7c40: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
7c50: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
7c60: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
7c70: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
7c80: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
7c90: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
7ca0: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
7cb0: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
7cc0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
7cd0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
7ce0: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
7cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
7d00: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
7d10: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
7d20: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
7d30: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
7d40: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
7d50: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
7d60: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
7d70: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
7d80: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
7d90: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
7da0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
7db0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
7dc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7dd0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
7de0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
7df0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
7e00: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
7e10: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
7e20: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
7e30: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
7e40: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
7e50: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
7e60: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
7e70: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
7e80: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
7e90: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
7ea0: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
7eb0: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
7ec0: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
7ed0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
7ee0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
7ef0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
7f00: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
7f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7f20: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
7f30: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
7f40: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
7f50: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
7f60: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
7f70: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
7f80: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
7f90: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
7fa0: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
7fb0: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
7fc0: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
7fd0: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
7fe0: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
7ff0: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
8000: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
8010: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
8020: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
8030: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
8040: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
8050: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
8060: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
8070: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
8080: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
8090: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
80a0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  };../*.** Each d
80b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
80c0: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
80d0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
80e0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
80f0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
8100: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
8110: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
8120: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
8130: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
8140: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
8150: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8160: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
8170: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
8180: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
8190: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
81a0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
81b0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
81c0: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
81d0: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
81e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
81f0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
8200: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
8230: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8260: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
8270: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
8280: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
82a0: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
82b0: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
82c0: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
82d0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
82e0: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
82f0: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
8300: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
8310: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
8340: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
8350: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
8360: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
8370: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
8380: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
8390: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
83a0: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
83b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
83c0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
83d0: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
83e0: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
8410: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
8420: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
8430: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
8440: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
8450: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
8460: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
8470: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
8480: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
84a0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
84b0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
84c0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
84d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
84e0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
84f0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
8500: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8520: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
8530: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
8540: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
8550: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
8560: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
8570: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
8580: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
8590: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
85a0: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
85b0: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
85c0: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
85d0: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
85e0: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8600: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
8610: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
8620: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
8630: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
8640: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
8650: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
8660: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
8670: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
8680: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
8690: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
86a0: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
86b0: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
86c0: 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78   TS */.  int nex
86d0: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
86e0: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
86f0: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
8700: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
8710: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
8720: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
8730: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
8740: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
8750: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
8760: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
8770: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
8780: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
8790: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
87a0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
87b0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
87c0: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
87d0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
87e0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
87f0: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
8800: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
8810: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73  /* Limits */.  s
8820: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
8830: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
8840: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
8850: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
8860: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
8870: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
8880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
8890: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
88a0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
88b0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
88e0: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
88f0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
8900: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
8910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8920: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
8930: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
8940: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
8950: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
8960: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
8970: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
8980: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
8990: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
89a0: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
89b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
89c0: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
89d0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
89e0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
89f0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
8a00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8a10: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
8a20: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
8a30: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
8a40: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
8a50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8a60: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
8a70: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
8a80: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
8a90: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
8aa0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8ab0: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
8ac0: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
8ad0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8af0: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
8b00: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
8b10: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
8b20: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
8b30: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
8b40: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
8b50: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
8b60: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
8b70: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
8b80: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
8b90: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
8ba0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bc0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
8bd0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
8be0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
8bf0: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
8c00: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
8c10: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
8c20: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
8c30: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
8c40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8c50: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
8c60: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
8c70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8c80: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ca0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
8cb0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
8cc0: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
8cd0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
8ce0: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
8cf0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
8d00: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
8d10: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8d30: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
8d40: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
8d50: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
8d60: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
8d70: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
8d80: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
8d90: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
8da0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
8db0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
8dc0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
8dd0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
8de0: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
8df0: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65  e_int64);.#ifnde
8e00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
8e10: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
8e20: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
8e30: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
8e40: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
8e50: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
8e60: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
8e70: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
8e80: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
8e90: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
8ea0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
8eb0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
8ec0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
8ed0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
8ee0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
8ef0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
8f00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
8f10: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
8f20: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
8f30: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
8f40: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
8f50: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
8f60: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
8f70: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
8f80: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
8f90: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
8fa0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
8fb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
8fc0: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
8fd0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
8fe0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
8ff0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
9000: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
9010: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9020: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9030: 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75  TION.  int (*xAu
9040: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
9050: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9060: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9070: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
90b0: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
90c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
90d0: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
90e0: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
90f0: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
9100: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
9110: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
9120: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
9130: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
9140: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
9150: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
9160: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
9170: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
9180: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
9190: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
91a0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
91b0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
91c0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
91d0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
91e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
91f0: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
9200: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
9210: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9220: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
9230: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
9240: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
9250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9260: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
9270: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
9280: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
9290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
92a0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
92b0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
92c0: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
92d0: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
92e0: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
92f0: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
9300: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
9310: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
9320: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
9330: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
9340: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
9350: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
9360: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
9370: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
9380: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
9390: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
93a0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
93b0: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
93c0: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
93d0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
93e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
93f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
9400: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
9410: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9420: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
9430: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
9440: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
9450: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
9460: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
9470: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
9480: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
9490: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
94a0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
94b0: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
94c0: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
94d0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
94e0: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
94f0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
9500: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
9510: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
9520: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
9530: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
9540: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9560: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
9570: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
9580: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
9590: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
95a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
95b0: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
95c0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
95d0: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
95e0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
95f0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
9600: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
9610: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
9620: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
9630: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
9640: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
9650: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
9660: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
9670: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
9680: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
9690: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
96a0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
96b0: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a  in DbFree() */..
96c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
96d0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
96e0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
96f0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
9700: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
9710: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
9720: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
9730: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
9740: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
9750: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
9760: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
9770: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
9780: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
9790: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
97a0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
97b0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
97c0: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
97d0: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
97e0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
97f0: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
9800: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
9810: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
9820: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
9830: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
9840: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
9850: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
9860: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
9870: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
9880: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
9890: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
98a0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
98b0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
98c0: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
98d0: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
98e0: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
98f0: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
9900: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
9910: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
9920: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
9930: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9950: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
9960: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
9970: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
9980: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
9990: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
99a0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
99b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
99c0: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
99d0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
99e0: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
99f0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
9a00: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
9a10: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
9a20: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
9a30: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
9a40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43  ..*/.#define ENC
9a50: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
9a60: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
9a70: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
9a80: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
9a90: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
9aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9ab0: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
9ac0: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
9ad0: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
9ae0: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
9af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
9b00: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
9b10: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
9b20: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
9b30: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
9b40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
9b50: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
9b60: 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66  000004  /* Use f
9b70: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
9b80: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
9b90: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
9ba0: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
9bb0: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
9bc0: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
9bd0: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
9be0: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
9bf0: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
9c00: 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  10  /* OK to spi
9c10: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
9c20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c30: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
9c40: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53  0x00000020  /* S
9c50: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
9c60: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
9c70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9c80: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
9c90: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
9ca0: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
9cb0: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
9cc0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
9cd0: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
9ce0: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
9cf0: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
9d00: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
9d40: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
9d50: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
9d90: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
9da0: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
9db0: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
9dc0: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
9dd0: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
9de0: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
9df0: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
9e30: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
9e40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
9e50: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
9e60: 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00200  /* Debug 
9e70: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
9e80: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
9e90: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
9ea0: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
9eb0: 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0400  /* Debug l
9ec0: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
9ed0: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
9ee0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
9ef0: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
9f00: 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0800  /* OK to u
9f10: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
9f20: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
9f30: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
9f40: 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20  race 0x00001000 
9f50: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
9f60: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
9f70: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
9f80: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
9f90: 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20  s   0x00002000  
9fa0: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
9fb0: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
9fc0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
9fd0: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
9fe0: 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20  itted 0x0004000 
9ff0: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
a000: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
a010: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
a020: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
a030: 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  08000  /* Create
a040: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
a050: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
a060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
a070: 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30  overyMode   0x00
a080: 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72  010000  /* Ignor
a090: 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20  e schema errors 
a0a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a0b0: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
a0c0: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
a0d0: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
a0e0: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
a0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
a100: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
a110: 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  40000  /* Enable
a120: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
a130: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
a140: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
a150: 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20  s    0x00080000 
a160: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
a170: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a180: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
a190: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
a1a0: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
a1b0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
a1c0: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
a1d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a1e0: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
a1f0: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72  x00200000  /* Pr
a200: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
a210: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
a220: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
a230: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
a240: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
a250: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
a260: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a270: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
a280: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
a290: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
a2a0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
a2b0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
a2c0: 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30  FKs       0x0100
a2d0: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
a2e0: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
a2f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
a300: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
a310: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
a320: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
a330: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
a340: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
a350: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34  eEQP        0x04
a360: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
a370: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
a380: 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42  LAN */.../*.** B
a390: 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  its of the sqlit
a3a0: 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69  e3.dbOptFlags fi
a3b0: 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65  eld that are use
a3c0: 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  d by the.** sqli
a3d0: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
a3e0: 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
a3f0: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e  _OPTIMIZATIONS,.
a400: 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ..) interface to
a410: 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20  .** selectively 
a420: 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20  disable various 
a430: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
a440: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a450: 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20  _QueryFlattener 
a460: 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72  0x0001   /* Quer
a470: 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a  y flattening */.
a480: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
a490: 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78  olumnCache    0x
a4a0: 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  0002   /* Column
a4b0: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
a4c0: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
a4d0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
a4e0: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
a4f0: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
a500: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a510: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
a520: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
a530: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
a540: 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /*              
a550: 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78    not used    0x
a560: 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53  0010   // Was: S
a570: 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49  QLITE_IdxRealAsI
a580: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
a590: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
a5a0: 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20      0x0020   /* 
a5b0: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
a5c0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
a5d0: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
a5e0: 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20  xScan   0x0040  
a5f0: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
a600: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
a610: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
a620: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30  ByIdxJoin 0x0080
a630: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
a640: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
a650: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
a660: 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e  ITE_SubqCoroutin
a670: 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45  e  0x0100   /* E
a680: 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69  valuate subqueri
a690: 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73  es as coroutines
a6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a6b0: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
a6c0: 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72    0x0200   /* Tr
a6d0: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
a6e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
a6f0: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
a700: 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f  oin   0x0400   /
a710: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
a720: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
a730: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a740: 53 74 61 74 33 20 20 20 20 20 20 20 20 20 20 30  Stat3          0
a750: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74  x0800   /* Use t
a760: 68 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20  he SQLITE_STAT3 
a770: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
a780: 20 53 51 4c 49 54 45 5f 41 64 6a 75 73 74 4f 75   SQLITE_AdjustOu
a790: 74 45 73 74 20 20 20 30 78 31 30 30 30 20 20 20  tEst   0x1000   
a7a0: 2f 2a 20 41 64 6a 75 73 74 20 6f 75 74 70 75 74  /* Adjust output
a7b0: 20 65 73 74 69 6d 61 74 65 73 20 75 73 69 6e 67   estimates using
a7c0: 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
a7d0: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
a7e0: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
a7f0: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
a800: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
a810: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
a820: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
a830: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
a840: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
a850: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
a860: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a870: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
a880: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
a890: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
a8a0: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
a8b0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
a8c0: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
a8d0: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
a8e0: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
a8f0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
a900: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
a910: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
a920: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
a930: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
a940: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
a950: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
a960: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
a970: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
a980: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
a990: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
a9a0: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
a9b0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
a9c0: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
a9d0: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
a9e0: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
a9f0: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
aa00: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
aa10: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
aa20: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
aa30: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
aa40: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
aa50: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
aa60: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
aa70: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
aa80: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
aa90: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
aaa0: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
aab0: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
aac0: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
aad0: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
aae0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
aaf0: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
ab00: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
ab10: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
ab20: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
ab30: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
ab40: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
ab50: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
ab60: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
ab70: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
ab80: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
ab90: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
aba0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
abb0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
abc0: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
abd0: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
abe0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
abf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ac00: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
ac10: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
ac20: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
ac30: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
ac40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ac50: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
ac60: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
ac70: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
ac80: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
ac90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
aca0: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
acb0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
acc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
acd0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
ace0: 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74    A pointer to t
acf0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
ad00: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
ad10: 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68  qlite.aFunc.** h
ad20: 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e  ash table.  When
ad30: 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69   multiple functi
ad40: 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d  ons have the sam
ad50: 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68  e name, the hash
ad60: 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73   table.** points
ad70: 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   to a linked lis
ad80: 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  t of these struc
ad90: 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tures..*/.struct
ada0: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36   FuncDef {.  i16
adb0: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
adc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
add0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
ade0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
adf0: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
ae00: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
ae10: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
ae20: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
ae30: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
ae40: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
ae50: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
ae60: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
ae70: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
ae80: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
ae90: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
aea0: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
aeb0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
aec0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
aed0: 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e  ; /* Regular fun
aee0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
aef0: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
af00: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
af10: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
af20: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65  /* Aggregate ste
af30: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
af40: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
af50: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
af60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
af70: 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65  gregate finalize
af80: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  r */.  char *zNa
af90: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  me;         /* S
afa0: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
afb0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75  unction. */.  Fu
afc0: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
afd0: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
afe0: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
aff0: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
b000: 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74  sh */.  FuncDest
b010: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
b020: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
b030: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
b040: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
b050: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
b060: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
b070: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
b080: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
b090: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
b0a0: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
b0b0: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
b0c0: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
b0d0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
b0e0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
b0f0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
b100: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
b110: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
b120: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
b130: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
b140: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
b150: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
b160: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
b170: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a  nRef is set to .
b180: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
b190: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
b1a0: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
b1b0: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
b1c0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
b1d0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
b1e0: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
b1f0: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
b200: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
b210: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
b220: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
b230: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
b240: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
b250: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
b260: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
b270: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
b280: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
b290: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
b2a0: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
b2b0: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
b2c0: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
b2d0: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
b2e0: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
b2f0: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
b300: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
b310: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
b320: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
b330: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
b340: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
b350: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
b360: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
b370: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
b380: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
b390: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
b3a0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
b3b0: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
b3c0: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
b3d0: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
b3e0: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
b3f0: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
b400: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
b410: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
b420: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54  AG_TYPEOFARG.  T
b430: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
b440: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
b450: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
b460: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23  erify this..*/.#
b470: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b480: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30  NC_ENCMASK  0x00
b490: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
b4a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
b4b0: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
b4c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b4d0: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
b4e0: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
b4f0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
b500: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
b510: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
b520: 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f  CASE     0x008 /
b530: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
b540: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
b550: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b560: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
b570: 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68      0x010 /* Eph
b580: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
b590: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
b5a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b5b0: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20  _NEEDCOLL 0x020 
b5c0: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
b5d0: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
b5e0: 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64   be called */.#d
b5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b600: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30  C_LENGTH   0x040
b610: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
b620: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
b630: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b640: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
b650: 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x080 /* Built-in
b660: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
b670: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
b680: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
b690: 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c     0x100 /* Buil
b6a0: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
b6b0: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
b6c0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
b6d0: 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a  OALESCE 0x200 /*
b6e0: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
b6f0: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
b700: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b710: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
b720: 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x400 /* Built-
b730: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
b740: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
b750: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
b760: 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20  NSTANT 0x800 /* 
b770: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
b780: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
b790: 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  output */../*.**
b7a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
b7b0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
b7c0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
b7d0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
b7e0: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
b7f0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
b800: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
b810: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
b820: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
b830: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
b840: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
b850: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
b860: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
b870: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
b880: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
b890: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
b8a0: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
b8b0: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
b8c0: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
b8d0: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
b8e0: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
b8f0: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
b900: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
b910: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
b920: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
b930: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
b940: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
b950: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
b960: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
b970: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
b980: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
b990: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
b9a0: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
b9b0: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
b9c0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
b9d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
b9e0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
b9f0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
ba00: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
ba10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
ba20: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
ba30: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
ba40: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
ba50: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
ba60: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
ba70: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
ba80: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
ba90: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
baa0: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
bab0: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
bac0: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
bad0: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
bae0: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
baf0: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
bb00: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
bb10: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
bb20: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
bb30: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
bb40: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
bb50: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
bb60: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
bb70: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
bb80: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
bb90: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
bba0: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
bbb0: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
bbc0: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
bbd0: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
bbe0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
bbf0: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
bc00: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
bc10: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
bc20: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
bc30: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
bc40: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
bc50: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
bc60: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
bc70: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
bc80: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
bc90: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
bca0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
bcb0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
bcc0: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
bcd0: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
bce0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
bcf0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
bd00: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
bd10: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
bd20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
bd30: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
bd40: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
bd50: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
bd60: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
bd70: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
bd80: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
bd90: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
bda0: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
bdb0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
bdc0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
bdd0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
bde0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
bdf0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
be00: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
be10: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
be20: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
be30: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
be40: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
be50: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
be60: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
be70: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
be80: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
be90: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
bea0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
beb0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
bec0: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
bed0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
bee0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
bef0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
bf00: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
bf10: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
bf20: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
bf30: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
bf40: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
bf50: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
bf60: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
bf70: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
bf80: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
bf90: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
bfa0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
bfb0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
bfc0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
bfd0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
bfe0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
bff0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
c000: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
c010: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
c020: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c030: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c040: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
c050: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
c060: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
c070: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
c080: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
c090: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
c0a0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
c0b0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
c0c0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
c0d0: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f  l,#zName,0,0}../
c0e0: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
c0f0: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
c100: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
c110: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
c120: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
c130: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
c140: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
c150: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
c160: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
c170: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
c180: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
c190: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
c1a0: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
c1b0: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
c1c0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
c1d0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
c1e0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
c1f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c200: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
c210: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
c220: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
c230: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
c240: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
c250: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c260: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
c270: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
c280: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
c290: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
c2a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
c2b0: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
c2c0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
c2d0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
c2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
c2f0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
c300: 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
c310: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
c320: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
c330: 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
c340: 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
c350: 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
c360: 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
c370: 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
c380: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
c390: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
c3a0: 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
c3b0: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
c3c0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
c3d0: 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
c3e0: 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
c3f0: 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
c400: 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
c410: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
c420: 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
c430: 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
c440: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
c450: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
c460: 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
c470: 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
c480: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
c490: 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
c4a0: 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
c4b0: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
c4c0: 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
c4d0: 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
c4e0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
c4f0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
c500: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
c510: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
c520: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
c530: 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
c560: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
c570: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
c580: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
c590: 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
c5a0: 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
c5b0: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
c5c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
c5d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
c5e0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
c5f0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
c600: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
c610: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
c620: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
c630: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
c640: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
c650: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
c660: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
c670: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
c680: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
c690: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
c6a0: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
c6b0: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
c6c0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
c6d0: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
c6e0: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
c6f0: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
c700: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
c710: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
c720: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
c730: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
c740: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
c750: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
c760: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
c770: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
c780: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
c790: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
c7a0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
c7b0: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
c7c0: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
c7d0: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
c7e0: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
c7f0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
c800: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
c810: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
c820: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
c830: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
c840: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
c850: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
c860: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
c870: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
c880: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
c890: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
c8a0: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
c8b0: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
c8c0: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
c8d0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
c8e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
c8f0: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
c900: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
c910: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
c920: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
c930: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
c940: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
c950: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
c960: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
c970: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
c980: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
c990: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
c9a0: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
c9b0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
c9c0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
c9d0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
c9e0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
c9f0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
ca00: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
ca10: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
ca20: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
ca30: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
ca40: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
ca50: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
ca60: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
ca70: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
ca80: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
ca90: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
caa0: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
cab0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
cac0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
cad0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
cae0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
caf0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
cb00: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
cb10: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
cb20: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
cb30: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
cb40: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
cb50: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
cb60: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
cb70: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
cb80: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
cb90: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
cba0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
cbb0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
cbc0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
cbd0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
cbe0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
cbf0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
cc00: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
cc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc20: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
cc30: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
cc40: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
cc50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
cc60: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
cc70: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
cc80: 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  g order */../*.*
cc90: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
cca0: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
ccb0: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
ccc0: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
ccd0: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
cce0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ccf0: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
cd00: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
cd10: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
cd20: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
cd30: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
cd40: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
cd50: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
cd60: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
cd70: 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a  utively.  .**.**
cd80: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
cd90: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
cda0: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
cdb0: 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61 79  h 'a'.  That way
cdc0: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
cdd0: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
cde0: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
cdf0: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
ce00: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
ce10: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
ce20: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
ce30: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
ce40: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
ce50: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
ce60: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
ce70: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
ce80: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
ce90: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
cea0: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
ceb0: 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ison..*/.#define
cec0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
ced0: 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65       'a'.#define
cee0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
cef0: 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65       'b'.#define
cf00: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
cf10: 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65  RIC  'c'.#define
cf20: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
cf30: 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65  GER  'd'.#define
cf40: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
cf50: 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e       'e'..#defin
cf60: 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
cf70: 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
cf80: 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
cf90: 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
cfa0: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
cfb0: 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
cfc0: 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
cfd0: 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
cfe0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
cff0: 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e. .*/.#define S
d000: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
d010: 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x67../*.** A
d020: 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
d030: 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
d040: 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
d050: 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
d060: 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
d070: 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
d080: 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
d090: 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
d0a0: 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
d0b0: 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
d0c0: 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
d0d0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
d0e0: 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
d0f0: 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
d100: 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
d110: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
d120: 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
d130: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
d140: 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
d150: 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
d160: 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
d170: 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
d180: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
d190: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
d1a0: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
d1b0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d1c0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
d1d0: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
d1e0: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
d1f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
d200: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
d210: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
d220: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
d230: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
d240: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
d250: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
d260: 20 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73 73      0x88  /* Ass
d270: 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
d280: 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
d290: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
d2a0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
d2b0: 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
d2c0: 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
d2d0: 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
d2e0: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
d2f0: 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  chema. .**.** If
d300: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d310: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
d320: 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
d330: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
d340: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
d350: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
d360: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
d370: 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
d380: 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
d390: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
d3a0: 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
d3b0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d3c0: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
d3d0: 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
d3e0: 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
d3f0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
d400: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
d410: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
d420: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
d430: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
d440: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
d450: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
d460: 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61  tween .** databa
d470: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
d480: 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
d490: 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
d4a0: 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ory database .**
d4b0: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
d4c0: 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
d4d0: 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
d4e0: 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
d4f0: 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
d500: 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
d510: 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
d520: 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
d530: 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
d540: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
d550: 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
d560: 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
d570: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
d580: 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20   may.** then be 
d590: 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74  used by the virt
d5a0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
d5b0: 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65  entation to acce
d5c0: 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a  ss real tables .
d5d0: 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
d5e0: 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
d5f0: 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
d600: 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
d610: 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  rs .** transacti
d620: 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
d630: 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
d640: 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
d650: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e  database .** con
d660: 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
d670: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
d680: 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
d690: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
d6a0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
d6b0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
d6c0: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
d6d0: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
d6e0: 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
d6f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
d700: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
d710: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
d720: 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
d730: 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
d740: 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
d750: 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
d760: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
d770: 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
d780: 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
d790: 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
d7a0: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
d7b0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
d7c0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
d7d0: 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
d7e0: 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
d7f0: 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
d800: 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
d810: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d820: 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
d830: 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
d840: 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
d850: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
d860: 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
d870: 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
d880: 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
d890: 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
d8a0: 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
d8b0: 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
d8c0: 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
d8d0: 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
d8e0: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
d8f0: 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
d900: 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20  cts are not .** 
d910: 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
d920: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
d930: 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
d940: 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a  isconnect()ed .*
d950: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
d960: 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
d970: 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
d980: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
d990: 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
d9a0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
d9b0: 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
d9c0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
d9d0: 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
d9e0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
d9f0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
da00: 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
da10: 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
da20: 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69  cted .** next ti
da30: 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
da40: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
da50: 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
da60: 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
da70: 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
da80: 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
da90: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
daa0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
dab0: 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
dac0: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
dad0: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
dae0: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
daf0: 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
db00: 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
db10: 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
db20: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
db30: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
db40: 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
db50: 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
db60: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
db70: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
db80: 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
db90: 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
dba0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
dbb0: 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
dbc0: 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44   by .** sqlite3D
dbd0: 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
dbe0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
dbf0: 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
dc00: 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a   VTable.db as .*
dc10: 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
dc20: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
dc30: 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
dc40: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
dc50: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
dc60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
dc70: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
dc80: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
dc90: 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
dca0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
dcb0: 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
dcc0: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
dcd0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
dce0: 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
dcf0: 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
dd00: 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
dd10: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
dd20: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
dd30: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
dd40: 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
dd50: 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
dd60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
dd70: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
dd80: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
dd90: 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
dda0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
ddb0: 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
ddc0: 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
ddd0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
dde0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
ddf0: 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
de00: 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
de10: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
de20: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  ch SQL table is 
de30: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
de40: 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74  emory by an inst
de50: 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66  ance of the.** f
de60: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
de70: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  re..**.** Table.
de80: 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  zName is the nam
de90: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  e of the table. 
dea0: 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65   The case of the
deb0: 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45   original.** CRE
dec0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
ded0: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62  ent is stored, b
dee0: 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73  ut case is not s
def0: 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a  ignificant for.*
df00: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a  * comparisons..*
df10: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20  *.** Table.nCol 
df20: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
df30: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
df40: 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61   table.  Table.a
df50: 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  Col is a.** poin
df60: 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20  ter to an array 
df70: 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74  of Column struct
df80: 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61  ures, one for ea
df90: 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  ch column..**.**
dfa0: 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61   If the table ha
dfb0: 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  s an INTEGER PRI
dfc0: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54  MARY KEY, then T
dfd0: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68  able.iPKey is th
dfe0: 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68  e index of.** th
dff0: 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73  e column that is
e000: 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68   that key.   Oth
e010: 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b  erwise Table.iPK
e020: 65 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20  ey is negative. 
e030: 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68   Note.** that th
e040: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
e050: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75  e PRIMARY KEY mu
e060: 73 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f  st be INTEGER fo
e070: 72 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a  r this field to.
e080: 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49  ** be set.  An I
e090: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e0a0: 45 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68  EY is used as th
e0b0: 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e rowid for each
e0c0: 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74   row of.** the t
e0d0: 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c  able.  If a tabl
e0e0: 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52  e has no INTEGER
e0f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
e100: 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69  en a random rowi
e110: 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65  d.** is generate
e120: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
e130: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46  f the table.  TF
e140: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69  _HasPrimaryKey i
e150: 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20  s set if.** the 
e160: 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52  table has any PR
e170: 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47  IMARY KEY, INTEG
e180: 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e  ER or otherwise.
e190: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75  .**.** Table.tnu
e1a0: 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  m is the page nu
e1b0: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f  mber for the roo
e1c0: 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20  t BTree page of 
e1d0: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  the table in the
e1e0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
e1f0: 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62  e.  If Table.iDb
e200: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
e210: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
e220: 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69  ble backend.** i
e230: 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20  n sqlite.aDb[]. 
e240: 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61   0 is for the ma
e250: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
e260: 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c  1 is for the fil
e270: 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20  e that.** holds 
e280: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
e290: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49   and indices.  I
e2a0: 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69  f TF_Ephemeral i
e2b0: 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68  s set.** then th
e2c0: 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65  e table is store
e2d0: 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74  d in a file that
e2e0: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
e2f0: 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65  y deleted.** whe
e300: 6e 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f  n the VDBE curso
e310: 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69  r to the table i
e320: 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68  s closed.  In th
e330: 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e  is case Table.tn
e340: 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44  um .** refers VD
e350: 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
e360: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
e370: 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20  table open, not 
e380: 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70  to the root.** p
e390: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61  age number.  Tra
e3a0: 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72  nsient tables ar
e3b0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
e3c0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a  he results of a.
e3d0: 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61  ** sub-query tha
e3e0: 74 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61  t appears instea
e3f0: 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  d of a real tabl
e400: 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52  e name in the FR
e410: 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66  OM clause .** of
e420: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
e430: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ent..*/.struct T
e440: 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
e450: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
e460: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
e470: 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
e480: 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
e490: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
e4a0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
e4b0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
e4c0: 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
e4d0: 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
e4e0: 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
e4f0: 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
e500: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
e510: 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
e520: 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
e530: 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
e540: 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
e550: 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
e560: 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
e570: 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
e580: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
e590: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
e5a0: 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
e5b0: 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
e5c0: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
e5d0: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e  h column */.#ifn
e5e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e5f0: 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74  CHECK.  ExprList
e600: 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
e610: 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
e620: 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  aints */.#endif.
e630: 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
e640: 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  t;     /* Estima
e650: 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
e660: 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
e670: 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
e680: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
e690: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
e6a0: 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69  ree node for thi
e6b0: 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74  s table (see not
e6c0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31  e above) */.  i1
e6d0: 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  6 iPKey;        
e6e0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
e6f0: 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
e700: 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72  iPKey] as the pr
e710: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69  imary key */.  i
e720: 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
e730: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e740: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
e750: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20   table */.  u16 
e760: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
e770: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
e780: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
e790: 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
e7a0: 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
e7b0: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
e7c0: 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
e7d0: 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ow in bytes */. 
e7e0: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
e7f0: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
e800: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
e810: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
e820: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
e830: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
e840: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
e850: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
e860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e870: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
e880: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
e890: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
e8a0: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
e8b0: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
e8c0: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
e8d0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
e8e0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
e8f0: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
e900: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
e910: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
e920: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
e930: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
e940: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
e950: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
e960: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
e970: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
e980: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
e990: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
e9a0: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
e9b0: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
e9c0: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
e9d0: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
e9e0: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
e9f0: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
ea00: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
ea10: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
ea20: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
ea30: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
ea40: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
ea50: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
ea60: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
ea70: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
ea80: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
ea90: 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
eaa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
eab0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
eac0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
ead0: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
eae0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
eaf0: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
eb00: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
eb10: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
eb20: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
eb30: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
eb40: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
eb50: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
eb60: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
eb70: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
eb80: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
eb90: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
eba0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
ebb0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
ebc0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
ebd0: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
ebe0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
ebf0: 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
ec00: 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
ec10: 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20   No rowid used. 
ec20: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
ec30: 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  he key */.../*.*
ec40: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
ec50: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
ec60: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
ec70: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
ec80: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
ec90: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
eca0: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
ecb0: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
ecc0: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
ecd0: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
ece0: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
ecf0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
ed00: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
ed10: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
ed20: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
ed30: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
ed40: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
ed50: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
ed60: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
ed70: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
ed80: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
ed90: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
eda0: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
edb0: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
edc0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
edd0: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  X) 0.#endif../* 
ede0: 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
edf0: 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
ee00: 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
ee10: 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
ee20: 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
ee30: 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  outRowid)==0)../
ee40: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
ee50: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
ee60: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
ee70: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
ee80: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
ee90: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
eea0: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
eeb0: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
eec0: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
eed0: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
eee0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
eef0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ef00: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
ef10: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
ef20: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
ef30: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
ef40: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
ef50: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
ef60: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
ef70: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
ef80: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
ef90: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
efa0: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
efb0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
efc0: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
efd0: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
efe0: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
eff0: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
f000: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
f010: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
f020: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
f030: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
f040: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
f050: 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
f060: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
f070: 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
f080: 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
f090: 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
f0a0: 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
f0b0: 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
f0c0: 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
f0d0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f0e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f0f0: 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
f100: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
f110: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
f120: 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
f130: 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
f140: 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
f150: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
f160: 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
f170: 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
f180: 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
f190: 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
f1a0: 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
f1b0: 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
f1c0: 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
f1d0: 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
f1e0: 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
f1f0: 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
f200: 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
f210: 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
f220: 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
f230: 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
f240: 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
f250: 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
f260: 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
f270: 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
f280: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
f290: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
f2a0: 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
f2b0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
f2c0: 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
f2d0: 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
f2e0: 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
f2f0: 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
f300: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
f310: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
f320: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
f330: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
f340: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
f350: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
f360: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
f370: 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
f380: 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
f390: 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
f3a0: 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
f3b0: 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
f3c0: 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
f3d0: 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
f3e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
f3f0: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
f400: 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
f410: 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
f420: 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
f430: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
f440: 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
f450: 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
f460: 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
f470: 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
f480: 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
f490: 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
f4a0: 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
f4b0: 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
f4c0: 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
f4d0: 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
f4e0: 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
f4f0: 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
f500: 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
f510: 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
f520: 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
f530: 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
f540: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
f550: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
f560: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
f570: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
f580: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
f590: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f5a0: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
f5b0: 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
f5c0: 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
f5d0: 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
f5e0: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
f5f0: 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
f600: 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
f610: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
f620: 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
f630: 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
f640: 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
f650: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
f660: 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
f670: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
f680: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f690: 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
f6a0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
f6b0: 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
f6c0: 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
f6d0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
f6e0: 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
f6f0: 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
f700: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
f710: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
f720: 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
f730: 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
f740: 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
f750: 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
f760: 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
f770: 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
f780: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
f790: 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
f7a0: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
f7b0: 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
f7c0: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
f7d0: 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
f7e0: 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
f7f0: 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
f800: 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
f810: 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
f820: 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
f830: 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
f840: 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
f850: 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
f860: 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
f870: 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
f880: 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
f890: 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
f8a0: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
f8b0: 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
f8c0: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
f8d0: 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
f8e0: 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
f8f0: 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
f900: 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
f910: 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
f920: 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
f930: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f940: 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
f950: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
f960: 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
f970: 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
f980: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
f990: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
f9a0: 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
f9b0: 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
f9c0: 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
f9d0: 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
f9e0: 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
f9f0: 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
fa00: 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
fa10: 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
fa20: 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
fa30: 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
fa40: 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
fa50: 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
fa60: 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
fa70: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
fa80: 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
fa90: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
faa0: 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
fab0: 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
fac0: 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
fad0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
fae0: 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
faf0: 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
fb00: 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
fb10: 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
fb20: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
fb30: 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
fb40: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
fb50: 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
fb60: 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
fb70: 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
fb80: 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
fb90: 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
fba0: 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
fbb0: 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
fbc0: 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
fbd0: 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
fbe0: 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
fbf0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
fc00: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
fc10: 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
fc20: 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
fc30: 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
fc40: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
fc50: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
fc60: 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
fc70: 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
fc80: 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
fc90: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
fca0: 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
fcb0: 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
fcc0: 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
fcd0: 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
fce0: 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
fcf0: 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
fd00: 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
fd10: 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
fd20: 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
fd30: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
fd40: 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
fd50: 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
fd60: 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
fd70: 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
fd80: 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
fd90: 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
fda0: 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
fdb0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
fdc0: 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
fdd0: 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
fde0: 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
fdf0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
fe00: 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
fe10: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
fe20: 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
fe30: 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
fe40: 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
fe50: 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
fe60: 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
fe70: 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
fe80: 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
fe90: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
fea0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
feb0: 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
fec0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
fed0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
fee0: 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
fef0: 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
ff00: 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
ff10: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
ff20: 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
ff30: 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
ff40: 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
ff50: 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
ff60: 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
ff70: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
ff80: 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
ff90: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
ffa0: 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
ffb0: 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
ffc0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
ffd0: 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
ffe0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
fff0: 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
10000 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10010 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
10020 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
10030 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
10040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10050 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
10060 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
10070 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
10080 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
10090 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
100a0 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
100b0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
100c0 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20   u16 nXField;   
100d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
100e0 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64  f columns beyond
100f0 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73   the key columns
10100 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
10110 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
10120 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10130 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
10140 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
10150 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
10160 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
10170 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
10180 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
10190 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
101a0 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
101b0 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
101c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
101d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
101e0 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
101f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10200 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
10210 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
10220 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
10230 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
10240 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
10250 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
10260 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
10270 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
10280 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
10290 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
102a0 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
102b0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
102c0 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
102d0 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
102e0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
102f0 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
10300 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
10310 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
10320 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
10330 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
10340 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
10350 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
10360 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
10370 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
10380 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
10390 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
103a0 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
103b0 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
103c0 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
103d0 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
103e0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  s..**.** The r1 
103f0 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61  and r2 member va
10400 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
10410 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74   used by the opt
10420 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f  imized compariso
10430 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76  n.** functions v
10440 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
10450 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65  Int() and vdbeRe
10460 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e  cordCompareStrin
10470 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  g()..*/.struct U
10480 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
10490 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
104a0 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
104b0 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
104c0 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
104d0 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
104e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
104f0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
10500 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
10510 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
10520 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
10530 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
10540 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 69   equal */.  u8 i
10550 73 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  sCorrupt;       
10560 2f 2a 20 43 6f 72 72 75 70 74 69 6f 6e 20 64 65  /* Corruption de
10570 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
10580 64 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20  dCompare() */.  
10590 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
105a0 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
105b0 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20  .  int r1;      
105c0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
105d0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68  to return if (lh
105e0 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e  s > rhs) */.  in
105f0 74 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  t r2;           
10600 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
10610 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c  turn if (rhs < l
10620 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a  hs) */.};.../*.*
10630 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
10640 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
10650 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
10660 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
10670 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10680 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
10690 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
106a0 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
106b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
106c0 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
106d0 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
106e0 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
106f0 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
10700 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
10710 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
10720 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
10730 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
10740 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
10750 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
10760 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
10770 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
10780 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
10790 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
107a0 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
107b0 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
107c0 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
107d0 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
107e0 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
107f0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
10800 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
10810 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
10820 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
10830 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
10840 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
10850 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
10860 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
10870 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
10880 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
10890 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a  =2 because the .
108a0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
108b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
108c0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
108d0 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
108e0 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
108f0 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
10900 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
10910 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
10920 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
10930 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
10940 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
10950 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
10960 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
10970 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
10980 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
10990 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
109a0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
109b0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
109c0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
109d0 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
109e0 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
109f0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
10a00 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
10a10 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
10a20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
10a30 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
10a40 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
10a50 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
10a60 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
10a70 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69  ution .** algori
10a80 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
10a90 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
10aa0 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
10ab0 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
10ac0 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a  .** element..*/.
10ad0 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
10ae0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10b00 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
10b10 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
10b20 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
10b30 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
10b40 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
10b50 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
10b60 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
10b70 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
10b80 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
10b90 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
10ba0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
10bb0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
10bc0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
10bd0 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
10be0 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
10bf0 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
10c00 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
10c10 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
10c20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
10c30 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
10c40 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
10c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
10c60 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
10c70 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
10c80 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
10c90 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
10ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
10cb0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
10cc0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
10cd0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
10ce0 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
10cf0 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
10d00 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
10d10 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  C */.  char **az
10d20 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
10d30 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
10d40 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
10d50 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
10d60 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
10d70 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
10d80 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
10d90 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
10da0 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70   */.  KeyInfo *p
10db0 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20 20 20 2f  KeyInfo;       /
10dc0 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  * A KeyInfo obje
10dd0 63 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  ct suitable for 
10de0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
10df0 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
10e00 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50           /* DB P
10e10 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72  age containing r
10e20 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65  oot of this inde
10e30 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  x */.  LogEst sz
10e40 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20  IdxRow;         
10e50 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65  /* Estimated ave
10e60 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e  rage row size in
10e70 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20   bytes */.  u16 
10e80 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  nKeyCol;        
10e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10ea0 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e  f columns formin
10eb0 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75  g the key */.  u
10ec0 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 nColumn;     
10ed0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10ee0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f  r of columns sto
10ef0 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78  red in the index
10f00 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72   */.  u8 onError
10f10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
10f20 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49  * OE_Abort, OE_I
10f30 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63  gnore, OE_Replac
10f40 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f  e, or OE_None */
10f50 0a 20 20 75 6e 73 69 67 6e 65 64 20 61 75 74 6f  .  unsigned auto
10f60 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31  Index:2;    /* 1
10f70 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49  ==UNIQUE, 2==PRI
10f80 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45  MARY KEY, 0==CRE
10f90 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75  ATE INDEX */.  u
10fa0 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
10fb0 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
10fc0 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
10fd0 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
10fe0 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
10ff0 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
11000 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
11010 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
11020 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
11030 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
11040 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
11050 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
11060 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
11070 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
11080 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
11090 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
110a0 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
110b0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
110c0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
110d0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
110e0 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
110f0 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
11100 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
11110 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
11120 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
11130 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
11140 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
11150 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
11160 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
11170 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
11180 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
11190 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
111a0 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
111b0 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
111c0 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
111d0 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
111e0 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
111f0 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
11200 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
11210 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
11220 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
11230 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
11240 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
11250 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
11260 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
11270 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
11280 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
11290 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
112a0 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
112b0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
112c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
112d0 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
112e0 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
112f0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
11300 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
11310 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
11320 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11330 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
11340 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
11350 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
11360 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
11370 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
11380 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
11390 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
113a0 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
113b0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
113c0 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
113d0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
113e0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
113f0 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
11400 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
11410 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
11420 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
11430 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
11440 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d  * Each token com
11450 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  ing out of the l
11460 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61  exer is an insta
11470 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
11480 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e  tructure.  Token
11490 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20  s are also used 
114a0 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78  as part of an ex
114b0 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  pression..**.** 
114c0 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d  Note if Token.z=
114d0 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79  =0 then Token.dy
114e0 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72  n and Token.n ar
114f0 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a  e undefined and.
11500 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72  ** may contain r
11510 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44  andom values.  D
11520 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61  o not make any a
11530 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74  ssumptions about
11540 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e   Token.dyn.** an
11550 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54  d Token.n when T
11560 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74  oken.z==0..*/.st
11570 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
11580 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
11590 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
115a0 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
115b0 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
115c0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
115d0 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
115e0 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
115f0 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
11600 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
11610 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
11620 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
11630 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
11640 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
11650 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
11660 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
11670 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
11680 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
11690 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
116a0 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
116b0 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
116c0 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
116d0 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
116e0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
116f0 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
11700 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
11710 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
11720 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
11730 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
11740 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
11750 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
11760 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
11770 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
11780 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
11790 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
117a0 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
117b0 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
117c0 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
117d0 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
117e0 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
117f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
11800 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
11810 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
11820 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
11830 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
11840 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
11850 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
11860 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
11870 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
11880 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
11890 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
118a0 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
118b0 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
118d0 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
118e0 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
118f0 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
11900 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
11910 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
11920 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
11930 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
11940 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
11950 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11970 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
11980 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
11990 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
119a0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
119b0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
119c0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
119d0 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
119e0 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
119f0 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
11a00 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
11a10 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
11a20 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
11a30 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11a40 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
11a50 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
11a60 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
11a70 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
11a80 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
11a90 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
11aa0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
11ab0 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
11ac0 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
11ad0 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
11ae0 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
11af0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
11b00 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
11b10 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
11b20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
11b30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
11b40 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
11b50 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
11b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
11b70 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
11b80 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
11b90 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
11ba0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
11bb0 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
11bc0 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
11bd0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
11be0 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
11bf0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
11c00 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
11c10 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
11c20 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c40 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
11c50 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
11c60 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
11c70 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
11c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
11c90 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
11ca0 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
11cb0 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
11cc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11cd0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
11ce0 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
11cf0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
11d00 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
11d10 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11d20 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
11d30 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
11d40 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11d60 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
11d70 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
11d80 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
11d90 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11db0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
11dc0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
11dd0 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
11de0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
11df0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
11e00 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
11e10 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
11e20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
11e30 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
11e40 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
11e50 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
11e60 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
11e70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
11e80 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
11e90 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11eb0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
11ec0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
11ed0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
11ee0 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
11ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
11f00 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
11f10 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
11f20 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
11f30 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11f50 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
11f60 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
11f70 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
11f80 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
11f90 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
11fa0 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
11fb0 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
11fc0 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
11fd0 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
11fe0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
11ff0 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
12000 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
12010 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
12020 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
12030 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
12040 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
12050 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
12060 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
12070 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
12080 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
12090 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
120a0 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
120b0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
120c0 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
120d0 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
120e0 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
120f0 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
12100 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
12110 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
12120 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
12130 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
12140 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
12150 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
12160 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
12170 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
12180 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
12190 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
121a0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
121b0 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
121c0 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
121d0 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
121e0 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
121f0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
12200 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
12210 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
12220 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
12230 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
12240 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
12250 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
12260 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
12270 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
12280 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
12290 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
122a0 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
122b0 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
122c0 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
122d0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
122e0 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
122f0 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
12300 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
12310 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
12320 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
12330 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
12340 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
12350 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
12360 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
12370 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
12380 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12390 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
123a0 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
123b0 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a  LOAT, TK_BLOB, .
123c0 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
123d0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
123e0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
123f0 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
12400 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
12410 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12420 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
12430 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
12440 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
12450 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61  ns the .** varia
12460 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
12470 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
12480 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
12490 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
124a0 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
124b0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
124c0 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
124d0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
124e0 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
124f0 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
12500 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
12510 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
12520 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
12530 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
12540 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
12550 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
12560 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
12570 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
12580 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
12590 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
125a0 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
125b0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
125c0 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
125d0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
125e0 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
125f0 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
12600 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
12610 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
12620 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
12630 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
12640 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
12650 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
12660 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
12670 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
12680 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
12690 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
126a0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
126b0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
126c0 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
126d0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
126e0 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
126f0 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
12700 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
12710 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
12720 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
12730 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
12740 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
12750 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
12760 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
12770 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
12780 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
12790 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
127a0 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
127b0 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
127c0 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
127d0 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
127e0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
127f0 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
12800 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
12810 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
12820 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
12830 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
12840 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
12850 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
12860 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
12870 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
12880 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
12890 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
128a0 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
128b0 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
128c0 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
128d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
128e0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
128f0 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
12900 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
12910 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61  ion mark .** cha
12920 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
12930 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
12940 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
12950 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
12960 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  ndex .** number 
12970 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
12980 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
12990 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
129a0 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
129b0 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
129c0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
129d0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
129e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
129f0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
12a00 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
12a10 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
12a20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
12a30 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
12a40 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
12a50 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
12a60 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
12a70 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
12a80 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
12a90 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
12aa0 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
12ab0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
12ac0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
12ad0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
12ae0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
12af0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
12b00 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
12b10 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
12b20 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
12b30 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
12b40 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
12b50 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
12b60 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
12b70 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
12b80 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
12b90 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
12ba0 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
12bb0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
12bc0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
12bd0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
12be0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
12bf0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
12c00 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
12c10 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
12c20 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
12c30 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
12c40 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
12c50 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
12c60 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
12c70 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
12c80 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
12c90 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
12ca0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
12cb0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
12cc0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
12cd0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
12ce0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
12cf0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
12d00 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
12d10 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
12d20 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
12d30 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
12d40 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
12d50 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
12d60 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
12d70 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
12d80 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
12d90 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
12da0 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
12db0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
12dc0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
12dd0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
12de0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
12df0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
12e00 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
12e10 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
12e20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
12e30 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
12e40 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
12e50 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
12e60 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
12e70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
12e80 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
12e90 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
12ea0 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ec0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
12ed0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
12ee0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
12ef0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
12f00 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
12f10 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
12f20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
12f30 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
12f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
12f50 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
12f60 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
12f70 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
12f80 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
12f90 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
12fa0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
12fb0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
12fc0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
12fd0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
12fe0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
12ff0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
13000 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
13010 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
13020 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
13030 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
13040 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
13050 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
13060 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
13070 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
13080 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
13090 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
130a0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
130b0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
130c0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
130d0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20  or malfunction. 
130e0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
130f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13120 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
13130 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
13140 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
13150 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
13160 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
13170 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
13180 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
13190 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
131a0 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
131b0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
131c0 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
131d0 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
131e0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
131f0 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
13200 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
13210 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
13220 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
13230 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
13240 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
13250 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
13260 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
13270 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
13280 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
13290 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
132a0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
132b0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
132c0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
132d0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
132e0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
132f0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
13300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
13340 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
13350 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
13360 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
13370 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
13380 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
13390 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
133a0 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
133b0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
133c0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
133d0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
133e0 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
133f0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
13400 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13410 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
13420 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
13450 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
13460 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
13490 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b 65   1000 times like
134a0 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61  lihood */.  ynVa
134b0 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
134c0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
134d0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
134e0 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
13510 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
13520 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
13530 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
13540 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
13550 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
13560 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
13570 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
13580 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
13590 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
135a0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
135b0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
135c0 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
135d0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
135e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
135f0 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
13600 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
13610 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
13620 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13630 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
13640 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
13650 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
13680 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
13690 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
136a0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
136b0 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
136c0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
136d0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
136e0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
136f0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
13700 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
13710 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
13720 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
13730 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
13740 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
13750 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
13760 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
13770 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
13780 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
13790 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72  ginated in ON or
137a0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
137b0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69   a join */.#defi
137c0 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
137d0 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
137e0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
137f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13800 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
13810 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
13820 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
13830 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
13840 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
13850 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
13860 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
13870 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
13880 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
13890 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
138a0 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
138b0 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
138c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
138d0 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
138e0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
138f0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
13900 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
13910 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
13920 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
13930 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
13940 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
13950 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
13960 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
13970 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
13980 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
13990 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
139a0 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
139b0 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
139c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
139d0 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
139e0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
139f0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
13a00 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
13a10 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
13a20 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
13a30 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
13a40 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
13a50 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
13a60 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
13a70 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
13a80 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
13a90 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
13aa0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
13ab0 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
13ac0 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13ad0 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
13ae0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
13af0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
13b00 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
13b10 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
13b20 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
13b30 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
13b40 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
13b50 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
13b60 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
13b70 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
13b80 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
13b90 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
13ba0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
13bb0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
13bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
13bd0 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
13be0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
13bf0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
13c00 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
13c10 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
13c20 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
13c30 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
13c40 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
13c50 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
13c60 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
13c70 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
13c80 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
13c90 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
13ca0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
13cb0 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
13cc0 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
13cd0 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
13ce0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
13cf0 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30  Constant  0x0800
13d00 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
13d10 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a  constant */../*.
13d20 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
13d30 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
13d40 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
13d50 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
13d60 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
13d70 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
13d80 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
13d90 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
13da0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
13db0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
13dc0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
13dd0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
13de0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
13df0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
13e00 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
13e10 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
13e20 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
13e30 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
13e40 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
13e50 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
13e60 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
13e70 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
13e80 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
13e90 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
13ea0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
13eb0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
13ec0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
13ed0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
13ee0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
13ef0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
13f00 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
13f10 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
13f20 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
13f30 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
13f40 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
13f50 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
13f60 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
13f70 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
13f80 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
13f90 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
13fa0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
13fb0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
13fc0 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
13fd0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
13fe0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
13ff0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
14000 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
14010 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
14020 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
14030 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
14040 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
14050 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
14060 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
14070 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
14080 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
14090 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
140a0 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
140b0 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
140c0 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
140d0 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
140e0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
140f0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
14100 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
14110 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
14120 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
14130 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
14140 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
14150 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
14160 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
14170 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
14180 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
14190 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
141a0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
141b0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
141c0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
141d0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
141e0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
141f0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
14200 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
14210 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
14220 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
14230 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
14240 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
14250 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
14260 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
14270 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
14280 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
14290 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
142a0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
142b0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
142c0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
142d0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
142e0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
142f0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
14300 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
14310 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
14320 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
14330 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
14340 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
14350 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
14360 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
14370 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
14380 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
14390 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
143a0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
143b0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
143c0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
143d0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
143e0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
143f0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
14400 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
14410 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
14420 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
14430 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
14440 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
14450 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
14460 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
14470 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
14480 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
14490 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
144a0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
144b0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
144c0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
144d0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
144e0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
144f0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
14500 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
14510 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
14520 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
14530 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
14540 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
14550 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
14560 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
14570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14580 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
14590 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
145a0 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
145b0 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
145c0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
145d0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
145e0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
145f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14600 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
14610 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
14620 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14630 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
14640 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
14650 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
14660 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
14670 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14680 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
14690 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
146a0 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
146b0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
146c0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
146d0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
146e0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
146f0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
14700 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
14710 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
14720 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
14730 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
14740 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
14750 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
14760 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
14770 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
14780 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
14790 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
147a0 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
147b0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
147c0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
147d0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
147e0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
147f0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
14800 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
14810 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
14820 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
14830 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
14840 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
14850 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
14860 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
14870 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
14880 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
14890 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
148a0 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
148b0 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
148c0 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
148d0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
148e0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
148f0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
14900 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
14910 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
14920 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
14930 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
14940 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
14950 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
14960 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
14970 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
14980 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
14990 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
149a0 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
149b0 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
149c0 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
149d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
149e0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
149f0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
14a00 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
14a10 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
14a20 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
14a30 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
14a40 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
14a50 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
14a60 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
14a70 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
14a80 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
14a90 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
14aa0 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
14ab0 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
14ac0 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
14ad0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
14ae0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
14af0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
14b00 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
14b10 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
14b20 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
14b30 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
14b40 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
14b50 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
14b60 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
14b70 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
14b80 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
14b90 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
14ba0 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
14bb0 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
14bc0 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
14bd0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
14be0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
14bf0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
14c00 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
14c10 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
14c20 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
14c30 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
14c40 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
14c50 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
14c60 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
14c70 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
14c80 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
14c90 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
14ca0 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
14cb0 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
14cc0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
14cd0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14ce0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
14cf0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
14d00 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14d10 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
14d20 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
14d30 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
14d40 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
14d50 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
14d60 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
14d70 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
14d80 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
14d90 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
14da0 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
14db0 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
14dc0 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
14dd0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
14de0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
14df0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
14e00 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
14e10 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
14e20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
14e30 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
14e40 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
14e50 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
14e60 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
14e70 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
14e80 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
14e90 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
14ea0 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
14eb0 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
14ec0 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
14ed0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
14ee0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
14ef0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
14f00 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
14f10 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
14f20 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
14f30 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
14f40 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
14f50 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
14f60 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
14f70 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
14f80 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
14f90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14fa0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
14fb0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
14fc0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
14fd0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
14fe0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
14ff0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
15000 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
15010 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
15020 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
15030 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
15040 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
15050 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
15060 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
15070 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
15080 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
15090 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
150a0 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
150b0 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
150c0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
150d0 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
150e0 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
150f0 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
15100 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
15110 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
15120 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
15130 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
15140 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
15150 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
15160 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
15170 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
15180 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
15190 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
151a0 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
151b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
151c0 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
151d0 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
151e0 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
151f0 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
15200 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
15210 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
15220 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
15230 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
15240 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
15250 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
15260 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
15270 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
15280 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
15290 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
152a0 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
152b0 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
152c0 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
152d0 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
152e0 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
152f0 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
15300 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
15310 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
15320 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
15330 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
15340 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
15350 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
15360 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
15370 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
15380 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
15390 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
153a0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
153b0 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
153c0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
153d0 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
153e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
153f0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
15400 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
15410 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
15420 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
15430 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
15440 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
15450 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
15460 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
15470 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
15480 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
15490 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
154a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
154b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
154c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
154d0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
154e0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
154f0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
15500 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
15510 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
15520 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
15530 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
15540 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
15550 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
15560 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
15570 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
15580 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
15590 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
155a0 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
155b0 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
155c0 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
155d0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
155e0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
155f0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
15600 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
15610 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
15620 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
15630 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
15640 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
15650 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
15660 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
15670 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
15680 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
15690 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
156a0 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
156b0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
156c0 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
156d0 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
156e0 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
156f0 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
15700 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
15710 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
15720 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  use */.    unsig
15730 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
15740 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
15750 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
15760 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
15770 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
15780 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
15790 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
157a0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
157b0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
157c0 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
157d0 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
157e0 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
157f0 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ITH */.#ifndef S
15800 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
15810 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
15820 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
15830 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
15840 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
15850 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
15860 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
15870 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
15880 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
15890 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
158a0 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
158b0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
158c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
158d0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
158e0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
158f0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
15900 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
15910 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
15920 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
15930 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
15940 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
15950 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
15960 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
15970 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
15980 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
15990 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
159a0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
159b0 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
159c0 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
159d0 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
159e0 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
159f0 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
15a00 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
15a10 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
15a20 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
15a30 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
15a40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
15a50 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
15a60 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
15a70 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
15a80 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
15a90 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
15aa0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
15ab0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
15ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
15ad0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
15ae0 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
15af0 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
15b00 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
15b10 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
15b20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
15b30 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
15b40 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
15b50 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
15b60 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
15b70 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
15b80 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
15b90 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
15ba0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
15bb0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
15bc0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
15bd0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
15be0 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
15bf0 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
15c00 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
15c10 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
15c20 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
15c30 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
15c40 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
15c50 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
15c60 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
15c70 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
15c80 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
15c90 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
15ca0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
15cb0 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
15cc0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
15cd0 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
15ce0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
15cf0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
15d00 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
15d10 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
15d20 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
15d30 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
15d40 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
15d50 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
15d60 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
15d70 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
15d80 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
15d90 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
15da0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
15db0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
15dc0 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
15dd0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
15de0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
15df0 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
15e00 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
15e10 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
15e20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15e30 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
15e40 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
15e50 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
15e60 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
15e70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
15e80 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
15e90 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
15ea0 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
15eb0 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
15ec0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
15ed0 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
15ee0 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
15ef0 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
15f00 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
15f10 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c  ne WHERE_AND_ONL
15f20 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30  Y         0x0080
15f30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e   /* Don't use in
15f40 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72  dices for OR ter
15f50 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ms */.#define WH
15f60 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
15f70 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
15f80 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
15f90 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
15fa0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
15fb0 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
15fc0 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
15fd0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
15fe0 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
15ff0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
16000 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
16010 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
16020 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
16030 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a 2f 2a   distinct */../*
16040 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
16050 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
16060 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
16070 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
16080 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
16090 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
160a0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
160b0 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
160c0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
160d0 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
160e0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
160f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16100 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
16110 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
16120 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
16130 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
16140 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
16150 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
16160 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
16170 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
16180 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
16190 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
161a0 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
161b0 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
161c0 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
161d0 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
161e0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
161f0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
16200 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
16210 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
16220 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
16230 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
16240 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
16250 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
16260 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
16270 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
16280 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
16290 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
162a0 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
162b0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
162c0 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
162d0 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
162e0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
162f0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
16300 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
16310 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
16320 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
16330 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
16340 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
16350 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
16360 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
16370 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
16380 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65  r-most .** conte
16390 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
163a0 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
163b0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
163c0 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
163d0 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
163e0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
163f0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
16400 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
16410 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
16420 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
16430 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
16440 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
16450 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
16460 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
16470 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
16480 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
16490 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
164a0 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
164b0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
164c0 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
164d0 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  d. .**.** Each s
164e0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
164f0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
16500 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
16510 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16520 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
16530 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
16540 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
16550 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
16560 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
16570 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
16580 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
16590 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
165a0 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
165b0 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
165c0 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
165d0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
165e0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
165f0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
16600 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
16610 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
16620 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
16630 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
16640 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
16650 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
16660 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
16670 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
16680 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
16690 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
166a0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
166b0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
166c0 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
166d0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
166e0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
166f0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
16700 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
16710 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
16720 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
16730 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
16740 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
16750 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
16760 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
16770 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
16780 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16790 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
167a0 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
167b0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
167c0 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20   u8 ncFlags;    
167d0 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
167e0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
167f0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
16800 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
16810 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
16820 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
16830 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
16840 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
16850 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20 2f  owAgg  0x01    /
16860 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
16870 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
16880 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
16890 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
168a0 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  x02    /* One or
168b0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
168c0 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
168d0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
168e0 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f  heck   0x04    /
168f0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
16900 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
16910 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
16920 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
16930 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20 20  AggFunc 0x08    
16940 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
16950 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
16960 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
16970 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
16980 49 64 78 20 20 20 30 78 31 30 20 20 20 20 2f 2a  Idx   0x10    /*
16990 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
169a0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
169b0 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a  ex WHERE */../*.
169c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
169d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
169e0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
169f0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
16a00 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
16a10 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
16a20 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
16a30 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
16a40 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
16a50 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
16a60 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
16a70 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
16a80 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
16a90 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
16aa0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
16ab0 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
16ac0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
16ad0 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
16ae0 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
16af0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
16b00 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
16b10 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
16b20 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
16b30 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
16b40 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
16b50 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
16b60 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
16b70 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
16b80 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
16b90 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
16ba0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
16bb0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
16bc0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
16bd0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
16be0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
16bf0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
16c00 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
16c10 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
16c20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
16c30 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
16c40 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
16c50 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
16c60 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
16c70 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
16c80 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
16c90 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
16ca0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
16cb0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
16cc0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
16cd0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
16ce0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
16cf0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
16d00 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
16d10 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
16d20 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
16d30 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
16d40 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
16d50 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
16d60 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
16d70 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
16d80 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
16d90 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
16da0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
16db0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
16dc0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
16dd0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
16de0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
16df0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
16e00 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
16e10 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
16e20 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
16e30 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
16e60 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
16e70 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
16e80 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
16e90 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
16ea0 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
16eb0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
16ec0 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
16ed0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
16ee0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
16ef0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
16f00 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ters */.  int ad
16f10 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
16f20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
16f30 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
16f40 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
16f50 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
16f60 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
16f70 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
16f80 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
16f90 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
16fa0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
16fb0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
16fc0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
16fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16fe0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
16ff0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
17000 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
17010 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
17020 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
17030 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
17040 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
17050 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
17060 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
17070 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
17080 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
17090 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
170a0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
170b0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
170c0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
170d0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
170e0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
170f0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
17100 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
17110 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
17120 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
17130 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
17140 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
17150 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
17160 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
17170 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
17180 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
17190 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
171a0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
171b0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
171c0 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
171d0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
171e0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
171f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
17200 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
17210 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
17220 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
17230 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
17240 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
17250 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
17260 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
17270 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
17280 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
17290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
172a0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
172b0 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
172c0 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
172d0 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
172e0 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
172f0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
17300 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
17310 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
17320 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
17330 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
17340 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
17350 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
17360 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
17370 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
17380 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
17390 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
173a0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
173b0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
173c0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
173d0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
173e0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
173f0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
17400 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
17410 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
17420 78 30 30 34 30 20 20 4e 4f 54 20 55 53 45 44 20  x0040  NOT USED 
17430 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
17440 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78  lues          0x
17450 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0080  /* Synthes
17460 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
17470 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17490 2a 20 20 20 20 20 30 78 30 31 30 30 20 20 4e 4f  *     0x0100  NO
174a0 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e  T USED */.#defin
174b0 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
174c0 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20       0x0200  /* 
174d0 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
174e0 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
174f0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
17500 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
17510 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65    0x0400  /* Nee
17520 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
17530 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
17540 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
17550 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
17560 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65    0x0800  /* The
17570 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
17580 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
17590 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
175a0 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
175b0 20 30 78 31 30 30 30 20 20 2f 2a 20 50 61 72 74   0x1000  /* Part
175c0 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
175d0 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  uery */.../*.** 
175e0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
175f0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
17600 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
17610 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
17620 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
17630 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
17640 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
17650 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
17660 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
17670 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
17680 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
17690 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
176a0 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
176b0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
176c0 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
176d0 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
176e0 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
176f0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
17700 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
17710 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
17720 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
17730 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
17740 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
17750 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
17760 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
17770 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
17780 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
17790 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
177c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
177d0 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
177e0 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
177f0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
17800 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
17830 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
17840 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
17850 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
17860 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
17870 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
17880 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
17890 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
178a0 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
178b0 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
178c0 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
178d0 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
178e0 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
178f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17900 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
17910 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
17920 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
17930 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
17940 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
17970 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
17980 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
17990 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
179a0 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
179b0 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
179c0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
179d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
179e0 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
179f0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
17a00 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
17a10 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
17a30 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
17a40 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
17a50 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
17a60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17a70 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
17a80 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
17a90 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
17aa0 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
17ab0 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
17ac0 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
17ad0 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
17ae0 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
17af0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
17b00 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
17b10 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
17b20 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
17b30 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
17b60 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
17b70 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
17b80 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
17b90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
17ba0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
17bb0 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
17bc0 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
17bd0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
17be0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
17bf0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
17c00 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
17c10 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17c30 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
17c40 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
17c50 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
17c60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17c70 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
17c80 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
17c90 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
17ca0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
17cc0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
17cd0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
17ce0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
17d10 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
17d20 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
17d30 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
17d40 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
17d50 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
17d60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17d70 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
17d80 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
17d90 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
17da0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
17dc0 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
17dd0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
17de0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
17df0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
17e10 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
17e20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
17e30 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
17e40 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
17e50 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
17e60 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
17e70 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
17e80 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
17e90 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
17ea0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
17eb0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
17ec0 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
17ed0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
17ee0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
17ef0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
17f00 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
17f30 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
17f40 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
17f70 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
17f80 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
17f90 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
17fa0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
17fb0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17fc0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
17fd0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
17fe0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
17ff0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
18000 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
18030 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18040 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
18050 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
18060 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
18070 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
18080 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
18090 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
180a0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
180b0 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
180c0 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
180d0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
180e0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
180f0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
18100 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
18110 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
18120 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
18130 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18140 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
18150 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
18160 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
18170 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
18180 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18190 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
181a0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
181b0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
181c0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
181d0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
181e0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
181f0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18210 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
18220 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
18230 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
18240 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18250 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
18260 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
18270 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
18280 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
18290 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
182a0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
182b0 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
182c0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
182d0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
182e0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
182f0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
18300 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
18310 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
18320 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
18330 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
18340 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
18350 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
18360 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
18370 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
18380 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
18390 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
183a0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
183b0 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
183c0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
183d0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
183e0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
183f0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
18400 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
18410 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
18420 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
18430 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
18440 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
18450 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
18460 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
18470 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
18480 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
18490 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
184a0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
184b0 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
184c0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
184d0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
184e0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
184f0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
18500 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
18510 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
18520 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
18530 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
18540 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
18550 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
18560 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
18570 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
18580 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
18590 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
185a0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
185b0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
185c0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
185d0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
185e0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
185f0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
18600 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
18610 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
18620 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
18630 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
18640 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
18650 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
18660 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
18670 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
18680 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
18690 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
186a0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
186b0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
186c0 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
186d0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
186e0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
186f0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
18700 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
18710 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
18720 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
18730 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
18740 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
18750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
18760 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
18770 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
18780 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
18790 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
187a0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
187b0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
187c0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
187d0 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
187e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
187f0 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
18800 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
18810 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
18820 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
18830 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
18840 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
18850 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
18860 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
18870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18880 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
18890 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
188a0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
188b0 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
188c0 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
188d0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
188e0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
188f0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
18900 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
18910 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
18920 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
18930 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
18940 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
18950 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
18960 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
18970 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
18980 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
18990 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
189a0 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
189b0 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
189c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
189d0 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
189e0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
189f0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
18a00 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
18a10 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
18a20 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
18a30 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
18a40 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
18a50 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
18a60 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
18a70 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
18a80 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
18a90 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
18aa0 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
18ab0 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
18ac0 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
18ad0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
18ae0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
18af0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
18b00 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
18b10 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
18b20 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
18b30 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
18b40 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
18b50 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
18b60 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
18b70 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
18b80 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
18b90 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
18ba0 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
18bb0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
18bc0 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
18bd0 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
18be0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
18bf0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
18c00 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
18c10 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
18c20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
18c30 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
18c40 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
18c50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
18c60 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
18c70 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
18c80 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
18c90 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
18ca0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
18cb0 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
18cc0 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
18cd0 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
18ce0 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
18cf0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
18d00 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
18d10 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
18d20 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
18d30 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
18d40 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
18d50 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
18d60 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
18d70 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
18d80 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
18d90 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
18da0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
18db0 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
18dc0 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
18dd0 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
18de0 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
18df0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
18e00 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
18e10 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
18e20 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
18e30 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
18e40 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
18e50 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
18e60 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
18e70 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
18e80 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
18e90 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
18ea0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
18eb0 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
18ec0 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
18ed0 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
18ee0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
18ef0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
18f00 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
18f10 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
18f20 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
18f30 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
18f40 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
18f50 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
18f60 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
18f70 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
18f80 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
18f90 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
18fa0 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
18fb0 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
18fc0 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
18fd0 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
18fe0 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
18ff0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
19000 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
19010 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
19020 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
19030 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
19040 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
19050 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
19060 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
19070 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
19080 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
19090 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
190a0 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
190b0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
190c0 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
190d0 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
190e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
190f0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
19100 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
19110 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
19120 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
19130 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
19140 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
19150 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
19160 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
19170 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
19180 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
19190 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
191a0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
191b0 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
191c0 64 65 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74  def sqlite3_uint
191d0 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73  64 yDbMask;.#els
191e0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
191f0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
19200 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
19210 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
19220 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
19230 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
19240 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
19250 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
19260 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
19270 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
19280 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
19290 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
192a0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
192b0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
192c0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
192d0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
192e0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
192f0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
19300 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
19310 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
19320 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
19330 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
19340 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
19350 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
19360 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
19370 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
19380 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
19390 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
193a0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
193b0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
193c0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
193d0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
193e0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
193f0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
19400 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
19410 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
19420 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
19430 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
19440 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
19450 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
19460 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
19470 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
19480 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
19490 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
194a0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
194b0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
194c0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
194d0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
194e0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
194f0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
19500 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
19510 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
19520 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
19530 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
19540 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
19550 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
19560 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
19570 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
19580 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
19590 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
195a0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
195b0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
195c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
195d0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
195e0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
195f0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
19600 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
19610 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
19620 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
19630 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
19640 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
19650 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
19660 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
19670 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
19680 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
19690 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
196a0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
196b0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
196c0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
196d0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
196e0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
196f0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
19700 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
19710 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
19720 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
19730 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
19740 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
19750 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
19760 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
19770 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
19780 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
19790 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
197a0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
197b0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
197c0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
197d0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
197e0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
197f0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
19800 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
19810 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
19820 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
19830 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
19840 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
19850 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
19860 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
19870 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
19880 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
19890 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
198a0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
198b0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
198c0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
198d0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
198e0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
198f0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
19900 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
19910 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
19920 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19930 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
19940 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
19950 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19960 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
19970 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
19980 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
19990 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
199a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
199b0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
199c0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
199d0 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
199e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
199f0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
19a00 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
19a10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19a20 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
19a30 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
19a40 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
19a50 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
19a60 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
19a70 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
19a80 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
19a90 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
19aa0 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
19ab0 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
19ac0 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
19ad0 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
19ae0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
19af0 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
19b00 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
19b10 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
19b20 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
19b30 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
19b40 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
19b50 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
19b60 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
19b70 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
19b80 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
19b90 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
19ba0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
19bb0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
19bc0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
19bd0 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
19be0 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
19bf0 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
19c00 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
19c10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19c20 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
19c30 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
19c40 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
19c50 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
19c60 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
19c70 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
19c80 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
19c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
19ca0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
19cb0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
19cc0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
19cd0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
19ce0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
19cf0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
19d00 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
19d10 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
19d20 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
19d30 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
19d40 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
19d50 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
19d60 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
19d70 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
19d80 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
19d90 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
19da0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
19db0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
19dd0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
19de0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
19df0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
19e00 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
19e10 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
19e20 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
19e30 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
19e40 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
19e50 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
19e60 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
19e70 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
19e80 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
19e90 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
19ea0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
19eb0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
19ec0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
19ed0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
19ee0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
19ef0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
19f00 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
19f10 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
19f20 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
19f30 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
19f40 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
19f50 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
19f60 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
19f70 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
19f80 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
19f90 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
19fa0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
19fb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
19fc0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
19fd0 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
19fe0 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
19ff0 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1a000 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1a010 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1a020 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1a030 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1a040 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1a050 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1a060 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1a070 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1a080 67 72 61 6d 20 2a 2f 0a 23 69 66 6e 64 65 66 20  gram */.#ifndef 
1a090 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1a0a0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1a0b0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1a0c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1a0d0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1a0e0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1a0f0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1a100 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1a110 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1a120 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1a130 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1a140 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1a150 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1a160 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1a170 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1a180 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1a190 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1a1a0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1a1b0 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1a1c0 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1a1d0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1a1e0 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1a1f0 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1a200 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1a210 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1a220 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1a230 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1a240 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1a250 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1a260 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1a270 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1a280 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e  TE TABLE */.  in
1a290 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20  t addrSkipPK;   
1a2a0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1a2b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
1a2c0 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59  skip PRIMARY KEY
1a2d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20   index */.  u32 
1a2e0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1a2f0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1a300 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1a310 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1a320 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1a330 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1a340 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1a350 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1a360 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1a370 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1a380 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1a390 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1a3a0 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1a3b0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1a3c0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1a3d0 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1a3e0 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1a3f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1a400 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a410 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1a420 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1a430 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1a440 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1a450 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1a460 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1a470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1a4b0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1a4c0 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1a4d0 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1a4e0 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1a4f0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1a500 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1a510 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1a520 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1a530 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1a540 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1a550 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1a560 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1a570 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1a580 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1a590 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1a5a0 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1a5b0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1a5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a5d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a5e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1a600 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1a610 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a620 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1a630 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1a640 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1a650 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1a660 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a670 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1a680 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1a690 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1a6a0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1a6b0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1a6c0 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1a6d0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62  RY KEY */.  u8 b
1a6e0 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20 20  FreeWith;       
1a6f0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1a700 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65   pWith should be
1a710 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72 73   freed with pars
1a720 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  er */.  u8 expla
1a730 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1a740 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a750 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1a760 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1a770 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1a780 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1a790 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1a7a0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1a7b0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1a7c0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1a7d0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1a7e0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a800 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1a810 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1a820 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1a830 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1a840 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a850 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1a860 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1a870 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a890 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1a8a0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1a8b0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1a8c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a8d0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1a8e0 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1a8f0 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1a900 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1a910 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1a920 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1a930 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1a940 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1a950 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1a960 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1a970 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1a980 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1a990 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1a9a0 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1a9b0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1a9c0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1a9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1a9e0 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1a9f0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1aa00 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1aa10 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1aa20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1aa30 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1aa40 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1aa50 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1aa60 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1aa70 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1aa80 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1aa90 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1aaa0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1aab0 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1aac0 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1aad0 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1aae0 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1aaf0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1ab00 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1ab10 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1ab20 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1ab30 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1ab40 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1ab50 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1ab60 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1ab70 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1ab80 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1ab90 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1aba0 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1abb0 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1abc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1abd0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1abe0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1ac00 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1ac10 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1ac20 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1ac30 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1ac40 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1ac50 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1ac60 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1ac70 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1ac80 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1ac90 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1aca0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1acb0 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1acc0 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1acd0 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1ace0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1acf0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1ad00 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1ad10 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1ad20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1ad30 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1ad40 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  NULL */.};../*.*
1ad50 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1ad60 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1ad70 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1ad80 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1ad90 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1ada0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1adb0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1adc0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1add0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1ade0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1adf0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1ae00 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1ae10 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1ae20 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1ae30 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1ae40 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1ae50 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1ae60 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1ae70 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1ae80 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1ae90 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1aea0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1aeb0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1aec0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1aed0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1aee0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1aef0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1af00 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1af10 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1af20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1af30 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1af40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1af50 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1af60 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1af70 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1af80 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1af90 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1afa0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1afb0 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1afc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1afd0 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1afe0 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1aff0 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1b000 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1b010 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1b020 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1b030 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1b040 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1b050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1b060 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1b070 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1b080 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1b090 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1b0a0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1b0b0 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1b0c0 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1b0d0 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1b0e0 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1b0f0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45  efine OPFLAG_CLE
1b100 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20  ARCACHE    0x20 
1b110 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75     /* Clear pseu
1b120 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69  do-table cache i
1b130 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23  n OP_Column */.#
1b140 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1b150 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1b160 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1b170 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1b180 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1b190 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1b1a0 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1b1b0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1b1c0 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1b1d0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1b1e0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1b1f0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1b200 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1b210 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1b220 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1b230 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1b240 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20    0x02    /* P2 
1b250 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1b260 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1b270 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1b280 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1b290 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1b2a0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1b2b0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1b2c0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1b2d0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1b2e0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1b2f0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1b300 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1b310 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1b320 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1b330 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1b340 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1b350 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1b360 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1b370 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1b380 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1b390 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1b3a0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1b3b0 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1b3c0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1b3d0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1b3e0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1b3f0 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1b400 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1b410 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1b420 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1b430 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1b440 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1b450 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1b460 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1b470 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1b480 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1b490 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1b4a0 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1b4b0 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1b4c0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1b4d0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1b4e0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1b4f0 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1b500 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1b510 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1b520 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1b530 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1b540 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1b550 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1b560 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1b570 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1b580 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1b590 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1b5a0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1b5b0 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1b5c0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1b5f0 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1b600 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1b610 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1b620 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1b630 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b650 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1b660 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1b670 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1b680 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1b690 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b6a0 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1b6b0 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1b6c0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1b6d0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1b6e0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1b6f0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1b700 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1b710 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1b720 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1b730 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1b740 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1b750 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1b760 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1b790 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1b7a0 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1b7b0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1b7c0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1b7d0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1b7e0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1b7f0 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1b800 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1b810 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1b820 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1b830 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1b840 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1b850 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1b860 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1b870 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1b880 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1b890 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1b8a0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1b8b0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1b8c0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1b8d0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1b8e0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1b8f0 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1b900 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1b910 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1b920 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1b930 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1b940 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1b950 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1b960 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1b970 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1b980 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1b990 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1b9a0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1b9b0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1b9c0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1b9d0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1b9e0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1b9f0 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1ba00 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1ba10 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1ba20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1ba30 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1ba40 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1ba50 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1ba60 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1ba70 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1ba80 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1ba90 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1baa0 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1bab0 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1bac0 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1bad0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1bae0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1baf0 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1bb00 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1bb10 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1bb20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1bb30 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1bb40 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1bb50 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1bb60 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1bb70 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1bb80 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1bb90 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1bba0 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1bbb0 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1bbc0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1bbd0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1bbe0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1bbf0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1bc00 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1bc10 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1bc20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1bc30 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1bc40 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1bc50 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1bc60 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1bc70 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1bc80 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1bc90 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1bca0 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1bcb0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1bcc0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1bcd0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1bce0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1bcf0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1bd00 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1bd10 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  .. * target    -
1bd20 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1bd30 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1bd40 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1bd50 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
1bd60 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
1bd70 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1bd80 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
1bd90 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
1bda0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1bdb0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1bdc0 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
1bdd0 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
1bde0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
1bdf0 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
1be00 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1be10 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
1be20 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
1be30 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
1be40 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
1be50 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
1be60 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
1be70 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
1be80 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
1be90 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
1bea0 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
1beb0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1bec0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1bed0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1bee0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1bef0 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
1bf00 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1bf10 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1bf20 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
1bf30 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1bf40 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1bf50 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1bf60 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
1bf70 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
1bf80 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1bf90 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1bfa0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1bfb0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1bfc0 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
1bfd0 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
1bfe0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1bff0 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1c000 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1c010 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1c020 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1c030 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1c040 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1c050 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1c060 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1c070 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1c080 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1c090 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1c0a0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1c0b0 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1c0c0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1c0d0 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1c0e0 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1c0f0 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1c100 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1c110 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1c120 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1c130 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1c140 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1c150 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1c160 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1c170 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1c180 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1c190 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1c1a0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1c1b0 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1c1c0 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1c1d0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1c1e0 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1c1f0 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52  CT statment or R
1c200 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1c210 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20  O .. SELECT ... 
1c220 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
1c230 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72  t;        /* Tar
1c240 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1c250 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1c260 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1c270 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1c280 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1c290 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1c2a0 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1c2b0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1c2c0 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1c2d0 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1c2e0 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1c2f0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1c300 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1c310 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1c320 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1c330 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1c340 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1c350 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1c360 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1c370 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1c380 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1c390 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1c3a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c3b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1c3c0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1c3d0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1c3e0 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1c3f0 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1c400 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1c410 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1c420 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1c430 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1c440 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1c450 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1c460 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1c470 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1c480 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1c490 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1c4a0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1c4b0 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1c4c0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1c4d0 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1c4e0 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1c4f0 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1c500 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1c510 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1c520 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1c530 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1c540 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1c550 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1c560 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1c570 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1c580 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1c590 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1c5a0 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1c5b0 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1c5c0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1c5d0 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1c5e0 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1c5f0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1c600 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1c610 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1c620 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1c630 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1c640 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1c650 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1c660 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1c670 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1c680 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1c690 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1c6a0 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1c6b0 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1c6c0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1c6d0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1c6e0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1c6f0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1c700 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1c710 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1c720 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1c730 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1c740 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1c750 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1c760 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1c770 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1c780 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1c790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1c7a0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1c7b0 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1c7c0 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1c7d0 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1c7e0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1c7f0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1c800 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1c810 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1c820 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
1c830 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73  gth */.  u8   us
1c840 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a  eMalloc;      /*
1c850 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71   0: none,  1: sq
1c860 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20  lite3DbMalloc,  
1c870 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  2: sqlite3_mallo
1c880 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  c */.  u8   accE
1c890 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
1c8a0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
1c8b0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1c8c0 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
1c8d0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
1c8e0 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
1c8f0 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a  UM_TOOBIG  2../*
1c900 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1c910 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1c920 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1c930 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1c940 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1c950 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1c960 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1c970 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1c980 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1c990 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1c9a0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1c9b0 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1c9c0 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1c9d0 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
1c9e0 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
1c9f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
1ca00 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
1ca10 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1ca20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
1ca30 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
1ca40 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
1ca50 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
1ca60 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1ca70 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
1ca80 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1ca90 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
1caa0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
1cab0 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
1cac0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
1cad0 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
1cae0 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
1caf0 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
1cb00 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
1cb10 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
1cb20 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
1cb30 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
1cb40 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1cb70 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
1cb80 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
1cb90 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
1cba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1cbb0 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
1cbc0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1cbd0 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1cc00 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
1cc10 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
1cc20 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
1cc30 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1cc40 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
1cc50 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
1cc60 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
1cc90 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
1cca0 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
1ccb0 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccd0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
1cce0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1ccf0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
1cd00 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
1cd10 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1cd20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
1cd30 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
1cd40 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cd60 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1cd70 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1cd80 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1cd90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1cda0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1cdb0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1cdc0 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1cdd0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1cde0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1cdf0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1ce00 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1ce10 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1ce20 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1ce30 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1ce40 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1ce50 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1ce60 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1ce70 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
1ce80 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1ce90 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1cea0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1ceb0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1cec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1ced0 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1cee0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1cf10 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1cf20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1cf30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cf40 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1cf50 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1cf60 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
1cf70 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1cf90 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
1cfa0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
1cfb0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1cfc0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1cfd0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
1cfe0 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
1cff0 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
1d000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d010 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
1d020 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1d030 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d050 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
1d060 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
1d070 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d0a0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
1d0b0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
1d0c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d0d0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
1d0e0 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
1d0f0 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1d120 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
1d130 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
1d140 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1d150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d160 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1d170 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1d180 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d1a0 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
1d1b0 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
1d1c0 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
1d1d0 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
1d1e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
1d1f0 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
1d200 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
1d210 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
1d220 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
1d230 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
1d240 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
1d250 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
1d260 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
1d270 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
1d280 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
1d290 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1d2a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1d2b0 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
1d2c0 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
1d2d0 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
1d2e0 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
1d2f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d300 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
1d310 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
1d320 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
1d330 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
1d340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d350 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
1d360 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
1d370 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
1d380 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
1d390 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1d3a0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1d3b0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1d3c0 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
1d3d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1d3e0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1d3f0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1d400 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69  alized */.  sqli
1d410 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
1d420 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
1d430 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
1d440 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1d450 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  e() */.  int nRe
1d460 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1d470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d480 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1d490 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1d4a0 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
1d4b0 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
1d4c0 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
1d4d0 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
1d4e0 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
1d4f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d500 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1d510 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
1d520 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f  g() */.  int bLo
1d530 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1d540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d550 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1d560 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1d570 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1d580 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1d590 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1d5a0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1d5b0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1d5c0 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1d5d0 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
1d5e0 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
1d5f0 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
1d600 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
1d610 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
1d620 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
1d630 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
1d640 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
1d650 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
1d660 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
1d670 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1d680 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
1d690 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
1d6a0 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
1d6b0 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
1d6c0 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
1d6d0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
1d6e0 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
1d720 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  nt */.#endif.};.
1d730 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
1d740 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
1d750 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
1d760 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
1d770 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
1d780 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
1d790 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
1d7a0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
1d7b0 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
1d7c0 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1d7d0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
1d7e0 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
1d7f0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
1d800 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
1d810 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
1d820 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
1d830 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
1d840 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
1d850 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
1d860 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
1d870 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
1d880 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
1d890 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
1d8a0 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
1d8b0 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
1d8c0 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
1d8d0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
1d8e0 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
1d8f0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1d900 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
1d910 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
1d920 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
1d930 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
1d940 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
1d950 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
1d960 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
1d970 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
1d980 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
1d990 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
1d9a0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1d9b0 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1d9c0 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1d9d0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1d9e0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1d9f0 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1da00 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1da10 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1da20 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1da30 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1da40 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1da50 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1da60 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1da70 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1da80 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
1da90 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
1daa0 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
1dab0 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
1dac0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
1dad0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
1db00 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
1db10 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
1db20 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1db30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1db40 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
1db50 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ies */.  union {
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
1db90 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
1dba0 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
1dbb0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
1dbe0 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20  t */.    int i; 
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
1dc20 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c  alue */.    SrcL
1dc30 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc50 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
1dc60 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
1dc70 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
1dc80 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
1dc90 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1dca0 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
1dcb0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ences */.  } u;.
1dcc0 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
1dcd0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
1dce0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1dcf0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
1dd00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1dd10 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
1dd20 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
1dd30 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1dd40 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
1dd50 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1dd60 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
1dd70 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
1dd80 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1dd90 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
1dda0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1ddb0 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
1ddc0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
1ddd0 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
1dde0 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
1ddf0 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
1de00 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
1de10 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
1de20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
1de30 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
1de40 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
1de50 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
1de60 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
1de70 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
1de80 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
1de90 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
1dea0 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
1deb0 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
1dec0 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
1ded0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1dee0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1def0 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
1df00 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
1df10 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
1df20 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
1df30 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
1df40 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
1df50 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
1df60 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
1df70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1df80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1df90 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
1dfa0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
1dfb0 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
1dfe0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1dff0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
1e000 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
1e010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1e020 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
1e030 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
1e040 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
1e050 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1e060 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
1e070 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
1e080 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
1e090 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
1e0a0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
1e0b0 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
1e0c0 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
1e0d0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1e0e0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
1e0f0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
1e100 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
1e110 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
1e120 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20  char *zErr;     
1e130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
1e140 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
1e150 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
1e160 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
1e170 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  };../*.** Assumi
1e180 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
1e190 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1e1a0 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
1e1b0 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
1e1c0 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
1e1d0 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1e1e0 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
1e1f0 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
1e200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
1e210 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
1e240 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
1e250 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
1e280 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
1e290 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
1e2a0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
1e2f0 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
1e300 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
1e310 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
1e320 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
1e330 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
1e340 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
1e350 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
1e360 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
1e370 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
1e380 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
1e390 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
1e3a0 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
1e3b0 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
1e3c0 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
1e3d0 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
1e3e0 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
1e3f0 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
1e400 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
1e410 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
1e420 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
1e430 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
1e440 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
1e450 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
1e460 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
1e470 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
1e480 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
1e490 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
1e4a0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
1e4b0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1e4c0 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
1e4d0 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
1e4e0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1e4f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
1e500 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
1e510 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
1e520 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a  (__LINE__).../*.
1e530 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
1e540 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
1e550 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
1e560 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
1e570 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
1e580 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
1e590 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
1e5a0 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61  fusion we also a
1e5b0 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
1e5c0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
1e5d0 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
1e5e0 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c  n alisse for SQL
1e5f0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
1e600 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
1e610 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1e620 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
1e630 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1e640 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
1e650 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
1e660 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1e670 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
1e680 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
1e690 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
1e6a0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
1e6b0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
1e6c0 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
1e6d0 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
1e6e0 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
1e6f0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1e700 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
1e710 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
1e720 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
1e730 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
1e740 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
1e750 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
1e760 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1e770 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1e780 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
1e790 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
1e7a0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
1e7b0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
1e7c0 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
1e7d0 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
1e7e0 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
1e7f0 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
1e800 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
1e810 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
1e820 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
1e830 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
1e840 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
1e850 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
1e860 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
1e870 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
1e880 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1e890 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1e8a0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
1e8b0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1e8c0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
1e8d0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1e8e0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
1e8f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1e900 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
1e910 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1e920 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1e930 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
1e940 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1e950 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
1e960 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1e970 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
1e980 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1e990 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
1e9a0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1e9b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1e9c0 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
1e9d0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
1e9e0 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
1e9f0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1ea00 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
1ea10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ea20 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
1ea30 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
1ea40 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
1ea50 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
1ea60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1ea70 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
1ea80 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
1ea90 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1eaa0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
1eab0 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
1eac0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1ead0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1eae0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
1eaf0 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
1eb00 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1eb10 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1eb20 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
1eb30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1eb40 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1eb50 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
1eb60 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
1eb70 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1eb80 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1eb90 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
1eba0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
1ebb0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1ebc0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1ebd0 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
1ebe0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1ebf0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
1ec00 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
1ec10 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65  rototypes.*/.#de
1ec20 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49  fine sqlite3StrI
1ec30 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69  Cmp sqlite3_stri
1ec40 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  cmp.int sqlite3S
1ec50 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
1ec60 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
1ec70 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
1ec80 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
1ec90 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
1eca0 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
1ecb0 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
1ecc0 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
1ecd0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e  sqlite3Malloc(in
1ece0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1ecf0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29  3MallocZero(int)
1ed00 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1ed10 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
1ed20 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  te3*, int);.void
1ed30 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
1ed40 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69  cRaw(sqlite3*, i
1ed50 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
1ed60 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
1ed70 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
1ed80 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
1ed90 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
1eda0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1edb0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1edc0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
1edd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1ede0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
1edf0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
1ee00 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1ee10 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1ee20 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
1ee30 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1ee40 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
1ee50 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1ee60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
1ee70 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
1ee80 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
1ee90 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
1eea0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
1eeb0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
1eec0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1eed0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
1eee0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1eef0 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
1ef00 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
1ef10 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
1ef20 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
1ef30 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
1ef40 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1ef50 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
1ef60 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
1ef70 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
1ef80 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id));.int sqlite
1ef90 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
1efa0 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
1efb0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
1efc0 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
1efd0 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
1efe0 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
1eff0 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
1f000 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
1f010 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
1f020 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
1f030 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
1f040 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
1f050 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
1f060 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
1f070 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
1f080 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
1f090 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
1f0a0 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
1f0b0 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
1f0c0 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
1f0d0 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
1f0e0 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
1f0f0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
1f100 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
1f110 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
1f120 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
1f130 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
1f140 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
1f150 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
1f160 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
1f170 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f180 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1f190 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64        .#else.# d
1f1a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1f1b0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1f1c0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1f1d0 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
1f1e0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1f1f0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
1f200 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1f210 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
1f220 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1f230 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
1f240 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
1f250 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1f260 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1f270 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
1f280 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1f290 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1f2a0 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
1f2b0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1f2c0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
1f2d0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
1f2e0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
1f2f0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
1f300 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
1f310 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
1f320 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
1f330 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1f340 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1f350 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
1f360 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1f370 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
1f380 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
1f390 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
1f3a0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
1f3b0 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
1f3c0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
1f3d0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
1f3e0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
1f3f0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
1f400 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
1f410 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
1f420 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f430 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69  StatusAdd(int, i
1f440 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f450 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20  3StatusSet(int, 
1f460 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  int);..#ifndef S
1f470 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
1f480 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
1f490 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
1f4a0 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
1f4b0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
1f4c0 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
1f4d0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1f4e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1f4f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
1f500 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
1f510 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
1f520 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
1f530 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
1f540 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
1f550 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
1f560 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
1f570 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
1f580 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
1f590 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
1f5a0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
1f5b0 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
1f5c0 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
1f5d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f5e0 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
1f5f0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
1f600 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
1f610 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
1f620 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
1f630 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
1f640 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
1f650 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
1f660 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
1f670 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
1f680 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
1f690 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
1f6a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
1f6b0 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
1f6c0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
1f6d0 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
1f6e0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
1f6f0 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
1f700 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1f710 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
1f720 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
1f730 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1f740 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1f750 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
1f760 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
1f770 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
1f780 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
1f790 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1f7a0 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
1f7b0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
1f7c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
1f7d0 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
1f7e0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1f7f0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f800 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
1f810 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
1f820 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
1f830 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ar*);.#endif../*
1f840 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69   Output formatti
1f850 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ng for SQLITE_TE
1f860 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a  STCTRL_EXPLAIN *
1f870 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1f880 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45  LITE_ENABLE_TREE
1f890 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64  _EXPLAIN).  void
1f8a0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1f8b0 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76  egin(Vdbe*);.  v
1f8c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1f8d0 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20  inPrintf(Vdbe*, 
1f8e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1f8f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f900 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a  3ExplainNL(Vdbe*
1f910 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f920 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62  3ExplainPush(Vdb
1f930 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1f940 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64  te3ExplainPop(Vd
1f950 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1f960 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
1f970 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1f980 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1f990 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c  elect(Vdbe*, Sel
1f9a0 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
1f9b0 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1f9c0 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Vdbe*, Expr*);.
1f9d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1f9e0 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64  plainExprList(Vd
1f9f0 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  be*, ExprList*);
1fa00 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  .  const char *s
1fa10 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1fa20 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65  ation(Vdbe*);.#e
1fa30 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1fa40 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e  ite3ExplainBegin
1fa50 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1fa60 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63  ite3ExplainSelec
1fa70 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
1fa80 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1fa90 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  pr(A,B).# define
1faa0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1fab0 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64  xprList(A,B).# d
1fac0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1fad0 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20  lainFinish(X).# 
1fae0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
1faf0 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29  beExplanation(X)
1fb00 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64   0.#endif...void
1fb10 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1fb20 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
1fb30 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
1fb40 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
1fb50 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
1fb60 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1fb70 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
1fb80 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
1fb90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
1fba0 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
1fbb0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
1fbc0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1fbd0 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
1fbe0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1fbf0 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
1fc00 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
1fc10 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
1fc20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
1fc30 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
1fc40 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1fc50 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
1fc60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1fc70 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
1fc80 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1fc90 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1fca0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
1fcb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1fcc0 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
1fcd0 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70  che(Parse*);.Exp
1fce0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
1fcf0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
1fd00 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
1fd10 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
1fd20 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
1fd30 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1fd40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1fd50 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
1fd60 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
1fd70 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
1fd80 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
1fd90 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
1fda0 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  r*, Expr*, const
1fdb0 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
1fdc0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
1fdd0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
1fde0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
1fdf0 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
1fe00 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1fe10 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1fe20 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
1fe30 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
1fe40 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
1fe50 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
1fe60 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
1fe70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
1fe80 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
1fe90 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
1fea0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
1feb0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1fec0 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
1fed0 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
1fee0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1fef0 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
1ff00 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
1ff10 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
1ff20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ff30 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
1ff40 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
1ff50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
1ff60 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
1ff70 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
1ff80 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
1ff90 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
1ffa0 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
1ffb0 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
1ffc0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1ffd0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
1ffe0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
1fff0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
20000 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
20010 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
20020 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
20030 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
20040 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
20050 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
20060 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
20070 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
20080 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
20090 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
200a0 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
200b0 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20  qlite3*);.Table 
200c0 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
200d0 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
200e0 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
200f0 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
20100 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
20110 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
20120 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
20130 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
20140 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
20150 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
20160 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
20170 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
20180 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
20190 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
201a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
201b0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
201c0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
201d0 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
201e0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
201f0 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
20200 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
20210 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
20220 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20230 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
20240 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
20250 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
20260 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79  lite3AddColumnTy
20270 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  pe(Parse*,Token*
20280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20290 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
202a0 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
202b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
202c0 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
202d0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
202e0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
202f0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
20300 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
20310 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20320 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
20330 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
20340 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
20370 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
20380 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
20390 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
203a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
203b0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
203c0 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
203d0 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  *);..Bitvec *sql
203e0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
203f0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
20400 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
20410 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
20420 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
20430 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
20440 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
20450 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
20460 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
20470 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
20480 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
20490 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
204a0 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
204b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
204c0 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
204d0 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65  nt,int*);..RowSe
204e0 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
204f0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
20500 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
20510 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20520 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
20530 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
20540 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
20550 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
20560 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
20570 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
20580 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
20590 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
205a0 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
205b0 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
205c0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
205d0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
205e0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
205f0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
20600 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20610 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
20620 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
20630 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
20640 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
20650 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
20660 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
20670 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20680 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
20690 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
206a0 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  0.#endif..void s
206b0 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
206c0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
206d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
206e0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
206f0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
20700 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
20710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
20720 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
20730 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66  3*, Table*);.#if
20740 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20750 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
20760 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
20770 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
20780 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
20790 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
207a0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
207b0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
207c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
207d0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
207e0 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
207f0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
20800 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
20810 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
20820 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
20830 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
20840 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
20850 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20860 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
20870 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
20880 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
20890 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
208a0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
208b0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
208c0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
208d0 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
208e0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
208f0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
20900 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
20910 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
20920 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
20930 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
20940 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
20950 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
20960 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
20970 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
20980 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
20990 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
209a0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
209b0 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
209f0 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
20a00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20a10 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
20a20 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
20a30 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
20a40 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
20a50 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
20a60 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
20a70 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
20a80 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
20a90 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
20aa0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
20ab0 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
20ac0 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
20ad0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
20ae0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
20af0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
20b00 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
20b10 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
20b20 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
20b30 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
20b40 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
20b50 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
20b60 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
20b70 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
20b80 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
20b90 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
20ba0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
20bb0 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
20be0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
20bf0 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
20c00 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
20c10 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
20c20 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
20c30 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
20c40 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
20c50 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
20c60 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
20c70 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
20c80 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
20cb0 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
20cc0 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
20cd0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
20ce0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
20cf0 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
20d00 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
20d10 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
20d20 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
20d30 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
20d40 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
20d50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
20d60 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
20d70 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
20d80 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
20d90 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
20da0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
20db0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
20dc0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
20dd0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
20de0 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
20df0 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
20e00 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
20e10 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
20e20 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
20e30 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
20e40 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
20e50 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
20e60 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
20e70 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
20e80 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
20e90 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
20ea0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
20eb0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
20ec0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
20ed0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
20ee0 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
20ef0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20f00 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
20f10 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
20f20 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
20f30 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
20f40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
20f50 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
20f60 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
20f70 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
20f80 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
20f90 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
20fa0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
20fb0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
20fc0 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
20fd0 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
20fe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
20ff0 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
21000 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
21010 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
21020 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
21030 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
21040 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
21050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21060 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
21070 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
21080 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
21090 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
210a0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
210b0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
210c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
210d0 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
210e0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
210f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21100 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
21110 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
21120 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
21130 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e  hePop(Parse*, in
21140 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21150 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
21160 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
21170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21180 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
21190 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
211a0 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
211b0 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
211c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
211d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
211e0 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
211f0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21200 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
21210 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
21220 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
21230 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
21240 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
21250 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
21260 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
21270 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
21280 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
21290 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
212a0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
212b0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
212c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
212d0 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
212e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
212f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
21300 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
21310 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
21320 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
21330 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
21340 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
21350 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
21360 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
21370 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
21380 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
21390 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
213a0 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69  ant terms */.voi
213b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
213c0 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
213d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
213e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
213f0 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
21400 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
21410 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
21420 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
21430 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
21440 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
21450 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
21460 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
21470 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
21480 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
21490 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
214a0 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
214b0 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
214c0 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
214d0 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
214e0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
214f0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
21500 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
21510 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
21520 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
21530 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
21540 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
21550 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
21560 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
21570 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
21580 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
21590 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
215a0 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
215b0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
215c0 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
215d0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
215e0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
215f0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
21600 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
21610 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
21620 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
21630 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
21640 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
21650 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
21660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
21670 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
21680 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
21690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
216a0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
216b0 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
216c0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
216d0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
216e0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
216f0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
21700 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
21710 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
21720 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
21730 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
21740 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
21750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
21760 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
21770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
21780 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
21790 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
217a0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
217b0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
217c0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
217d0 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
217e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
217f0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
21800 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
21810 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
21820 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
21830 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
21840 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
21850 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
21860 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
21870 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
21880 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
21890 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
218a0 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
218b0 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
218c0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
218d0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
218e0 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
218f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
21900 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
21910 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
21920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
21930 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
21940 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
21950 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
21960 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
21970 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
21980 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
21990 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
219a0 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
219b0 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
219c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
219d0 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
219e0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
219f0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
21a00 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
21a10 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
21a20 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
21a30 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
21a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
21a50 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
21a60 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
21a70 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
21a80 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29  nt,i16,u8,u8,u8)
21a90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
21aa0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
21ab0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
21ac0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
21ad0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
21ae0 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
21af0 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
21b00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
21b10 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
21b20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21b30 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
21b40 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
21b50 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
21b60 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
21b70 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
21b80 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
21b90 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
21bc0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
21bd0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
21be0 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
21bf0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
21c00 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
21c10 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
21c20 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
21c30 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
21c40 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
21c50 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
21c60 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
21c70 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
21c80 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
21c90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21ca0 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
21cb0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21cc0 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
21cd0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
21ce0 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
21cf0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
21d00 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
21d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
21d20 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
21d30 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
21d40 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
21d50 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
21d60 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
21d70 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
21d80 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
21d90 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
21da0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
21db0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
21dc0 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
21dd0 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
21de0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
21df0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
21e00 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
21e10 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
21e20 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
21e30 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
21e40 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
21e50 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
21e60 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21e70 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
21e80 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
21e90 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
21ea0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
21eb0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
21ec0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
21ed0 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
21ee0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
21ef0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
21f00 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
21f10 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
21f20 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
21f30 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
21f40 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
21f50 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
21f60 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
21f70 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
21f80 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
21f90 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
21fa0 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
21fb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
21fc0 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
21fd0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
21fe0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21ff0 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
22000 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22010 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
22020 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
22030 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
22040 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
22050 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
22060 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
22070 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
22080 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
22090 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
220a0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
220b0 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
220c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
220e0 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
220f0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
22100 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
22110 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
22120 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
22130 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
22140 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
22150 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
22160 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
22170 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
22180 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
22190 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
221a0 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
221b0 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
221c0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
221d0 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
221e0 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
221f0 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
22200 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
22210 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
22220 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
22230 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
22240 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
22250 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22270 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
22280 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
22290 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
222a0 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
222b0 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
222c0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
222d0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
222e0 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
222f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
22300 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
22310 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
22320 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
22330 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
22340 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
22350 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
22360 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
22370 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
22380 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
22390 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
223a0 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
223b0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
223c0 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223f0 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b      Select*,u8);
22400 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22410 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
22420 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
22430 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
22440 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
22450 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
22460 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
22470 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
22480 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
22490 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
224a0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
224b0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
224c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
224d0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
224e0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
224f0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
22500 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
22510 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
22520 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
22530 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
22540 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
22550 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
22560 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
22570 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
22580 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
22590 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
225a0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
225b0 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
225c0 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
225d0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
225e0 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
225f0 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
22600 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
22610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
22620 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
22630 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
22640 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
22650 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
22660 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
22670 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
22680 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
22690 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
226a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
226b0 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
226c0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
226d0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
226e0 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
226f0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
22700 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
22710 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
22720 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
22730 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
22740 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
22750 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22760 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
22770 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
22780 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
22790 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
227a0 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
227b0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
227c0 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
227d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
227e0 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
227f0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
22800 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
22810 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
22820 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
22830 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
22840 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
22850 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
22860 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
22870 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
22880 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
22890 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
228a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
228b0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
228c0 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
228d0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
228e0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
228f0 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
22900 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
22910 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
22920 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22930 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
22940 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
22950 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
22960 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
22970 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
22980 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
22990 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
229a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
229b0 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
229c0 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
229d0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
229e0 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
229f0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
22a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22a10 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
22a20 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22a30 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
22a40 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
22a50 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
22a60 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
22a70 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
22a80 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
22a90 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
22aa0 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
22ab0 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
22ac0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
22ad0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
22ae0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
22af0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
22b00 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
22b10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
22b20 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
22b30 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
22b40 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
22b50 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
22b60 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
22b70 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
22b80 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
22b90 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
22ba0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
22bb0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
22bc0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
22bd0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
22be0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
22bf0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
22c00 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
22c10 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
22c20 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
22c30 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
22c40 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
22c50 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
22c60 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
22c70 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
22c80 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
22c90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22ca0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
22cb0 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
22cc0 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
22cd0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
22ce0 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
22cf0 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
22d00 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
22d10 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
22d20 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
22d30 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
22d40 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
22d50 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
22d60 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
22d70 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
22d80 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
22d90 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f  l.c.** file.  Co
22da0 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68  de should use th
22db0 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65  e MACRO forms be
22dc0 6c 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72 69  low, as the Vari
22dd0 6e 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a  nt32 versions.**
22de0 20 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73   are coded to as
22df0 73 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20  sume the single 
22e00 62 79 74 65 20 63 61 73 65 20 69 73 20 61 6c 72  byte case is alr
22e10 65 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68  eady handled (wh
22e20 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52  ich .** the MACR
22e30 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f  O form does)..*/
22e40 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
22e50 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
22e60 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20  har*, u64);.int 
22e70 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
22e80 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  32(unsigned char
22e90 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69  *, u32);.u8 sqli
22ea0 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
22eb0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
22ec0 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
22ed0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
22ee0 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
22ef0 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
22f00 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
22f10 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
22f20 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20  *.** The header 
22f30 6f 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73  of a record cons
22f40 69 73 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e  ists of a sequen
22f50 63 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  ce variable-leng
22f60 74 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  th integers..** 
22f70 54 68 65 73 65 20 69 6e 74 65 67 65 72 73 20 61  These integers a
22f80 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73  re almost always
22f90 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65   small and are e
22fa0 6e 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67  ncoded as a sing
22fb0 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20  le byte..** The 
22fc0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
22fd0 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20   take advantage 
22fe0 74 68 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f  this fact to pro
22ff0 76 69 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f  vide a fast enco
23000 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65  de.** and decode
23010 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 73   of the integers
23020 20 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61   in a record hea
23030 64 65 72 2e 20 20 49 74 20 69 73 20 66 61 73 74  der.  It is fast
23040 65 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f  er for the commo
23050 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20  n.** case where 
23060 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 61  the integer is a
23070 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49   single byte.  I
23080 74 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c  t is a little sl
23090 6f 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a  ower when the.**
230a0 20 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20   integer is two 
230b0 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20  or more bytes.  
230c0 42 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69  But overall it i
230d0 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  s faster..**.** 
230e0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78  The following ex
230f0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71  pressions are eq
23100 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20  uivalent:.**.** 
23110 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47      x = sqlite3G
23120 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26  etVarint32( A, &
23130 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20  B );.**     x = 
23140 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
23150 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a  32( A, B );.**.*
23160 2a 20 20 20 20 20 78 20 3d 20 67 65 74 56 61 72  *     x = getVar
23170 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a  int32( A, B );.*
23180 2a 20 20 20 20 20 78 20 3d 20 70 75 74 56 61 72  *     x = putVar
23190 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a  int32( A, B );.*
231a0 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  *.*/.#define get
231b0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
231c0 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
231d0 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
231e0 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
231f0 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
23200 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
23210 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
23220 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
23230 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
23240 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
23250 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
23260 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
23270 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 42  tVarint32((A),(B
23280 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
23290 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
232a0 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
232b0 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
232c0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
232d0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
232e0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
232f0 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e  tyStr(Vdbe *, In
23300 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dex *);.void sql
23310 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
23320 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
23330 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
23340 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
23350 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
23360 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
23370 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
23380 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
23390 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
233a0 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
233b0 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
233c0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
233d0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
233e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
233f0 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  4*, int, u8);.vo
23400 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
23410 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
23420 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
23430 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
23440 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
23450 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
23460 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
23470 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
23480 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
23490 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
234a0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
234b0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
234c0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
234d0 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73  LITE_TEST) .cons
234e0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
234f0 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
23500 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
23510 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
23520 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23530 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
23540 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
23550 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
23560 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
23570 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
23580 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
23590 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
235a0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
235b0 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
235c0 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
235d0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
235e0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
235f0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
23600 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
23610 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
23620 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
23630 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
23640 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
23650 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
23660 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
23670 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
23680 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
23690 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
236a0 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
236b0 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
236c0 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
236d0 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
236e0 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
236f0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
23700 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
23710 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
23720 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
23730 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
23740 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
23750 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
23760 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
23770 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
23780 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
23790 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
237a0 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
237b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
237c0 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
237d0 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
237e0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
237f0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
23800 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23810 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
23820 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
23830 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
23840 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b  st char *z,int);
23850 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
23860 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
23870 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
23880 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
23890 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
238a0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
238b0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
238c0 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
238d0 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
238e0 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
23910 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
23920 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
23930 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
23940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
23950 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
23960 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
23970 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
23980 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
23990 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
239a0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
239b0 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
239c0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
239d0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
239e0 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
239f0 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
23a00 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
23a10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
23a20 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
23a30 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
23a40 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
23a50 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
23a60 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
23a70 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
23a80 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
23a90 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
23aa0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
23ab0 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
23ac0 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
23ad0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
23ae0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
23af0 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
23b00 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
23b10 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
23b20 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
23b30 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
23b40 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
23b50 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53  Config;.extern S
23b60 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65  QLITE_WSD FuncDe
23b70 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f  fHash sqlite3Glo
23b80 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  balFunctions;.#i
23b90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23ba0 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
23bb0 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
23bc0 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
23bd0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
23be0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
23bf0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
23c00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23c10 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
23c20 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
23c30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23c40 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
23c50 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
23c60 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
23c70 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
23c80 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
23c90 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
23ca0 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
23cb0 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
23cc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
23cd0 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
23ce0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
23cf0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
23d00 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
23d10 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
23d20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
23d30 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
23d40 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  se *, Expr *, in
23d50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23d60 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
23d70 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
23d80 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
23d90 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
23da0 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
23db0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
23dc0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
23dd0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
23de0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
23df0 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
23e00 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
23e10 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
23e20 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
23e30 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
23e40 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
23e50 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
23e60 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
23e70 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
23e80 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
23e90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
23ea0 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
23eb0 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
23ec0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
23ed0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23ee0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
23ef0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
23f00 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
23f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
23f20 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
23f30 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
23f40 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
23f50 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
23f60 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
23f70 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
23f80 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
23f90 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
23fa0 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
23fb0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
23fc0 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
23fd0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
23fe0 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
23ff0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
24000 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
24010 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
24020 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
24030 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
24040 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
24050 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
24060 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
24070 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
24080 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
24090 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
240a0 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
240b0 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
240c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
240d0 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
240e0 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
240f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
24100 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
24110 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
24120 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
24130 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
24140 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24150 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
24160 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
24170 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
24180 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
24190 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
241a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
241b0 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
241c0 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
241d0 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
241e0 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
241f0 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
24200 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
24210 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
24220 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
24230 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
24240 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
24250 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
24260 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
24270 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
24280 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
24290 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
242a0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
242b0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
242c0 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
242d0 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
242e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
242f0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
24300 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
24310 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
24320 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
24330 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
24340 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
24350 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
24360 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
24370 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
24380 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
24390 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
243a0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
243b0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
243c0 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
243d0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
243e0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
243f0 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
24400 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
24410 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
24420 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24430 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
24440 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
24450 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
24460 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
24470 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
24480 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24490 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
244a0 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
244b0 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
244c0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
244d0 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
244e0 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
244f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
24500 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75  endSpace(StrAccu
24510 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  m*,int);.char *s
24520 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
24530 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
24540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
24550 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
24560 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
24570 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
24580 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
24590 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
245a0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
245b0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
245c0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
245d0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
245e0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
245f0 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
24600 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24610 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
24620 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
24630 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
24640 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
24650 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
24660 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
24670 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
24680 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
24690 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
246a0 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
246b0 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
246c0 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
246d0 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
246e0 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
246f0 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
24700 52 65 63 6f 72 64 2a 29 3b 0a 23 65 6e 64 69 66  Record*);.#endif
24710 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
24720 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
24730 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
24740 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
24750 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
24760 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29  void*(*)(size_t)
24770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
24780 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
24790 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
247a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
247b0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
247c0 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
247d0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
247e0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
247f0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
24800 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
24810 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
24820 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
24830 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
24840 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
24850 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
24860 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
24870 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
24880 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
24890 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
248a0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
248b0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
248c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
248d0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
248e0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
248f0 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
24900 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
24910 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
24920 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
24930 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
24940 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
24950 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
24960 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
24970 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
24980 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
24990 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
249a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
249b0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
249c0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
249d0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
249e0 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
249f0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
24a00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
24a10 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
24a20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
24a30 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
24a40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
24a50 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
24a60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24a70 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
24a80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
24a90 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
24aa0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
24ab0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
24ac0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24ad0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
24ae0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
24af0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
24b00 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
24b10 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
24b20 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
24b30 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
24b40 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
24b50 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
24b60 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
24b70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
24b80 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
24b90 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
24ba0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
24bb0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
24bc0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
24bd0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
24be0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
24bf0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
24c00 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
24c10 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
24c20 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
24c30 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
24c40 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
24c50 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
24c60 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
24c70 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
24c80 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
24c90 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
24ca0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
24cb0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
24cc0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
24cd0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
24ce0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
24cf0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
24d00 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
24d10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24d20 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
24d30 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
24d40 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
24d50 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
24d60 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
24d70 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
24d80 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
24d90 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
24da0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
24db0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
24dc0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
24dd0 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
24de0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
24df0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
24e00 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
24e10 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
24e20 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
24e30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
24e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
24e50 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
24e60 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
24e70 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
24e80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
24e90 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
24ea0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
24eb0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
24ec0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
24ed0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
24ee0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
24ef0 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
24f00 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
24f10 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
24f20 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
24f30 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
24f40 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
24f50 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
24f60 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
24f70 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
24f80 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
24f90 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
24fa0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
24fb0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
24fc0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
24fd0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
24fe0 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
24ff0 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
25000 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
25010 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
25020 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
25030 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
25040 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
25050 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
25060 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
25070 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
25080 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
25090 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
250a0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
250b0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
250c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
250d0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
250e0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
250f0 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
25100 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
25110 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
25120 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
25130 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
25140 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
25150 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
25160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25170 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
25180 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
25190 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
251a0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
251b0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
251c0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
251d0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
251e0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
251f0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
25200 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
25210 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
25220 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
25230 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
25240 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
25250 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
25260 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
25270 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
25280 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
25290 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
252a0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
252b0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
252c0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
252d0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
252e0 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
252f0 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
25300 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
25310 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
25320 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
25330 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
25340 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
25350 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
25360 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
25370 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
25380 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
25390 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
253a0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
253b0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
253c0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
253d0 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
253e0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
253f0 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
25400 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
25410 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
25420 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
25430 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
25440 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
25450 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
25460 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
25470 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
25480 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
25490 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
254a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
254b0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
254c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
254d0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
254e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
254f0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
25500 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
25510 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
25520 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
25530 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
25540 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
25550 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
25560 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
25570 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
25580 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
25590 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
255a0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
255b0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
255c0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
255d0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
255e0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
255f0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
25600 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
25610 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
25620 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
25630 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
25640 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
25650 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
25660 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
25670 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
25680 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
25690 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
256a0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
256b0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
256c0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
256d0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
256e0 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
256f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
25700 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
25710 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
25720 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
25730 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
25740 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
25750 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
25760 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
25770 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
25780 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
25790 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
257a0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
257b0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
257c0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
257d0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
257e0 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
257f0 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
25800 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
25810 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
25820 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
25830 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
25840 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
25850 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
25860 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
25870 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
25880 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
25890 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
258a0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
258b0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
258c0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
258d0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
258e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
258f0 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
25900 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
25910 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25920 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
25930 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
25940 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
25950 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
25960 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
25970 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
25980 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
25990 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
259a0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
259b0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
259c0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
259d0 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  ..#define IN_IND
259e0 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
259f0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f     1.#define IN_
25a00 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
25a10 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20        2.#define 
25a20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
25a30 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66 69  SC       3.#defi
25a40 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
25a50 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e  X_DESC      4.in
25a60 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
25a70 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
25a80 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69  pr *, int*);..#i
25a90 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25aa0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
25ab0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
25ac0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
25ad0 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
25ae0 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
25af0 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
25b00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
25b10 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
25b20 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
25b30 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
25b40 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
25b50 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
25b60 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
25b70 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
25b80 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
25b90 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
25ba0 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
25bb0 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
25bc0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
25bd0 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
25be0 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
25bf0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
25c00 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
25c10 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
25c20 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
25c30 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
25c40 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
25c50 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
25c60 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
25c70 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
25c80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25c90 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
25ca0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
25cb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25cc0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
25cd0 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
25ce0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
25cf0 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
25d00 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
25d10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
25d20 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
25d30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25d40 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
25d50 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
25d60 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
25d70 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
25d80 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
25d90 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
25da0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
25db0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
25dc0 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
25dd0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
25de0 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
25df0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
25e00 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
25e10 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
25e20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
25e30 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
25e40 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
25e50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
25e60 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
25e70 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
25e80 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
25e90 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
25ea0 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
25eb0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
25ec0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
25ed0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
25ee0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
25ef0 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
25f00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
25f10 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
25f20 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
25f30 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
25f40 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
25f50 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
25f60 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
25f70 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
25f80 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
25f90 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
25fa0 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
25fb0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
25fc0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
25fd0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
25fe0 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
25ff0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
26000 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
26010 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
26020 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
26030 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
26040 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
26050 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
26060 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
26070 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
26080 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
26090 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
260a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
260b0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
260c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
260d0 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
260e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
260f0 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
26100 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
26110 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
26120 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
26130 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
26140 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
26150 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
26160 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
26170 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
26180 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
26190 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
261a0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
261b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
261c0 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
261d0 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
261e0 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
261f0 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
26200 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
26210 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
26220 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
26230 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
26240 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
26250 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
26260 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
26270 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
26280 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
26290 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
262a0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
262b0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
262c0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
262d0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
262e0 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
262f0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
26300 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
26310 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
26320 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
26330 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
26340 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
26350 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
26360 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
26370 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
26380 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
26390 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
263a0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
263b0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
263c0 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
263d0 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
263e0 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
263f0 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
26400 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
26410 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
26420 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
26430 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
26440 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
26450 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
26460 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
26470 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
26480 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
26490 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
264a0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
264b0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
264c0 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
264d0 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
264e0 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
264f0 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
26500 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
26510 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
26520 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
26530 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
26540 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
26550 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
26560 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
26570 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
26580 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
26590 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
265a0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
265b0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
265c0 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
265d0 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
265e0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
265f0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
26600 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
26610 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
26620 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
26630 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
26640 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
26650 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
26660 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
26670 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
26680 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
26690 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
266a0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
266b0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
266c0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
266d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
266e0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
266f0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
26700 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
26710 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
26720 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
26730 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26740 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
26750 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
26760 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26770 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
26780 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
26790 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
267a0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
267b0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
267c0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
267d0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
267e0 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74    0x02  /* Might
267f0 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
26800 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23  side memory */.#
26810 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
26820 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
26830 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
26840 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
26850 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
26860 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
26870 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
26880 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
26890 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20  MEMTYPE_DB      
268a0 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73     0x10  /* Uses
268b0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
268c0 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c  , not sqlite_mal
268d0 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f  loc */..#endif /
268e0 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
268f0 2a 2f 0a                                         */.