/ Hex Artifact Content
Login

Artifact e539938b3504520da5cefe225712452abea6795a:


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 41  .#endif../*.** A
16b0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
16c0: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
16d0: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
16e0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
16f0: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1700: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1710: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1720: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1730: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1740: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1750: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23  ined(_MSC_VER).#
1760: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1770: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c  NOINLINE  __decl
1780: 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23  spec(noinline).#
1790: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53  else.#  define S
17a0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23  QLITE_NOINLINE.#
17b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
17c0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
17d0: 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65  FE macro must be
17e0: 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31   defined as 0, 1
17f0: 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61  , or 2..** 0 mea
1800: 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70  ns mutexes are p
1810: 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
1820: 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61  le and the libra
1830: 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74  ry is never.** t
1840: 68 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65  hreadsafe.  1 me
1850: 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ans the library 
1860: 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68  is serialized wh
1870: 69 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65  ich is the highe
1880: 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74  st.** level of t
1890: 68 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20  hreadsafety.  2 
18a0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
18b0: 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64  y is multithread
18c0: 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  ed - multiple.**
18d0: 20 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65   threads can use
18e0: 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20   SQLite as long 
18f0: 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64  as no two thread
1900: 73 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65  s try to use the
1910: 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73   same.** databas
1920: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20  e connection at 
1930: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a  the same time..*
1940: 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  *.** Older versi
1950: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
1960: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
1970: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
1980: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
1990: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a  hat for legacy..
19a0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
19b0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
19c0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
19d0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
19e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
19f0: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
1a00: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
1a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1a20: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
1a30: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
1a40: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
1a50: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
1a60: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
1a70: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
1a80: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
1a90: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
1aa0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
1ab0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
1ac0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
1ad0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
1ae0: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
1af0: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
1b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
1b10: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1b20: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
1b30: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   The SQLITE_DEFA
1b40: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61  ULT_MEMSTATUS ma
1b50: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1b60: 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30 20  ned as either 0 
1b70: 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65  or 1..** It dete
1b80: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
1b90: 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75 72  r not the featur
1ba0: 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a  es related to .*
1bb0: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
1bc0: 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61 76  MEMSTATUS are av
1bd0: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1be0: 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20  lt or not. This 
1bf0: 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20  value can.** be 
1c00: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72 75  overridden at ru
1c10: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
1c20: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
1c30: 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65   API..*/.#if !de
1c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
1c50: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
1c60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1c70: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1c80: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
1c90: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
1ca0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1cb0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
1cc0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
1cd0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
1ce0: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
1cf0: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
1d00: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
1d10: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1d20: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
1d30: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
1d40: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
1d50: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
1d60: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1d70: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
1d80: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
1d90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
1da0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
1db0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
1dc0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
1dd0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
1de0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
1df0: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
1e00: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
1e10: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
1e20: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
1e30: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
1e40: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
1e50: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
1e60: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
1e70: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
1e80: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
1e90: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
1ea0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
1eb0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
1ec0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
1ed0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
1ee0: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
1ef0: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
1f00: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
1f10: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
1f20: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
1f30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
1f40: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
1f50: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
1f60: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
1f70: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
1f80: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
1f90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1fa0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1fb0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1fc0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1fd0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1fe0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1ff0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2000: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2010: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2020: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2030: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2040: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2050: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2060: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2070: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
2080: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
2090: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
20a0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
20b0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
20c0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
20d0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
20e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20f0: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2100: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2110: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2120: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2130: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2140: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2150: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2160: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
2180: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
2190: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
21a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
21b0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
21c0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
21d0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
21e0: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
21f0: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2200: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2210: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2220: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2230: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2240: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2250: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2260: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2270: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
2280: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
2290: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
22a0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
22b0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
22c0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
22d0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
22e0: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
22f0: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2300: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2310: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2320: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2330: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2340: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2350: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2360: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2370: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
2380: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
2390: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
23a0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
23b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
23c0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
23d0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
23e0: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
23f0: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2400: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2410: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2420: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2430: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2440: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2450: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2460: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2470: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
2480: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
2490: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
24a0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
24b0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
24c0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
24d0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
24e0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
24f0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2500: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2510: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2520: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2530: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2540: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2550: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2560: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2570: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
2580: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
2590: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
25a0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
25b0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
25c0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25d0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
25e0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
25f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2600: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2610: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2620: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2640: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2650: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2660: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2670: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2680: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2690: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
26a0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
26b0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
26c0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
26d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
26e0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
26f0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2700: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2710: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2720: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2730: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2740: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2750: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2760: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2770: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2780: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2790: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
27a0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
27b0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
27c0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
27d0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
27e0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
27f0: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2800: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2810: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2820: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2830: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2840: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2850: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2860: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2870: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2880: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2890: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
28a0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
28b0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
28c0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
28d0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
28e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
28f0: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2900: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2910: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2920: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2930: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2940: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2950: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2960: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2970: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2980: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2990: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
29a0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
29b0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
29c0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
29d0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
29e0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
29f0: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2a00: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2a10: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2a20: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2a30: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2a40: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2a50: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2a60: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2a70: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2a80: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2a90: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2aa0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ab0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ac0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ad0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2ae0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2af0: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2b00: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2b10: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2b20: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b30: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2b40: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2b50: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2b60: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2b70: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2b80: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2b90: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2ba0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2bb0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2bc0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2bd0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
2be0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
2bf0: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
2c00: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
2c10: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
2c20: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
2c30: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
2c40: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
2c50: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
2c60: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
2c70: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
2c80: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
2c90: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
2ca0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
2cb0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
2cc0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
2cd0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
2ce0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
2cf0: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
2d00: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
2d10: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
2d20: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
2d30: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
2d40: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2d50: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2d60: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2d70: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
2d80: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
2d90: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
2da0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
2db0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
2dc0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
2dd0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
2de0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
2df0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
2e00: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
2e10: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
2e20: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
2e30: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
2e40: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
2e50: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
2e60: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
2e70: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
2e80: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
2e90: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
2ea0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
2eb0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
2ec0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
2ed0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
2ee0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
2ef0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
2f00: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
2f10: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
2f20: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
2f30: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
2f40: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
2f50: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
2f60: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
2f70: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
2f80: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
2f90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
2fa0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
2fb0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
2fc0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
2fd0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
2fe0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
2ff0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3000: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3010: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3020: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3030: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3040: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3050: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3060: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3070: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3080: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3090: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
30a0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
30b0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
30c0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
30d0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
30e0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
30f0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3100: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3110: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3120: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3130: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
3140: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
3150: 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65   input is a inte
3160: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
3170: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
3180: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
3190: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
31a0: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
31b0: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
31c0: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
31d0: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
31e0: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
31f0: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
3200: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
3210: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
3220: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
3230: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
3240: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
3250: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
3260: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
3270: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
3280: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
3290: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
32a0: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
32b0: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
32c0: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
32d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
32e0: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
32f0: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
3300: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
3310: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
3320: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
3330: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
3340: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
3350: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
3360: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
3370: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
3380: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
3390: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
33a0: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
33b0: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
33c0: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
33d0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
33e0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
33f0: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
3400: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
3410: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
3420: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
3430: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
3440: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
3450: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
3460: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
3470: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
3480: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
3490: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
34a0: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
34b0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
34c0: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
34d0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
34e0: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
34f0: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
3500: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3510: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
3520: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
3530: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3540: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
3550: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
3560: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
3570: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
3580: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
3590: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
35a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
35b0: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
35c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
35d0: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
35e0: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
35f0: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
3600: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3610: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
3620: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3630: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
3640: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
3650: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
3660: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
3670: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
3680: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
3690: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
36a0: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
36b0: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
36c0: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
36d0: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
36e0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
36f0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
3700: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
3710: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3720: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
3730: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3740: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
3750: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
3760: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3770: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
3780: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
3790: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
37a0: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
37b0: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
37c0: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
37d0: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
37e0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
37f0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
3800: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
3810: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
3820: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
3830: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
3840: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
3850: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
3860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
3870: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
3880: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
3890: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38a0: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
38b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
38c0: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
38d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
38e0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
38f0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
3900: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
3910: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
3920: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
3930: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
3940: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
3950: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
3960: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
3970: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
3980: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
3990: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
39a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
39b0: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
39c0: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
39d0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
39e0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
39f0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
3a00: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
3a10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3a20: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
3a30: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3a40: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
3a50: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3a60: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
3a70: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
3a80: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3a90: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
3aa0: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
3ab0: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
3ac0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
3ad0: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
3ae0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
3af0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
3b00: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
3b10: 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f  ), set it .** to
3b20: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
3b30: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
3b40: 3d 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  =3.# undef SQLIT
3b50: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3b60: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
3b70: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3b80: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
3b90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3ba0: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3bb0: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
3bc0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
3bd0: 52 45 41 44 53 20 34 0a 23 65 6e 64 69 66 0a 23  READS 4.#endif.#
3be0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
3bf0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
3c00: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
3c10: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
3c20: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
3c30: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
3c40: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3c50: 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41  HREADS>SQLITE_MA
3c60: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3c70: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
3c80: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3c90: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
3ca0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
3cb0: 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46  READS SQLITE_DEF
3cc0: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
3cd0: 41 44 53 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ADS.#endif.../*.
3ce0: 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20  ** GCC does not 
3cf0: 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65  define the offse
3d00: 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77  tof() macro so w
3d10: 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20  e'll have to do 
3d20: 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e  it.** ourselves.
3d30: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73  .*/.#ifndef offs
3d40: 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66  etof.#define off
3d50: 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c  setof(STRUCTURE,
3d60: 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63  FIELD) ((int)((c
3d70: 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52  har*)&((STRUCTUR
3d80: 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23  E*)0)->FIELD)).#
3d90: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
3da0: 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d  ros to compute m
3db0: 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d  inimum and maxim
3dc0: 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72  um of two number
3dd0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49  s..*/.#define MI
3de0: 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f  N(A,B) ((A)<(B)?
3df0: 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65  (A):(B)).#define
3e00: 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28   MAX(A,B) ((A)>(
3e10: 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a  B)?(A):(B))../*.
3e20: 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  ** Check to see 
3e30: 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20  if this machine 
3e40: 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59  uses EBCDIC.  (Y
3e50: 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f  es, believe it o
3e60: 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20  r.** not, there 
3e70: 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e  are still machin
3e80: 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61  es out there tha
3e90: 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a  t use EBCDIC.).*
3ea0: 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33  /.#if 'A' == '\3
3eb0: 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  01'.# define SQL
3ec0: 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c  ITE_EBCDIC 1.#el
3ed0: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
3ee0: 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69  TE_ASCII 1.#endi
3ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72  f../*.** Integer
3f00: 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73  s of known sizes
3f10: 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66  .  These typedef
3f20: 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  s might change f
3f30: 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73  or architectures
3f40: 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69  .** where the si
3f50: 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72  zes very.  Prepr
3f60: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61  ocessor macros a
3f70: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20  re available so 
3f80: 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65  that the.** type
3f90: 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69  s can be conveni
3fa0: 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20  ently redefined 
3fb0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e  at compile-type.
3fc0: 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a    Like this:.**.
3fd0: 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d  **         cc '-
3fe0: 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f  DUINTPTR_TYPE=lo
3ff0: 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e  ng long int' ...
4000: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  .*/.#ifndef UINT
4010: 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  32_TYPE.# ifdef 
4020: 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20  HAVE_UINT32_T.# 
4030: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
4040: 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65  YPE uint32_t.# e
4050: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
4060: 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT32_TYPE unsign
4070: 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  ed int.# endif.#
4080: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
4090: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
40a0: 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a  f HAVE_UINT16_T.
40b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
40c0: 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23  _TYPE uint16_t.#
40d0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
40e0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69  UINT16_TYPE unsi
40f0: 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23  gned short int.#
4100: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4110: 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  fndef INT16_TYPE
4120: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
4130: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
4140: 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36  INT16_TYPE int16
4150: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4160: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73  ine INT16_TYPE s
4170: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
4180: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4190: 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64  UINT8_TYPE.# ifd
41a0: 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a  ef HAVE_UINT8_T.
41b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
41c0: 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65  TYPE uint8_t.# e
41d0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
41e0: 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  NT8_TYPE unsigne
41f0: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
4200: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
4210: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
4220: 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64  HAVE_INT8_T.#  d
4230: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
4240: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
4250: 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50   define INT8_TYP
4260: 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  E signed char.# 
4270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
4280: 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  ndef LONGDOUBLE_
4290: 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f  TYPE.# define LO
42a0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f  NGDOUBLE_TYPE lo
42b0: 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66  ng double.#endif
42c0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
42d0: 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20  int64 i64;      
42e0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69      /* 8-byte si
42f0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4300: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75  typedef sqlite_u
4310: 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20  int64 u64;      
4320: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73     /* 8-byte uns
4330: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4340: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f  .typedef UINT32_
4350: 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20  TYPE u32;       
4360: 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e      /* 4-byte un
4370: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4380: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36  /.typedef UINT16
4390: 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20  _TYPE u16;      
43a0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75       /* 2-byte u
43b0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
43c0: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
43d0: 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20  _TYPE i16;      
43e0: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
43f0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4400: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f  /.typedef UINT8_
4410: 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20  TYPE u8;        
4420: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75       /* 1-byte u
4430: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4440: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f  */.typedef INT8_
4450: 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20  TYPE i8;        
4460: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
4470: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4480: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  /../*.** SQLITE_
4490: 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34  MAX_U32 is a u64
44a0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69   constant that i
44b0: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36  s the maximum u6
44c0: 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20  4 value.** that 
44d0: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
44e0: 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c   a u32 without l
44f0: 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68  oss of data.  Th
4500: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78  e value.** is 0x
4510: 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66  00000000ffffffff
4520: 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f  .  But because o
4530: 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65  f quirks of some
4540: 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a   compilers, we.*
4550: 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66  * have to specif
4560: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  y the value in t
4570: 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76  he less intuitiv
4580: 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a  e manner shown:.
4590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
45a0: 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75  E_MAX_U32  ((((u
45b0: 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f  64)1)<<32)-1)../
45c0: 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
45d0: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
45e0: 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65  estimates of the
45f0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
4600: 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72  in a.** table or
4610: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73   index.  This is
4620: 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74   an unsigned int
4630: 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20  eger type.  For 
4640: 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20  99.9% of.** the 
4650: 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20  world, a 32-bit 
4660: 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69  integer is suffi
4670: 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34  cient.  But a 64
4680: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
4690: 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63  can be used at c
46a0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64  ompile-time if d
46b0: 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  esired..*/.#ifde
46c0: 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53  f SQLITE_64BIT_S
46d0: 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36  TATS. typedef u6
46e0: 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a  4 tRowcnt;    /*
46f0: 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20   64-bit only if 
4700: 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d  requested at com
4710: 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c  pile-time */.#el
4720: 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20  se. typedef u32 
4730: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33  tRowcnt;    /* 3
4740: 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66  2-bit is the def
4750: 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ault */.#endif..
4760: 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20  /*.** Estimated 
4770: 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20  quantities used 
4780: 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69  for query planni
4790: 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73  ng are stored as
47a0: 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72   16-bit.** logar
47b0: 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e  ithms.  For quan
47c0: 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75  tity X, the valu
47d0: 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c  e stored is 10*l
47e0: 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a  og2(X).  This.**
47f0: 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c   gives a possibl
4800: 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65  e range of value
4810: 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65  s of approximate
4820: 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65  ly 1.0e986 to 1e
4830: 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65  -986..** But the
4840: 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   allowed values 
4850: 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e  are "grainy".  N
4860: 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69  ot every value i
4870: 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e  s representable.
4880: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  .** For example,
4890: 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61   quantities 16 a
48a0: 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72  nd 17 are both r
48b0: 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20  epresented by a 
48c0: 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e  LogEst.** of 40.
48d0: 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65    However, since
48e0: 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74 69   LogEst quantati
48f0: 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74  es are suppose t
4900: 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a  o be estimates,.
4910: 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c  ** not exact val
4920: 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63  ues, this imprec
4930: 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70  ision is not a p
4940: 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c  roblem..**.** "L
4950: 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20  ogEst" is short 
4960: 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63  for "Logarithmic
4970: 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a   Estimate"..**.*
4980: 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20  * Examples:.**  
4990: 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20      1 -> 0      
49a0: 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33          20 -> 43
49b0: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20            10000 
49c0: 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32  -> 132.**      2
49d0: 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20   -> 10          
49e0: 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20     25 -> 46     
49f0: 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34       25000 -> 14
4a00: 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31  6.**      3 -> 1
4a10: 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30  6            100
4a20: 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30   -> 66        10
4a30: 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20  00000 -> 199.** 
4a40: 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20       4 -> 20    
4a50: 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39         1000 -> 9
4a60: 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36  9        1048576
4a70: 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31   -> 200.**     1
4a80: 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20  0 -> 33         
4a90: 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20    1024 -> 100   
4aa0: 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33   4294967296 -> 3
4ab0: 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67  20.**.** The Log
4ac0: 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74  Est can be negat
4ad0: 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20  ive to indicate 
4ae0: 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65  fractional value
4af0: 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  s. .** Examples:
4b00: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e  .**.**    0.5 ->
4b10: 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30   -10           0
4b20: 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20  .1 -> -33       
4b30: 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a   0.0625 -> -40.*
4b40: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
4b50: 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a  TYPE LogEst;../*
4b60: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
4b70: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
4b80: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
4b90: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
4ba0: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
4bb0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
4bc0: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
4bd0: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
4be0: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
4bf0: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
4c00: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
4c10: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
4c20: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
4c30: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
4c40: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
4c50: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
4c60: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
4c70: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
4c80: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
4c90: 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68 65  ER=1 is set, the
4ca0: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
4cb0: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
4cc0: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
4cd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
4ce0: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
4cf0: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
4d00: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
4d10: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
4d20: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
4d30: 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29 20   (defined(i386) 
4d40: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
4d50: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
4d60: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
4d70: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
4d80: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
4d90: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
4da0: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
4db0: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
4dc0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
4dd0: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
4de0: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
4df0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
4e00: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
4e10: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
4e20: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
4e30: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
4e40: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
4e50: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
4e60: 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66 69  R    1234.# defi
4e70: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
4e80: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
4e90: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
4ea0: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
4eb0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
4ec0: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
4ed0: 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28  6LE.#endif.#if (
4ee0: 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20 20  defined(sparc)  
4ef0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70    || defined(__p
4f00: 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26  pc__))  \.    &&
4f10: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
4f20: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
4f30: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
4f40: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
4f50: 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53   4321.# define S
4f60: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
4f70: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
4f80: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
4f90: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
4fa0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
4fb0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
4fc0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
4fd0: 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f  ned(SQLITE_BYTEO
4fe0: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
4ff0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5000: 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65     0     /* 0 me
5010: 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20  ans "unknown at 
5020: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f  compile-time" */
5030: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5040: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
5050: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
5060: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
5070: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5080: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
5090: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
50a0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
50b0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
50c0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
50d0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
50e0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
50f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
5100: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
5110: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
5120: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
5130: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
5140: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
5150: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
5160: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
5170: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
5180: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
5190: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
51a0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
51b0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
51c0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
51d0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
51e0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
51f0: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
5200: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
5210: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
5220: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
5230: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
5240: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
5250: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
5260: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
5270: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
5280: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
5290: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
52a0: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
52b0: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
52c0: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
52d0: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
52e0: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
52f0: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
5300: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
5310: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
5320: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
5330: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
5340: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
5350: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5360: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
5370: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
5380: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
5390: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
53a0: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
53b0: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
53c0: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
53d0: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
53e0: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
53f0: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
5400: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
5410: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e  c() implemention
5420: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
5430: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
5440: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
5450: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
5460: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
5470: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
5480: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
5490: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
54a0: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
54b0: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
54c0: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
54d0: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
54e0: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
54f0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
5500: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
5510: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
5520: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
5530: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
5540: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
5550: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
5560: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
5570: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
5580: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
5590: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
55a0: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
55b0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
55c0: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
55d0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
55e0: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
55f0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
5600: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
5610: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
5620: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
5630: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
5640: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
5650: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
5660: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66  itionals.h>.# if
5670: 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e   TARGET_OS_IPHON
5680: 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49  E.#   undef SQLI
5690: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
56a0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
56b0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
56c0: 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69   0.# endif.#endi
56d0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
56e0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
56f0: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
5700: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
5710: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
5720: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
5730: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
5740: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
5750: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
5760: 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20  sun).#   define 
5770: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5780: 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20  SIZE 0x7fff0000 
5790: 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a   /* 2147418112 *
57a0: 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  /.# else.#   def
57b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
57c0: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64  MAP_SIZE 0.# end
57d0: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
57e0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
57f0: 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65  _xc 1 /* exclude
5800: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
5810: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
5820: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
5830: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
5840: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
5850: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
5860: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
5870: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
5880: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
5890: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
58a0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
58b0: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
58c0: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
58d0: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
58e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
58f0: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5900: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5910: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65  MMAP_SIZE 0.# de
5920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
5930: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  ULT_MMAP_SIZE_xc
5940: 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66   1  /* Exclude f
5950: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
5960: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5970: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
5980: 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE>SQLITE_MAX_MM
5990: 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20  AP_SIZE.# undef 
59a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
59b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
59c0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
59d0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54  _MMAP_SIZE SQLIT
59e0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
59f0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  #endif../*.** On
5a00: 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  ly one of SQLITE
5a10: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72  _ENABLE_STAT3 or
5a20: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5a30: 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69  TAT4 can be defi
5a40: 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79  ned..** Priority
5a50: 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c   is given to SQL
5a60: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
5a70: 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65  .  If either are
5a80: 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a   defined, also.*
5a90: 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  * define SQLITE_
5aa0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
5ab0: 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20  STAT4.*/.#ifdef 
5ac0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5ad0: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
5ae0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
5af0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5b00: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
5b10: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
5b20: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5b30: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
5b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5b50: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
5b60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5b70: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75  AT3_OR_STAT4.# u
5b80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
5b90: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5ba0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
5bb0: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
5bc0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
5bd0: 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
5be0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79  o store the busy
5bf0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
5c00: 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e  back for a given
5c10: 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20   sqlite handle. 
5c20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  .**.** The sqlit
5c30: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65  e.busyHandler me
5c40: 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69  mber of the sqli
5c50: 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69  te struct contai
5c60: 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63  ns the busy.** c
5c70: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20  allback for the 
5c80: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
5c90: 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e   Each pager open
5ca0: 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74  ed via the sqlit
5cb0: 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70  e.** handle is p
5cc0: 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20  assed a pointer 
5cd0: 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  to sqlite.busyHa
5ce0: 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d  ndler. The busy-
5cf0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
5d00: 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ack is currently
5d10: 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72   invoked only fr
5d20: 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e  om within pager.
5d30: 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  c..*/.typedef st
5d40: 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72  ruct BusyHandler
5d50: 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74   BusyHandler;.st
5d60: 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72  ruct BusyHandler
5d70: 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63   {.  int (*xFunc
5d80: 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20  )(void *,int);  
5d90: 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c  /* The busy call
5da0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
5db0: 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  pArg;           
5dc0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
5dd0: 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61  g to busy callba
5de0: 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73  ck */.  int nBus
5df0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
5e00: 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65     /* Incremente
5e10: 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79  d with each busy
5e20: 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   call */.};../*.
5e30: 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d  ** Name of the m
5e40: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
5e50: 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65  able.  The maste
5e60: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
5e70: 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c  .** is a special
5e80: 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64   table that hold
5e90: 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20  s the names and 
5ea0: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c  attributes of al
5eb0: 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73  l.** user tables
5ec0: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f   and indices..*/
5ed0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
5ee0: 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69  NAME       "sqli
5ef0: 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69  te_master".#defi
5f00: 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  ne TEMP_MASTER_N
5f10: 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d  AME  "sqlite_tem
5f20: 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a  p_master"../*.**
5f30: 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   The root-page o
5f40: 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74  f the master dat
5f50: 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a  abase table..*/.
5f60: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52  #define MASTER_R
5f70: 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OOT       1../*.
5f80: 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  ** The name of t
5f90: 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e  he schema table.
5fa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
5fb0: 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21  MA_TABLE(x)  ((!
5fc0: 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78  OMIT_TEMPDB)&&(x
5fd0: 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52  ==1)?TEMP_MASTER
5fe0: 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d  _NAME:MASTER_NAM
5ff0: 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76  E)../*.** A conv
6000: 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68  enience macro th
6010: 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  at returns the n
6020: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
6030: 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79  s in.** an array
6040: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72  ..*/.#define Arr
6050: 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69  aySize(X)    ((i
6060: 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69  nt)(sizeof(X)/si
6070: 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a  zeof(X[0])))../*
6080: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66  .** Determine if
6090: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
60a0: 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a   a power of two.
60b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77  */.#define IsPow
60c0: 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29  erOfTwo(X) (((X)
60d0: 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f  &((X)-1))==0)../
60e0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
60f0: 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65  ng value as a de
6100: 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74  structor means t
6110: 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46  o use sqlite3DbF
6120: 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71  ree()..** The sq
6130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72 6f  lite3DbFree() ro
6140: 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20 74  utine requires t
6150: 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e  wo parameters in
6160: 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a 2a  stead of the .**
6170: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
6180: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
6190: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
61a0: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
61b0: 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69 73  troduce .** this
61c0: 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61   magic value tha
61d0: 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73  t the code knows
61e0: 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65   to handle diffe
61f0: 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a  rently.  Any .**
6200: 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f   pointer will wo
6210: 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20  rk here as long 
6220: 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63  as it is distinc
6230: 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54  t from SQLITE_ST
6240: 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49  ATIC.** and SQLI
6250: 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f  TE_TRANSIENT..*/
6260: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
6270: 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69  DYNAMIC   ((sqli
6280: 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74  te3_destructor_t
6290: 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ype)sqlite3Mallo
62a0: 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68  cSize)../*.** Wh
62b0: 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  en SQLITE_OMIT_W
62c0: 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69  SD is defined, i
62d0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
62e0: 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d   target platform
62f0: 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70   does.** not sup
6300: 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74  port Writable St
6310: 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20  atic Data (WSD) 
6320: 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61  such as global a
6330: 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62  nd static variab
6340: 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69  les..** All vari
6350: 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65  ables must eithe
6360: 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63  r be on the stac
6370: 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79  k or dynamically
6380: 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a   allocated from.
6390: 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68  ** the heap.  Wh
63a0: 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70  en WSD is unsupp
63b0: 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61  orted, the varia
63c0: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
63d0: 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68   scattered.** th
63e0: 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c  roughout the SQL
63f0: 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65  ite code must be
6400: 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69  come constants i
6410: 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c  nstead.  The SQL
6420: 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f  ITE_WSD.** macro
6430: 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69   is used for thi
6440: 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20  s purpose.  And 
6450: 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72  instead of refer
6460: 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61  encing the varia
6470: 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c  ble.** directly,
6480: 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73   we use its cons
6490: 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f  tant as a key to
64a0: 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d   lookup the run-
64b0: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a  time allocated.*
64c0: 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f  * buffer that ho
64d0: 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c  lds real variabl
64e0: 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74  e.  The constant
64f0: 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69   is also the ini
6500: 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20  tializer.** for 
6510: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
6520: 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a  ocated buffer..*
6530: 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61  *.** In the usua
6540: 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44  l case where WSD
6550: 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74   is supported, t
6560: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e  he SQLITE_WSD an
6570: 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72  d GLOBAL.** macr
6580: 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73  os become no-ops
6590: 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70   and have zero p
65a0: 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63  erformance impac
65b0: 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  t..*/.#ifdef SQL
65c0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23  ITE_OMIT_WSD.  #
65d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
65e0: 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e  D const.  #defin
65f0: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a  e GLOBAL(t,v) (*
6600: 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f  (t*)sqlite3_wsd_
6610: 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29  find((void*)&(v)
6620: 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20  , sizeof(v))).  
6630: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
6640: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42  lobalConfig GLOB
6650: 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65  AL(struct Sqlite
6660: 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33  3Config, sqlite3
6670: 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71  Config).  int sq
6680: 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69  lite3_wsd_init(i
6690: 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20  nt N, int J);.  
66a0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73  void *sqlite3_ws
66b0: 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20  d_find(void *K, 
66c0: 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20  int L);.#else.  
66d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
66e0: 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  SD .  #define GL
66f0: 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64  OBAL(t,v) v.  #d
6700: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
6710: 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  balConfig sqlite
6720: 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a  3Config.#endif..
6730: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6740: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
6750: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
6760: 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
6770: 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65  s and to.** make
6780: 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d   it clear to hum
6790: 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20  an readers when 
67a0: 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d  a function param
67b0: 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61  eter is delibera
67c0: 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75 6e  tely .** left un
67d0: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
67e0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
67f0: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
6800: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
6810: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
6820: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
6830: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
6840: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a 2a  r example the .*
6850: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
6860: 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65   of an SQL aggre
6870: 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61  gate step callba
6880: 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74  ck may not use t
6890: 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  he.** parameter 
68a0: 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e  indicating the n
68b0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
68c0: 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  ts passed to the
68d0: 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69   aggregate,.** i
68e0: 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20  f it knows that 
68f0: 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64  this is enforced
6900: 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a   elsewhere..**.*
6910: 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f  * When a functio
6920: 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  n parameter is n
6930: 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77  ot used at all w
6940: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
6950: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a  f a function,.**
6960: 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79   it is generally
6970: 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22   named "NotUsed"
6980: 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74   or "NotUsed2" t
6990: 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76  o make things ev
69a0: 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48  en clearer..** H
69b0: 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61  owever, these ma
69c0: 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65  cros may also be
69d0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
69e0: 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74  s warnings relat
69f0: 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74  ed to.** paramet
6a00: 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20  ers that may or 
6a10: 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20  may not be used 
6a20: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d  depending on com
6a30: 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  pilation options
6a40: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
6a50: 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72   those parameter
6a60: 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61  s only used in a
6a70: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
6a80: 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20  ts. In these.** 
6a90: 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65  cases the parame
6aa0: 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61  ters are named a
6ab0: 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20  s per the usual 
6ac0: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a  conventions..*/.
6ad0: 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50  #define UNUSED_P
6ae0: 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69  ARAMETER(x) (voi
6af0: 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e  d)(x).#define UN
6b00: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28  USED_PARAMETER2(
6b10: 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41  x,y) UNUSED_PARA
6b20: 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f  METER(x),UNUSED_
6b30: 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a  PARAMETER(y)../*
6b40: 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65  .** Forward refe
6b50: 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74  rences to struct
6b60: 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ures.*/.typedef 
6b70: 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41  struct AggInfo A
6b80: 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  ggInfo;.typedef 
6b90: 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
6ba0: 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a  xt AuthContext;.
6bb0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
6bc0: 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69  utoincInfo Autoi
6bd0: 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  ncInfo;.typedef 
6be0: 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69  struct Bitvec Bi
6bf0: 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74  tvec;.typedef st
6c00: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c  ruct CollSeq Col
6c10: 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74  lSeq;.typedef st
6c20: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75  ruct Column Colu
6c30: 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  mn;.typedef stru
6c40: 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65  ct Db Db;.typede
6c50: 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  f struct Schema 
6c60: 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20  Schema;.typedef 
6c70: 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72  struct Expr Expr
6c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6c90: 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69   ExprList ExprLi
6ca0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
6cb0: 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70 72  ct ExprSpan Expr
6cc0: 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  Span;.typedef st
6cd0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
6ce0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
6cf0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
6d00: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
6d10: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
6d20: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
6d30: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
6d40: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
6d50: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
6d60: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
6d70: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
6d80: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
6d90: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
6da0: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
6db0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
6dc0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
6dd0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
6de0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
6df0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
6e00: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
6e10: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
6e20: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
6e30: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
6e40: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
6e50: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
6e60: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
6e70: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
6e80: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
6e90: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
6ea0: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
6eb0: 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74  def struct Print
6ec0: 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74  fArguments Print
6ed0: 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65  fArguments;.type
6ee0: 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65  def struct RowSe
6ef0: 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65  t RowSet;.typede
6f00: 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  f struct Savepoi
6f10: 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79  nt Savepoint;.ty
6f20: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
6f30: 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65  ect Select;.type
6f40: 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74  def struct SQLit
6f50: 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68  eThread SQLiteTh
6f60: 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74  read;.typedef st
6f70: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
6f80: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
6f90: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
6fa0: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
6fb0: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
6fc0: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
6fd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
6fe0: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
6ff0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
7000: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
7010: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
7020: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
7030: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
7040: 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65   Trigger;.typede
7050: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
7060: 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a  Prg TriggerPrg;.
7070: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7080: 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67  riggerStep Trigg
7090: 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20  erStep;.typedef 
70a0: 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
70b0: 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65  ecord UnpackedRe
70c0: 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74  cord;.typedef st
70d0: 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62  ruct VTable VTab
70e0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
70f0: 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43  ct VtabCtx VtabC
7100: 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  tx;.typedef stru
7110: 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72  ct Walker Walker
7120: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7130: 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65   WhereInfo Where
7140: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
7150: 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a  ruct With With;.
7160: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
7170: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
7180: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
7190: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
71a0: 64 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c  d .** "BusyHandl
71b0: 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64  er" typedefs. vd
71c0: 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72  be.h also requir
71d0: 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20  es a few of the 
71e0: 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65  opaque.** pointe
71f0: 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75  r types (i.e. Fu
7200: 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61  ncDef) defined a
7210: 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  bove..*/.#includ
7220: 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63  e "btree.h".#inc
7230: 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69  lude "vdbe.h".#i
7240: 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22  nclude "pager.h"
7250: 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68  .#include "pcach
7260: 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22  e.h"..#include "
7270: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
7280: 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a  mutex.h".../*.**
7290: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66   Each database f
72a0: 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73  ile to be access
72b0: 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
72c0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
72d0: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
72e0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20  ing structure.  
72f0: 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c  There are normal
7300: 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20  ly two of these 
7310: 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e  structures.** in
7320: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b   the sqlite.aDb[
7330: 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d  ] array.  aDb[0]
7340: 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
7350: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a  abase file and.*
7360: 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20  * aDb[1] is the 
7370: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
7380: 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f  ed to hold tempo
7390: 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64  rary tables.  Ad
73a0: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61  ditional.** data
73b0: 62 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74  bases may be att
73c0: 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  ached..*/.struct
73d0: 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e   Db {.  char *zN
73e0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
73f0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74  Name of this dat
7400: 61 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65  abase */.  Btree
7410: 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
7420: 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74  /* The B*Tree st
7430: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73  ructure for this
7440: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
7450: 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65  /.  u8 safety_le
7460: 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20  vel;     /* How 
7470: 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79  aggressive at sy
7480: 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69  ncing data to di
7490: 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  sk */.  Schema *
74a0: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
74b0: 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62  Pointer to datab
74c0: 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73  ase schema (poss
74d0: 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a  ibly shared) */.
74e0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
74f0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
7500: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7510: 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61   stores a databa
7520: 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
7530: 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a   Most Schema obj
7540: 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61  ects are associa
7550: 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65  ted with a Btree
7560: 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  .  The exception
7570: 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d   is.** the Schem
7580: 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64  a for the TEMP d
7590: 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33  atabaes (sqlite3
75a0: 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69  .aDb[1]) which i
75b0: 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e  s free-standing.
75c0: 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61  .** In shared ca
75d0: 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67  che mode, a sing
75e0: 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  le Schema object
75f0: 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62   can be shared b
7600: 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74  y multiple.** Bt
7610: 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20  rees that refer 
7620: 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65  to the same unde
7630: 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20  rlying BtShared 
7640: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53  object..** .** S
7650: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
7660: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
7670: 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e  deallocated when
7680: 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20   the last Btree 
7690: 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63  that.** referenc
76a0: 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72  es them is destr
76b0: 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50  oyed.   The TEMP
76c0: 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61   Schema is manua
76d0: 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20  lly freed by.** 
76e0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e  sqlite3_close().
76f0: 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d  .*.** A thread m
7700: 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61  ust be holding a
7710: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f   mutex on the co
7720: 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65  rresponding Btre
7730: 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f  e in order.** to
7740: 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63   access Schema c
7750: 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d  ontent.  This im
7760: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74  plies that the t
7770: 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20  hread must also 
7780: 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20  be.** holding a 
7790: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c  mutex on the sql
77a0: 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ite3 connection 
77b0: 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e  pointer that own
77c0: 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20  s the Btree..** 
77d0: 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d  For a TEMP Schem
77e0: 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e  a, only the conn
77f0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20  ection mutex is 
7800: 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72  required..*/.str
7810: 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69  uct Schema {.  i
7820: 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  nt schema_cookie
7830: 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  ;   /* Database 
7840: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e  schema version n
7850: 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66  umber for this f
7860: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65  ile */.  int iGe
7870: 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a  neration;     /*
7880: 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   Generation coun
7890: 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65  ter.  Incremente
78a0: 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e  d with each chan
78b0: 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c  ge */.  Hash tbl
78c0: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
78d0: 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78  All tables index
78e0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
78f0: 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20  Hash idxHash;   
7900: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d       /* All (nam
7910: 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65  ed) indices inde
7920: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
7930: 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20   Hash trigHash; 
7940: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69        /* All tri
7950: 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79  ggers indexed by
7960: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7970: 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20  fkeyHash;       
7980: 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  /* All foreign k
7990: 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65  eys by reference
79a0: 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  d table name */.
79b0: 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62    Table *pSeqTab
79c0: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71  ;      /* The sq
79d0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
79e0: 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f  ble used by AUTO
79f0: 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75  INCREMENT */.  u
7a00: 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  8 file_format;  
7a10: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f      /* Schema fo
7a20: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  rmat version for
7a30: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
7a40: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
7a50: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
7a60: 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68  oding used by th
7a70: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
7a80: 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73   u16 schemaFlags
7a90: 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61  ;     /* Flags a
7aa0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
7ab0: 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
7ac0: 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20  int cache_size; 
7ad0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7ae0: 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69  f pages to use i
7af0: 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d  n the cache */.}
7b00: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  ;../*.** These m
7b10: 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
7b20: 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
7b30: 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
7b40: 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68   the .** Db.pSch
7b50: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7b60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48  ..*/.#define DbH
7b70: 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  asProperty(D,I,P
7b80: 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62  )     (((D)->aDb
7b90: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
7ba0: 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28  emaFlags&(P))==(
7bb0: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
7bc0: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
7bd0: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
7be0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
7bf0: 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29  maFlags&(P))!=0)
7c00: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
7c10: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
7c20: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
7c30: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7c40: 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
7c50: 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  DbClearProperty(
7c60: 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44  D,I,P)   (D)->aD
7c70: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
7c80: 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a  hemaFlags&=~(P).
7c90: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
7ca0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
7cb0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
7cc0: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
7cd0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
7ce0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
7cf0: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
7d00: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
7d10: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
7d20: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
7d30: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
7d40: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
7d50: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
7d60: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
7d70: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
7d80: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
7d90: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
7da0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
7db0: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
7dc0: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
7dd0: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
7de0: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
7df0: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
7e00: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
7e10: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
7e20: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
7e30: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
7e40: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
7e50: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
7e60: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
7e70: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
7e80: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
7e90: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
7ea0: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
7eb0: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
7ec0: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
7ed0: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
7ee0: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
7ef0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
7f00: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
7f10: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
7f20: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
7f30: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
7f40: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
7f50: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
7f60: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
7f70: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
7f80: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
7f90: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
7fa0: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
7fb0: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
7fc0: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
7fd0: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
7fe0: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
7ff0: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
8000: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
8010: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
8020: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
8030: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
8040: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
8050: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
8060: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
8070: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
8080: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
8090: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
80a0: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
80b0: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
80c0: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
80d0: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
80e0: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
80f0: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
8100: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
8110: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
8120: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
8130: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
8140: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
8150: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
8160: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
8170: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
8180: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
8190: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
81a0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
81b0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
81c0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
81d0: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
81e0: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
81f0: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
8200: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
8210: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
8220: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
8230: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
8240: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
8250: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
8260: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
8270: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
8280: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
8290: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
82a0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
82b0: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
82c0: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
82d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
82e0: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
82f0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
8300: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
8310: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
8320: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
8330: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
8340: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
8350: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
8360: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
8370: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
8380: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
8390: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
83a0: 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20  16 sz;          
83b0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
83c0: 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e  f each buffer in
83d0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62   bytes */.  u8 b
83e0: 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
83f0: 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20      /* False to 
8400: 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b  disable new look
8410: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
8420: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
8430: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
8440: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
8450: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
8460: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
8470: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8490: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
84a0: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
84b0: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
84c0: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
84d0: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
84e0: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
84f0: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
8500: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
8510: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
8520: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
8530: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
8540: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
8550: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
8560: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
8570: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
8580: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
8590: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
85a0: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
85b0: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
85c0: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
85d0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
85e0: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
85f0: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
8600: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
8610: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
8620: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
8630: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
8640: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
8650: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
8660: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
8670: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
8680: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
8690: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73  tions..**.** Has
86a0: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
86b0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
86c0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
86d0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
86e0: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
86f0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
8700: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
8710: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
8720: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
8730: 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a  *a[23];       /*
8740: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
8750: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
8760: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
8770: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
8780: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
8790: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
87a0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
87b0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
87c0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
87d0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
87e0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
87f0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
8800: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
8810: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8820: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
8830: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
8840: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
8850: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
8860: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
8870: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
8880: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
8890: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
88a0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
88b0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
88c0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
88e0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
88f0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
8920: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
8930: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
8940: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
8950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
8960: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
8970: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
8980: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
89a0: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
89b0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
89c0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
89d0: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
89f0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
8a00: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
8a10: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
8a20: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
8a30: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
8a40: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
8a50: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
8a60: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
8a70: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
8a80: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
8a90: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
8aa0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8ac0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
8ad0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
8ae0: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
8af0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8b10: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
8b20: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
8b30: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
8b40: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
8b50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
8b60: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
8b70: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
8b80: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
8b90: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
8ba0: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
8bb0: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
8bc0: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
8bd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
8be0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
8bf0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
8c00: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
8c10: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
8c20: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
8c30: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
8c40: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
8c50: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
8c60: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
8c70: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
8c80: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
8c90: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
8ca0: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
8cc0: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
8cd0: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
8ce0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
8cf0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
8d00: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
8d10: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
8d20: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
8d30: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
8d40: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
8d50: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
8d60: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
8d70: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
8d80: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
8d90: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
8da0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
8db0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
8dc0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
8dd0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
8de0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
8df0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
8e00: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
8e10: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
8e20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8e30: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
8e40: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
8e50: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
8e60: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8e80: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
8e90: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
8ea0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
8eb0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
8ec0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
8ed0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
8ee0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
8ef0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
8f00: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
8f10: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
8f20: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
8f30: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
8f40: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
8f50: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
8f60: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
8f70: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
8f80: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
8f90: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
8fa0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
8fb0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
8fc0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
8ff0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
9000: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
9010: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
9020: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
9030: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
9040: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
9050: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
9060: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
9070: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
9080: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
9090: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
90a0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
90b0: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
90c0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
90d0: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
90e0: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
90f0: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9110: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9120: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9130: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
9140: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9160: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9170: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
9180: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
9190: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
91c0: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
91d0: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
91e0: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
91f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9200: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
9210: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
9220: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
9230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9240: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
9250: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
9260: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
9270: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9280: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
9290: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
92a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
92b0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
92d0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
92e0: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
92f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
9300: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
9310: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
9320: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
9330: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9340: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
9370: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
9380: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9390: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
93b0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
93c0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
93d0: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
93e0: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
93f0: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
9400: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
9410: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
9420: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
9430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9440: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
9450: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
9460: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
9470: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
9480: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
9490: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
94a0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
94b0: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
94c0: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
94d0: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
94e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
94f0: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
9500: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
9510: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
9520: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
9530: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
9540: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
9550: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
9560: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
9570: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
9580: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
9590: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
95a0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
95b0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
95c0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
95d0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
95e0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
95f0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
9600: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
9610: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
9620: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
9630: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
9640: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
9650: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
9660: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
9670: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
9680: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
9690: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
96a0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
96b0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
96c0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
96d0: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
96e0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
96f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
9700: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
9710: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
9720: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9730: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
9740: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
9750: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9760: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9770: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9780: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
97b0: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
97c0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
97d0: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
97e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
97f0: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
9800: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
9810: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
9820: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
9830: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
9840: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
9850: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
9860: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
9870: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
9880: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
9890: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
98a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
98b0: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
98c0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
98d0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
98e0: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
98f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
9900: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
9910: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
9920: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
9930: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
9940: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
9950: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
9960: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
9970: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
9980: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
9990: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
99a0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
99b0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
99c0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
99d0: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
99e0: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
99f0: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
9a00: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
9a10: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
9a20: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
9a30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9a40: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
9a50: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
9a60: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
9a70: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
9a80: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
9a90: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
9aa0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
9ab0: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
9ac0: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
9ae0: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
9af0: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
9b00: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
9b10: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
9b20: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
9b30: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
9b40: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
9b50: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
9b60: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
9b70: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
9b80: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
9b90: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
9ba0: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
9bb0: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
9bc0: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
9bd0: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
9be0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
9bf0: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
9c00: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
9c10: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
9c20: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
9c30: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
9c40: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
9c50: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
9c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9c70: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
9c80: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
9c90: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
9ca0: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
9cb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9cc0: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
9cd0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
9ce0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
9cf0: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
9d00: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
9d10: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
9d20: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
9d30: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
9d40: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
9d50: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
9d60: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
9d70: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
9d80: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
9d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9da0: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
9db0: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
9dc0: 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64  bFree() */..#ifd
9dd0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
9de0: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
9df0: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
9e00: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
9e10: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
9e20: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
9e30: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
9e40: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
9e50: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
9e60: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
9e70: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
9e80: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
9e90: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
9ea0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
9eb0: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
9ec0: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
9ed0: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
9ee0: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
9ef0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
9f00: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
9f10: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
9f20: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
9f30: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
9f40: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
9f50: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
9f60: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
9f70: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
9f80: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
9f90: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
9fa0: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
9fb0: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
9fc0: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
9fd0: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
9fe0: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
9ff0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
a000: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
a010: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
a020: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
a030: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
a040: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
a050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a060: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
a070: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
a080: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
a090: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
a0a0: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
a0b0: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
a0c0: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
a0d0: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
a0e0: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
a0f0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
a100: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
a110: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
a120: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
a130: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
a140: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
a150: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
a160: 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70   ((db)->aDb[0].p
a170: 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a  Schema->enc)../*
a180: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
a190: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
a1a0: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
a1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
a1c0: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
a1d0: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
a1e0: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
a1f0: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
a200: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
a210: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
a220: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
a230: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
a240: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
a250: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
a260: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
a270: 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  04  /* Use full 
a280: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
a290: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
a2a0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
a2b0: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38  Sync  0x00000008
a2c0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
a2d0: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
a2e0: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
a2f0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
a300: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20      0x00000010  
a310: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
a320: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
a330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
a340: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
a350: 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20  000020  /* Show 
a360: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
a370: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
a380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
a390: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
a3a0: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
a3b0: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
a3c0: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
a3d0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a3e0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
a3f0: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
a400: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
a410: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a440: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
a450: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
a460: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a490: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
a4a0: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
a4b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a4c0: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
a4d0: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
a4e0: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
a4f0: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
a500: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a530: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
a540: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
a550: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
a560: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
a570: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
a580: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
a590: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
a5a0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
a5b0: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
a5c0: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
a5d0: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
a5e0: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
a5f0: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
a600: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
a610: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
a620: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
a630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a640: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
a650: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
a660: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
a670: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
a680: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a690: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
a6a0: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
a6b0: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
a6c0: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
a6d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a6e0: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
a6f0: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
a700: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
a710: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
a720: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
a730: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
a740: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
a750: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
a760: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
a770: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
a780: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
a790: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
a7a0: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
a7b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
a7c0: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
a7d0: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
a7e0: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
a7f0: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
a800: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
a810: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
a820: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
a830: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
a840: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a850: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
a860: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
a870: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
a880: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
a890: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a8a0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
a8b0: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
a8c0: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
a8d0: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
a8e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
a8f0: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
a900: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
a910: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
a920: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
a930: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
a940: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
a950: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
a960: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
a970: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
a980: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
a990: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
a9a0: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
a9b0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
a9c0: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
a9d0: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
a9e0: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
a9f0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
aa00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aa10: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
aa20: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
aa30: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
aa40: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
aa50: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
aa60: 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30          0x040000
aa70: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
aa80: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
aa90: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20  */.../*.** Bits 
aaa0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
aab0: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
aac0: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
aad0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
aae0: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
aaf0: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
ab00: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
ab10: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
ab20: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
ab30: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
ab40: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
ab50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
ab60: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
ab70: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
ab80: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
ab90: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
aba0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
abb0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
abc0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
abd0: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
abe0: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
abf0: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
ac00: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
ac10: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
ac20: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
ac30: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
ac40: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20  actoring */./*  
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f                no
ac60: 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30  t used    0x0010
ac70: 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54     // Was: SQLIT
ac80: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a  E_IdxRealAsInt *
ac90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
aca0: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
acb0: 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54  0x0020   /* DIST
acc0: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
acd0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
ace0: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
acf0: 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20  n   0x0040   /* 
ad00: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
ad10: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
ad20: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
ad30: 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f  xJoin 0x0080   /
ad40: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
ad50: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
ad60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad70: 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30  SubqCoroutine  0
ad80: 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75  x0100   /* Evalu
ad90: 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61  ate subqueries a
ada0: 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a  s coroutines */.
adb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
adc0: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
add0: 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0200   /* Transi
ade0: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
adf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ae00: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
ae10: 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d    0x0400   /* Om
ae20: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
ae30: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
ae40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
ae50: 33 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30  3          0x080
ae60: 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 53  0   /* Use the S
ae70: 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62 6c  QLITE_STAT3 tabl
ae80: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ae90: 49 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73 74  ITE_AdjustOutEst
aea0: 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 41     0x1000   /* A
aeb0: 64 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73 74  djust output est
aec0: 69 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48 45  imates using WHE
aed0: 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  RE */.#define SQ
aee0: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
aef0: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
af00: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
af10: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
af20: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
af30: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
af40: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
af50: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
af60: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
af70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
af80: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
af90: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
afa0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
afb0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
afc0: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
afd0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
afe0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
aff0: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
b000: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
b010: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
b020: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b030: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
b040: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
b050: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
b060: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
b070: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
b080: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
b090: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
b0a0: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
b0b0: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
b0c0: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
b0d0: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
b0e0: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
b0f0: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
b100: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
b110: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
b120: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
b130: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
b140: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
b150: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
b160: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
b170: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
b180: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
b190: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
b1a0: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
b1b0: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
b1c0: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
b1d0: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
b1e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b1f0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
b200: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
b210: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
b220: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
b230: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
b240: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
b250: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
b260: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
b270: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
b280: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
b290: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
b2a0: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
b2b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b2c0: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
b2d0: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
b2e0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
b2f0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
b300: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b310: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
b320: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
b330: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
b340: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
b350: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b360: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
b370: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
b380: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
b390: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
b3a0: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
b3b0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
b3c0: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
b3d0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
b3e0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
b3f0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
b400: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
b410: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
b420: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
b430: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
b440: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
b450: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
b460: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
b470: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
b480: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
b490: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
b4a0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
b4b0: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
b4c0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
b4d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
b4e0: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
b4f0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
b500: 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  16 funcFlags;   
b510: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
b520: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
b530: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
b540: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
b550: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
b560: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
b570: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
b580: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
b590: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
b5a0: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
b5b0: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
b5c0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
b5d0: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
b5e0: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
b5f0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
b600: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
b610: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
b620: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
b630: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
b640: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
b650: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
b660: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
b670: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
b680: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
b690: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
b6a0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
b6b0: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
b6c0: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
b6d0: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
b6e0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
b6f0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
b700: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
b710: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
b720: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
b730: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
b740: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
b750: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
b760: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
b770: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
b780: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
b790: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
b7a0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
b7b0: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
b7c0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
b7d0: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
b7e0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
b7f0: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
b800: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
b810: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
b820: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
b830: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
b840: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
b850: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
b860: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
b870: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
b880: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
b890: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
b8a0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
b8b0: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
b8c0: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
b8d0: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
b8e0: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
b8f0: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
b900: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
b910: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
b920: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
b930: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
b940: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
b950: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
b960: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
b970: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
b980: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
b990: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
b9a0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
b9b0: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
b9c0: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
b9d0: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
b9e0: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
b9f0: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
ba00: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
ba10: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
ba20: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
ba30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
ba40: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
ba50: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
ba60: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
ba70: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
ba80: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
ba90: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
baa0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
bab0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
bac0: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
bad0: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
bae0: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
baf0: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
bb00: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
bb10: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
bb20: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
bb30: 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65  YPEOFARG.  There
bb40: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
bb50: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
bb60: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
bb70: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
bb80: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
bb90: 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a  NCMASK  0x003 /*
bba0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
bbb0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
bbc0: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
bbd0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
bbe0: 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a  IKE     0x004 /*
bbf0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
bc00: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
bc10: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
bc20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
bc30: 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61       0x008 /* Ca
bc40: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
bc50: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
bc60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc70: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
bc80: 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72  0x010 /* Ephemer
bc90: 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68  al.  Delete with
bca0: 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65   VDBE */.#define
bcb0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
bcc0: 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73  DCOLL 0x020 /* s
bcd0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
bce0: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
bcf0: 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  called */.#defin
bd00: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
bd10: 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20  NGTH   0x040 /* 
bd20: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
bd30: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
bd40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
bd50: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30  C_TYPEOF   0x080
bd60: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
bd70: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
bd80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bd90: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
bda0: 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x100 /* Built-in
bdb0: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
bdc0: 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
bdd0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
bde0: 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69  SCE 0x200 /* Bui
bdf0: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
be00: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a   or ifnull() */.
be10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
be20: 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34  UNC_UNLIKELY 0x4
be30: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75  00 /* Built-in u
be40: 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69  nlikely() functi
be50: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
be60: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
be70: 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73  NT 0x800 /* Cons
be80: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
be90: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
bea0: 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ut */../*.** The
beb0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
bec0: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
bed0: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
bee0: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
bef0: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
bf00: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
bf10: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
bf20: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
bf30: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
bf40: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
bf50: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
bf60: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
bf70: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
bf80: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
bf90: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
bfa0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
bfb0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
bfc0: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
bfd0: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
bfe0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
bff0: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
c000: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
c010: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
c020: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
c030: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
c040: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
c050: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
c060: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
c070: 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20  ction. If .**   
c080: 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69    argument bNC i
c090: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
c0a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
c0b0: 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65  DCOLL flag is se
c0c0: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43  t..**.**   VFUNC
c0d0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
c0e0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
c0f0: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
c100: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
c110: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
c120: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c130: 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  T flag..**.**   
c140: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
c150: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
c160: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
c170: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
c180: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
c190: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
c1a0: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
c1b0: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
c1c0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
c1d0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
c1e0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
c1f0: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
c200: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
c210: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
c220: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
c230: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
c240: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
c250: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
c260: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
c270: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
c280: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
c290: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
c2a0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
c2b0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
c2c0: 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  me .**     that 
c2d0: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
c2e0: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
c2f0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
c300: 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20  all to C .**    
c310: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
c320: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
c330: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
c340: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
c350: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
c360: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
c370: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
c380: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
c390: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
c3a0: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
c3b0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
c3c0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
c3d0: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
c3e0: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
c3f0: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
c400: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
c410: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
c420: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
c430: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c440: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
c450: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
c460: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
c470: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
c480: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
c490: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
c4a0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46  0, 0}.#define VF
c4b0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c4c0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c4d0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
c4e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  , SQLITE_UTF8|(b
c4f0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
c500: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
c510: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
c520: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
c530: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
c540: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55  0, 0}.#define FU
c550: 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
c560: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c570: 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
c580: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
c590: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
c5a0: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
c5b0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
c5c0: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
c5d0: 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
c5e0: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
c5f0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
c600: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
c610: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
c620: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
c630: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
c640: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
c650: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
c660: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
c670: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
c680: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
c690: 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c   pArg, 0, xFunc,
c6a0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c6b0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  , 0}.#define LIK
c6c0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
c6d0: 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
c6e0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
c6f0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
c700: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
c710: 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
c720: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
c730: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
c740: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
c750: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
c760: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
c770: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
c780: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
c790: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
c7a0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
c7b0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
c7c0: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
c7d0: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
c7e0: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
c7f0: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
c800: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
c810: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
c820: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
c830: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
c840: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
c850: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
c860: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
c870: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
c880: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
c890: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
c8a0: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
c8b0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
c8c0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
c8d0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
c8e0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
c8f0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c910: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
c920: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
c930: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
c940: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c960: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
c970: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
c980: 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
c990: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c9b0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
c9c0: 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
c9d0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
c9e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
c9f0: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
ca00: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
ca10: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
ca20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
ca30: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
ca40: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
ca50: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
ca60: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
ca70: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
ca80: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
ca90: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
caa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
cab0: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
cac0: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
cad0: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
cae0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
caf0: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
cb00: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
cb10: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
cb20: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
cb30: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
cb40: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
cb50: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
cb60: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
cb70: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
cb80: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
cb90: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
cba0: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
cbb0: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
cbc0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
cbd0: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
cbe0: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
cbf0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
cc00: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
cc10: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
cc20: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
cc30: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
cc40: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc60: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
cc70: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
cc80: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
cc90: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
cca0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ccb0: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
ccc0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
ccd0: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
cce0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
ccf0: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
cd00: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
cd10: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
cd20: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
cd30: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
cd40: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
cd50: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
cd60: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
cd70: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
cd80: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
cd90: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
cda0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
cdb0: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
cdc0: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
cdd0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
cde0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
cdf0: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
ce00: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
ce10: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
ce20: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
ce30: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ce40: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
ce50: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
ce60: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
ce70: 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
ce80: 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
ce90: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
cea0: 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
ceb0: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
cec0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
ced0: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
cee0: 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
cef0: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
cf00: 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f   size of this co
cf10: 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f  lumn.  INT==1 */
cf20: 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
cf30: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
cf40: 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
cf50: 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
cf60: 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
cf70: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
cf80: 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
cf90: 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
cfa0: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
cfb0: 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
cfc0: 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
cfd0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
cfe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
cff0: 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
d000: 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
d010: 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
d020: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
d030: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
d040: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
d050: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
d060: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
d070: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
d080: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
d090: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
d0a0: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
d0b0: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
d0c0: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
d0d0: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
d0e0: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
d0f0: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
d100: 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
d110: 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
d120: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
d130: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
d140: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
d150: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
d160: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
d170: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
d180: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
d190: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
d1a0: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
d1b0: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
d1c0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d1d0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d1e0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
d1f0: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
d200: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d220: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
d230: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
d240: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
d250: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
d260: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
d270: 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
d280: 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
d290: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
d2a0: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
d2b0: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
d2c0: 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
d2d0: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
d2e0: 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
d2f0: 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
d300: 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
d310: 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
d320: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
d330: 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
d340: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
d350: 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
d360: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
d370: 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
d380: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
d390: 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  der */../*.** Co
d3a0: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
d3b0: 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
d3c0: 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
d3d0: 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
d3e0: 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
d3f0: 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
d400: 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
d410: 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
d420: 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
d430: 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
d440: 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
d450: 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
d460: 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
d470: 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
d480: 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74  ely.  .**.** But
d490: 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
d4a0: 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
d4b0: 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 61  we begin with 'a
d4c0: 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
d4d0: 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
d4e0: 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
d4f0: 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
d500: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
d510: 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
d520: 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
d530: 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
d540: 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
d550: 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
d560: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
d570: 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
d580: 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
d590: 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
d5a0: 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
d5b0: 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
d5c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
d5d0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
d5e0: 20 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'a'.#define SQL
d5f0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20  ITE_AFF_NONE    
d600: 20 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'b'.#define SQL
d610: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
d620: 20 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'c'.#define SQL
d630: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
d640: 20 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'd'.#define SQL
d650: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
d660: 20 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'e'..#define sq
d670: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
d680: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
d690: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
d6a0: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
d6b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
d6c0: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
d6d0: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
d6e0: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
d6f0: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a  ffinity value. .
d700: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d710: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
d720: 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x67../*.** Addit
d730: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
d740: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
d750: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
d760: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
d770: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
d780: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
d790: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
d7a0: 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
d7b0: 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
d7c0: 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
d7d0: 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
d7e0: 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
d7f0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
d800: 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
d810: 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
d820: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
d830: 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
d840: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
d850: 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
d860: 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
d870: 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
d880: 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
d890: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
d8a0: 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a 75  LL   0x08  /* ju
d8b0: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
d8c0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
d8d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d8e0: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 31  STOREP2      0x1
d8f0: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
d900: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
d910: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
d920: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d930: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
d940: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
d950: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d960: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
d970: 30 78 38 38 20 20 2f 2a 20 41 73 73 65 72 74 20  0x88  /* Assert 
d980: 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
d990: 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
d9a0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
d9b0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
d9c0: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
d9d0: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
d9e0: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
d9f0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
da00: 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  a. .**.** If the
da10: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
da20: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
da30: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
da40: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
da50: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
da60: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
da70: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
da80: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
da90: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
daa0: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
dab0: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
dac0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
dad0: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
dae0: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
daf0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
db00: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
db10: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
db20: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a  virtual table .*
db30: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
db40: 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
db50: 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
db60: 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
db70: 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  n .** database c
db80: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
db90: 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
dba0: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
dbb0: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68  database .** sch
dbc0: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
dbd0: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
dbe0: 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
dbf0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
dc00: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
dc10: 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
dc20: 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
dc30: 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
dc40: 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
dc50: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
dc60: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
dc70: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
dc80: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
dc90: 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
dca0: 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
dcb0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
dcc0: 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
dcd0: 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77  eal tables .** w
dce0: 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
dcf0: 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
dd00: 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
dd10: 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a  of the callers .
dd20: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
dd30: 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
dd40: 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
dd50: 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
dd60: 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74  base .** connect
dd70: 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
dd80: 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
dd90: 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
dda0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
ddb0: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
ddc0: 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
ddd0: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
dde0: 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
ddf0: 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
de00: 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
de10: 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
de20: 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
de30: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
de40: 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
de50: 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
de60: 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
de70: 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
de80: 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
de90: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
dea0: 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
deb0: 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
dec0: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
ded0: 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
dee0: 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
def0: 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
df00: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
df10: 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
df20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
df30: 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
df40: 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
df50: 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
df60: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
df70: 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
df80: 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
df90: 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
dfa0: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
dfb0: 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
dfc0: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
dfd0: 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
dfe0: 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
dff0: 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
e000: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
e010: 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65  are not .** dele
e020: 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
e030: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
e040: 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
e050: 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d  nnect()ed .** im
e060: 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
e070: 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
e080: 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
e090: 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
e0a0: 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
e0b0: 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
e0c0: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
e0d0: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
e0e0: 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
e0f0: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
e100: 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
e110: 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
e120: 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
e130: 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61   .** next time a
e140: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
e150: 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
e160: 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
e170: 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
e180: 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
e190: 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
e1a0: 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
e1b0: 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
e1c0: 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
e1d0: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
e1e0: 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
e1f0: 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
e200: 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
e210: 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
e220: 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
e230: 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
e240: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
e250: 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
e260: 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
e270: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
e280: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
e290: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
e2a0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
e2b0: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
e2c0: 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ys allocated by 
e2d0: 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
e2e0: 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
e2f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
e300: 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
e310: 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68  ble.db as .** th
e320: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
e330: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
e340: 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
e350: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
e360: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
e370: 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
e380: 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
e390: 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
e3a0: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
e3b0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
e3c0: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
e3d0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
e3e0: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
e3f0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
e400: 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
e410: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
e420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e430: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
e440: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
e450: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
e460: 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
e470: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
e480: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
e490: 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
e4a0: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
e4b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
e4c0: 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
e4d0: 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
e4e0: 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
e4f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
e500: 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
e510: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
e520: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  };../*.** Each S
e530: 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  QL table is repr
e540: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
e550: 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  y by an instance
e560: 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f   of the.** follo
e570: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
e580: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d  **.** Table.zNam
e590: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
e5a0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65   the table.  The
e5b0: 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69   case of the ori
e5c0: 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20  ginal.** CREATE 
e5d0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
e5e0: 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63  is stored, but c
e5f0: 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69  ase is not signi
e600: 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f  ficant for.** co
e610: 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mparisons..**.**
e620: 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74   Table.nCol is t
e630: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
e640: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
e650: 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20  le.  Table.aCol 
e660: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
e670: 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43  to an array of C
e680: 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73  olumn structures
e690: 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  , one for each c
e6a0: 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  olumn..**.** If 
e6b0: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
e6c0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
e6d0: 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65   KEY, then Table
e6e0: 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e  .iPKey is the in
e6f0: 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  dex of.** the co
e700: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61  lumn that is tha
e710: 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69  t key.   Otherwi
e720: 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  se Table.iPKey i
e730: 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74  s negative.  Not
e740: 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
e750: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52  tatype of the PR
e760: 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62  IMARY KEY must b
e770: 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68  e INTEGER for th
e780: 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62  is field to.** b
e790: 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47  e set.  An INTEG
e7a0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ER PRIMARY KEY i
e7b0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f  s used as the ro
e7c0: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
e7d0: 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   of.** the table
e7e0: 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61  .  If a table ha
e7f0: 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49  s no INTEGER PRI
e800: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61  MARY KEY, then a
e810: 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a   random rowid.**
e820: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f   is generated fo
e830: 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
e840: 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73  e table.  TF_Has
e850: 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65  PrimaryKey is se
e860: 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  t if.** the tabl
e870: 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52  e has any PRIMAR
e880: 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f  Y KEY, INTEGER o
e890: 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a  r otherwise..**.
e8a0: 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73  ** Table.tnum is
e8b0: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
e8c0: 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54   for the root BT
e8d0: 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  ree page of the 
e8e0: 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20  table in the.** 
e8f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
e900: 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20  If Table.iDb is 
e910: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
e920: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
e930: 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71  backend.** in sq
e940: 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69  lite.aDb[].  0 i
e950: 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  s for the main d
e960: 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73  atabase and 1 is
e970: 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68   for the file th
e980: 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70  at.** holds temp
e990: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
e9a0: 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46   indices.  If TF
e9b0: 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65  _Ephemeral is se
e9c0: 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61  t.** then the ta
e9d0: 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ble is stored in
e9e0: 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20   a file that is 
e9f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
ea00: 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68  leted.** when th
ea10: 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f  e VDBE cursor to
ea20: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c   the table is cl
ea30: 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63  osed.  In this c
ea40: 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a  ase Table.tnum .
ea50: 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63  ** refers VDBE c
ea60: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61  ursor number tha
ea70: 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c  t holds the tabl
ea80: 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74  e open, not to t
ea90: 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  he root.** page 
eaa0: 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65  number.  Transie
eab0: 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73  nt tables are us
eac0: 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72  ed to hold the r
ead0: 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73  esults of a.** s
eae0: 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70  ub-query that ap
eaf0: 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66  pears instead of
eb00: 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61   a real table na
eb10: 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  me in the FROM c
eb20: 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53  lause .** of a S
eb30: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
eb40: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
eb50: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
eb60: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
eb70: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
eb80: 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
eb90: 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
eba0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
ebb0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
ebc0: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
ebd0: 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
ebe0: 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
ebf0: 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
ec00: 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
ec10: 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
ec20: 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
ec30: 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
ec40: 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
ec50: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
ec60: 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
ec70: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
ec80: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
ec90: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
eca0: 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
ecb0: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
ecc0: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
ecd0: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
ece0: 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lumn */.#ifndef 
ecf0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
ed00: 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  K.  ExprList *pC
ed10: 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
ed20: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
ed30: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f  s */.#endif.  Lo
ed40: 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b  gEst nRowLogEst;
ed50: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
ed60: 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
ed70: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
ed80: 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  1 table */.  int
ed90: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
eda0: 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
edb0: 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61  node for this ta
edc0: 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62  ble (see note ab
edd0: 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50  ove) */.  i16 iP
ede0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
edf0: 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
ee00: 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
ee10: 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72  y] as the primar
ee20: 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e  y key */.  i16 n
ee30: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
ee40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
ee50: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
ee60: 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
ee70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ee80: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
ee90: 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
eea0: 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
eeb0: 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
eec0: 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
eed0: 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
eee0: 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
eef0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
ef00: 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
ef10: 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
ef20: 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
ef30: 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
ef40: 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
ef50: 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  f.  u8 tabFlags;
ef60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
ef70: 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
ef80: 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
ef90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
efa0: 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
efb0: 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
efc0: 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
efd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
efe0: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
eff0: 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
f000: 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
f010: 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
f020: 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
f030: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
f040: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
f050: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
f060: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
f070: 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
f080: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
f090: 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
f0a0: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
f0b0: 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
f0c0: 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75  Text of all modu
f0d0: 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20  le args. [0] is 
f0e0: 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20  module name */. 
f0f0: 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
f100: 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
f110: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
f120: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
f130: 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
f140: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
f150: 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
f160: 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
f170: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
f180: 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
f190: 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
f1a0: 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
f1b0: 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
f1c0: 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
f1d0: 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
f1e0: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
f1f0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
f200: 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
f210: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  gs..*/.#define T
f220: 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
f230: 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
f240: 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
f250: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
f260: 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
f270: 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
f280: 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
f290: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
f2a0: 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
f2b0: 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
f2c0: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
f2d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
f2e0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
f2f0: 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
f300: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
f310: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
f320: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
f330: 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
f340: 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
f350: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
f360: 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
f370: 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
f380: 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73 65   /* No rowid use
f390: 64 2e 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  d. PRIMARY KEY i
f3a0: 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f  s the key */.../
f3b0: 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
f3c0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
f3d0: 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
f3e0: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
f3f0: 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
f400: 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
f410: 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
f420: 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
f430: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
f440: 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
f450: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
f460: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
f470: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
f480: 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
f490: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
f4a0: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
f4b0: 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21  s & TF_Virtual)!
f4c0: 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
f4d0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
f4e0: 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
f4f0: 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
f500: 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64  )!=0).#else.#  d
f510: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
f520: 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66  X)      0.#  def
f530: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
f540: 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
f550: 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
f560: 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
f570: 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
f580: 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
f590: 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
f5a0: 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
f5b0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
f5c0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
f5d0: 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
f5e0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
f5f0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
f600: 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
f610: 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
f620: 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
f630: 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
f640: 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
f650: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
f660: 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
f670: 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
f680: 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
f690: 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
f6a0: 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
f6b0: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
f6c0: 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
f6d0: 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
f6e0: 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
f6f0: 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
f700: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
f710: 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
f720: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
f730: 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
f740: 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
f750: 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
f760: 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
f770: 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
f780: 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
f790: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
f7a0: 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
f7b0: 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
f7c0: 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
f7d0: 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
f7e0: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
f7f0: 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
f800: 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
f810: 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
f820: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
f830: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
f840: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
f850: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
f860: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
f870: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
f880: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
f890: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
f8a0: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
f8b0: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
f8c0: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
f8d0: 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
f8e0: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
f8f0: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
f900: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
f910: 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
f920: 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
f930: 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
f940: 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
f950: 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
f960: 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
f970: 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
f980: 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
f990: 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
f9a0: 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
f9b0: 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
f9c0: 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
f9d0: 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
f9e0: 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
f9f0: 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
fa00: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
fa10: 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
fa20: 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
fa30: 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
fa40: 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
fa50: 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
fa60: 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
fa70: 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
fa80: 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
fa90: 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
faa0: 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
fab0: 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
fac0: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
fad0: 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
fae0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
faf0: 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
fb00: 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
fb10: 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
fb20: 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
fb30: 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
fb40: 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
fb50: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fb60: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
fb70: 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
fb80: 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
fb90: 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
fba0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
fbb0: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
fbc0: 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
fbd0: 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
fbe0: 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
fbf0: 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
fc00: 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
fc10: 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
fc20: 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
fc30: 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
fc40: 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
fc50: 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
fc60: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
fc70: 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
fc80: 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
fc90: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
fca0: 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
fcb0: 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
fcc0: 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
fcd0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
fce0: 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
fcf0: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
fd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
fd10: 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
fd20: 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
fd30: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
fd40: 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
fd50: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
fd60: 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
fd70: 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
fd80: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
fd90: 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
fda0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
fdb0: 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
fdc0: 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
fdd0: 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
fde0: 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
fdf0: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
fe00: 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
fe10: 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
fe20: 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
fe30: 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
fe40: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
fe50: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
fe60: 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
fe70: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
fe80: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
fe90: 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
fea0: 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
feb0: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
fec0: 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
fed0: 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
fee0: 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
fef0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
ff00: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
ff10: 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
ff20: 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
ff30: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
ff40: 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
ff50: 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
ff60: 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
ff70: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
ff80: 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
ff90: 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
ffa0: 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
ffb0: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
ffc0: 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
ffd0: 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
ffe0: 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
fff0: 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
10000 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
10010 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
10020 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
10030 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
10040 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
10050 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
10060 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
10070 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
10080 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
10090 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
100a0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
100b0 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
100c0 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
100d0 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
100e0 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
100f0 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
10100 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
10110 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
10120 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
10130 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
10140 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
10150 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
10160 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
10170 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
10180 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
10190 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
101a0 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
101b0 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
101c0 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
101d0 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
101e0 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
101f0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
10200 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
10210 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
10220 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
10230 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
10240 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
10250 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
10260 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
10270 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
10280 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
10290 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ** .** The follo
102a0 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
102b0 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
102c0 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
102d0 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
102e0 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
102f0 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
10300 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
10310 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
10320 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
10330 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
10340 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
10350 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
10360 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
10370 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10380 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
10390 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
103a0 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
103b0 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
103c0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
103d0 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
103e0 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
103f0 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
10400 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
10410 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
10420 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
10430 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
10440 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
10450 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
10460 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
10470 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
10480 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
10490 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
104a0 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
104b0 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  ..#define OE_Res
104c0 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f  trict 6   /* OE_
104d0 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
104e0 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
104f0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
10500 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
10510 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20  ull  7   /* Set 
10520 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
10530 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
10540 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
10550 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20  flt  8   /* Set 
10560 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
10570 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
10580 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
10590 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20  OE_Cascade  9   
105a0 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
105b0 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69  hanges */..#defi
105c0 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31  ne OE_Default  1
105d0 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  0  /* Do whateve
105e0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
105f0 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
10600 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
10610 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10620 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
10630 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
10640 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
10650 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
10660 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
10670 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
10680 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20   .** comparison 
10690 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
106a0 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
106b0 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
106c0 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
106d0 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
106e0 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
106f0 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
10700 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
10710 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
10720 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
10730 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
10740 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
10750 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
10760 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
10770 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10780 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
10790 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
107a0 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
107b0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
107c0 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
107d0 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
107e0 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
107f0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
10800 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10810 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
10820 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
10830 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
10840 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10850 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
10860 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
10870 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
10880 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
10890 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
108a0 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
108b0 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
108c0 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
108d0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
108e0 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
108f0 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
10900 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
10910 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
10920 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
10930 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
10940 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10950 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
10960 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
10970 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20  out a.** single 
10980 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61  index record tha
10990 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
109a0 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
109b0 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
109c0 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   values..**.** A
109d0 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62   record is an ob
109e0 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69  ject that contai
109f0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
10a00 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a  ields of data..*
10a10 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73  * Records are us
10a20 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
10a30 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62  content of a tab
10a40 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74  le row and to st
10a50 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f  ore.** the key o
10a60 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62  f an index.  A b
10a70 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  lob encoding of 
10a80 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61  a record is crea
10a90 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50  ted by.** the OP
10aa0 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f  _MakeRecord opco
10ab0 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61  de of the VDBE a
10ac0 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c  nd is disassembl
10ad0 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f  ed by the.** OP_
10ae0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
10af0 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
10b00 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ure holds a reco
10b10 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
10b20 61 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65  ady been disasse
10b30 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74  mbled.** into it
10b40 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69  s constituent fi
10b50 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  elds..**.** The 
10b60 72 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72  r1 and r2 member
10b70 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
10b80 6e 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20  nly used by the 
10b90 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72  optimized compar
10ba0 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ison.** function
10bb0 73 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70  s vdbeRecordComp
10bc0 61 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62  areInt() and vdb
10bd0 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74  eRecordCompareSt
10be0 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63  ring()..*/.struc
10bf0 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
10c00 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
10c10 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
10c20 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
10c30 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
10c40 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
10c50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
10c60 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
10c70 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
10c80 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
10c90 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
10ca0 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
10cb0 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
10cc0 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
10cd0 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
10ce0 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
10cf0 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
10d00 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d  or NOMEM) */.  M
10d10 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
10d20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
10d30 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20    int r1;       
10d40 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
10d50 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
10d60 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74   > rhs) */.  int
10d70 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   r2;            
10d80 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
10d90 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68  urn if (rhs < lh
10da0 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  s) */.};.../*.**
10db0 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
10dc0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
10dd0 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
10de0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10df0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10e00 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
10e10 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
10e20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
10e30 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
10e40 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
10e50 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
10e60 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
10e70 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
10e80 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
10e90 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
10ea0 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
10eb0 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
10ec0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
10ed0 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
10ee0 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
10ef0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
10f00 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
10f10 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
10f20 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
10f30 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
10f40 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
10f50 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
10f60 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
10f70 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
10f80 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
10f90 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
10fa0 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
10fb0 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
10fc0 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
10fd0 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
10fe0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
10ff0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
11000 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
11010 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a  2 because the .*
11020 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
11030 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
11040 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
11050 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
11060 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
11070 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
11080 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
11090 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
110a0 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
110b0 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
110c0 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
110d0 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
110e0 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
110f0 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
11100 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
11110 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
11120 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
11130 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
11140 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
11150 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
11160 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
11170 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
11180 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
11190 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
111a0 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
111b0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
111c0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
111d0 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
111e0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
111f0 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74  tion .** algorit
11200 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
11210 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
11220 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
11230 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
11240 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73  ** element..*/.s
11250 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20  truct Index {.  
11260 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11270 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
11280 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
11290 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d  /.  i16 *aiColum
112a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
112b0 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72  Which columns ar
112c0 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69  e used by this i
112d0 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20  ndex.  1st is 0 
112e0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52  */.  LogEst *aiR
112f0 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a  owLogEst;     /*
11300 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45   From ANALYZE: E
11310 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65  st. rows selecte
11320 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e  d by each column
11330 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
11340 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
11350 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
11360 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
11370 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
11380 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ;           /* S
11390 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
113a0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
113b0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
113c0 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20  Index *pNext;   
113d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
113e0 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
113f0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
11400 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
11410 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
11420 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
11430 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  a containing thi
11440 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  s index */.  u8 
11450 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
11460 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63        /* for eac
11470 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d  h column: True==
11480 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
11490 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
114a0 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
114b0 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61  * Array of colla
114c0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61  tion sequence na
114d0 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f  mes for index */
114e0 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64  .  Expr *pPartId
114f0 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57  xWhere;     /* W
11500 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
11510 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20  partial indices 
11520 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  */.  KeyInfo *pK
11530 65 79 49 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a  eyInfo;       /*
11540 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63   A KeyInfo objec
11550 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 74  t suitable for t
11560 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
11570 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
11580 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
11590 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
115a0 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
115b0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
115c0 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
115d0 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
115e0 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
115f0 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
11600 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
11610 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11620 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
11630 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
11640 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
11650 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11660 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
11670 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
11680 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
116a0 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
116b0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
116c0 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
116d0 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
116e0 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
116f0 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
11700 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
11710 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
11720 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
11730 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
11740 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
11750 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
11760 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
11770 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
11780 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
11790 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
117a0 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
117b0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
117c0 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
117d0 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
117e0 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
117f0 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
11800 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
11810 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
11820 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
11830 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
11840 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
11850 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
11860 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
11870 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
11880 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
11890 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
118a0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
118b0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
118c0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
118d0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
118e0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
118f0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
11900 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
11910 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
11920 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
11930 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
11940 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
11950 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
11960 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
11970 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  key */.#endif.};
11980 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
11990 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
119a0 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
119b0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
119c0 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
119d0 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
119e0 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
119f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11a00 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
11a10 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
11a20 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
11a30 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
11a40 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
11a50 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
11a60 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
11a70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
11a80 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
11a90 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
11aa0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
11ab0 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
11ac0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
11ad0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
11ae0 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
11af0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
11b00 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
11b10 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
11b20 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
11b30 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
11b40 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
11b50 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
11b60 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
11b70 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
11b80 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
11b90 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
11ba0 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
11bb0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a  ted in memory .*
11bc0 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
11bd0 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
11be0 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
11bf0 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
11c00 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
11c10 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
11c20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
11c30 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
11c40 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
11c50 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
11c60 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
11c70 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
11c80 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
11c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
11ca0 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
11cb0 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
11cc0 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
11cd0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
11ce0 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
11cf0 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
11d00 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
11d10 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
11d20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
11d30 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
11d40 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
11d50 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
11d60 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
11d70 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
11d80 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
11d90 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
11da0 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
11db0 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
11dc0 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
11dd0 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
11de0 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
11df0 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
11e00 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
11e10 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
11e20 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e  ression..**.** N
11e30 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d  ote if Token.z==
11e40 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e  0 then Token.dyn
11e50 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65   and Token.n are
11e60 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a   undefined and.*
11e70 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61  * may contain ra
11e80 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f  ndom values.  Do
11e90 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73   not make any as
11ea0 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20  sumptions about 
11eb0 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64  Token.dyn.** and
11ec0 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f   Token.n when To
11ed0 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72  ken.z==0..*/.str
11ee0 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
11ef0 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
11f00 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
11f10 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
11f20 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
11f30 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
11f40 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
11f50 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
11f60 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
11f70 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
11f80 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
11f90 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
11fa0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
11fb0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
11fc0 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
11fd0 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
11fe0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
11ff0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
12000 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
12010 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
12020 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
12030 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
12040 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
12050 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
12060 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
12070 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
12080 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
12090 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
120a0 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
120b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
120c0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
120d0 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
120e0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
120f0 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
12100 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
12110 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
12120 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
12130 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
12140 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
12150 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
12160 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
12170 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
12180 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
12190 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
121a0 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
121b0 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
121c0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
121d0 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
121e0 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
121f0 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
12200 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
12210 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
12220 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12240 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
12250 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
12260 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
12270 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
12280 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
12290 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
122a0 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
122b0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
122c0 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
122e0 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
122f0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
12300 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
12310 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
12320 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
12330 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
12340 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
12350 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
12360 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
12370 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
12380 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
12390 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
123a0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
123b0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
123c0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
123d0 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
123e0 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
123f0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
12400 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
12410 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
12420 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
12430 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
12440 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
12450 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
12460 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
12470 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
12480 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
12490 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
124a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
124b0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
124c0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
124d0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
124e0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
124f0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
12500 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
12510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12520 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
12530 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
12540 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
12550 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
12560 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
12570 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
12580 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
12590 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
125b0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
125c0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
125d0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
125e0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
125f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
12600 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
12610 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
12620 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
12630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12640 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
12650 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
12660 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
12670 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
12680 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
12690 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
126a0 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
126b0 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
126d0 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
126e0 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
126f0 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
12700 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
12710 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
12720 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12730 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
12740 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
12750 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
12760 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
12770 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
12780 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
12790 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
127a0 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
127b0 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
127c0 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
127d0 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
127e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
127f0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
12800 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
12810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
12820 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
12830 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
12840 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
12850 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
12860 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
12870 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
12880 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
12890 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
128a0 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
128c0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
128d0 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
128e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
128f0 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
12900 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
12910 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
12920 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
12930 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
12940 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
12950 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
12960 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
12970 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
12980 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
12990 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
129a0 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
129b0 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
129c0 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
129d0 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
129e0 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
129f0 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
12a00 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
12a10 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
12a20 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
12a30 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
12a40 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
12a50 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
12a60 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
12a70 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
12a80 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
12a90 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
12aa0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
12ab0 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
12ac0 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
12ad0 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
12ae0 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
12af0 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
12b00 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
12b10 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
12b20 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
12b30 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
12b40 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
12b50 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
12b60 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
12b70 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
12b80 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
12b90 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
12ba0 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
12bb0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
12bc0 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
12bd0 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
12be0 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
12bf0 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
12c00 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
12c10 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
12c20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
12c30 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
12c40 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
12c50 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
12c60 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
12c70 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
12c80 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
12c90 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
12ca0 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
12cb0 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
12cc0 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
12cd0 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
12ce0 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
12cf0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
12d00 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
12d10 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
12d20 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a  OAT, TK_BLOB, .*
12d30 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
12d40 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
12d50 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
12d60 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
12d70 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
12d80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
12d90 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
12da0 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
12db0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
12dc0 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62  s the .** variab
12dd0 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
12de0 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
12df0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
12e00 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
12e10 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
12e20 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
12e30 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
12e40 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
12e50 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
12e60 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
12e70 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
12e80 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
12e90 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
12ea0 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
12eb0 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
12ec0 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
12ed0 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
12ee0 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
12ef0 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
12f00 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
12f10 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
12f20 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
12f30 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
12f40 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
12f50 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
12f60 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
12f70 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
12f80 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
12f90 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
12fa0 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
12fb0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
12fc0 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
12fd0 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
12fe0 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
12ff0 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
13000 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
13010 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
13020 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
13030 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
13040 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a  xpr.x.pList is .
13050 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
13060 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
13070 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
13080 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
13090 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
130a0 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
130b0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
130c0 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
130d0 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
130e0 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
130f0 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
13100 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
13110 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
13120 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
13130 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
13140 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
13150 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
13160 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
13170 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
13180 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
13190 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
131a0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
131b0 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
131c0 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
131d0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
131e0 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
131f0 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
13200 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
13210 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
13220 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
13230 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
13240 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
13250 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
13260 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
13270 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
13280 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72  on mark .** char
13290 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65  acter '?' in the
132a0 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74   original SQL) t
132b0 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61  hen the Expr.iTa
132c0 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ble holds the in
132d0 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  dex .** number f
132e0 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
132f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
13300 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
13310 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
13320 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
13330 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
13340 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
13350 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
13360 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
13370 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
13380 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
13390 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
133a0 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
133b0 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
133c0 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
133d0 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
133e0 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
133f0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
13400 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
13410 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
13420 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
13430 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
13440 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
13450 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
13460 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
13470 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
13480 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
13490 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
134a0 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
134b0 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
134c0 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
134d0 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
134e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
134f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13500 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
13510 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
13520 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
13530 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
13540 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
13550 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
13560 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
13570 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
13580 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
13590 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
135a0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
135b0 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
135c0 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
135d0 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
135e0 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
135f0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
13600 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
13610 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
13620 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
13630 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
13640 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
13650 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
13660 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
13670 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
13680 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
13690 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
136a0 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
136b0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
136c0 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
136d0 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
136e0 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
136f0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
13700 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
13710 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
13720 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
13730 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
13740 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
13750 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
13760 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
13770 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
13780 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
13790 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
137a0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
137b0 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
137c0 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
137d0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
137e0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
137f0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
13800 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
13810 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
13820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13830 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
13840 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
13850 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
13860 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
13870 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
13880 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
13890 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
138a0 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
138b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
138c0 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
138d0 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
138e0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
138f0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
13900 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
13910 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
13920 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
13930 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
13940 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
13950 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
13960 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
13970 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
13980 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
13990 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
139a0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
139b0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
139c0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
139d0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
139e0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
139f0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
13a00 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
13a10 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
13a20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
13a30 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
13a40 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a  r malfunction. .
13a50 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
13a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13a90 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
13aa0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
13ab0 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
13ac0 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
13ad0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
13ae0 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
13af0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
13b00 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
13b10 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
13b20 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
13b30 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
13b40 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
13b50 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
13b60 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
13b70 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
13b80 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
13b90 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
13ba0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
13bb0 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
13bc0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
13bd0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
13be0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
13bf0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
13c00 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
13c10 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
13c20 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
13c30 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
13c40 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
13c50 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
13c60 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
13c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
13cb0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
13cc0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
13cd0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
13ce0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
13cf0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
13d00 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
13d10 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
13d20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
13d30 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
13d40 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
13d50 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
13d60 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
13d70 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
13d80 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
13d90 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
13dc0 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
13dd0 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13df0 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
13e00 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c  1000 times likel
13e10 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
13e20 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
13e30 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
13e40 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
13e50 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
13e80 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
13e90 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
13ea0 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
13eb0 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
13ec0 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
13ed0 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
13ee0 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
13ef0 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
13f00 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
13f10 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
13f20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
13f30 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
13f40 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
13f50 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
13f60 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
13f70 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
13f80 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
13f90 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
13fa0 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
13fb0 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
13fc0 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
13ff0 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
14000 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
14010 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
14020 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
14030 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
14040 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
14050 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
14060 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
14070 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
14080 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
14090 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
140a0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
140b0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
140c0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
140d0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
140e0 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
140f0 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
14100 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20  inated in ON or 
14110 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
14120 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  a join */.#defin
14130 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
14140 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
14150 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
14160 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
14170 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
14180 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30  P_Resolved  0x00
14190 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65  0004 /* IDs have
141a0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74   been resolved t
141b0 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65  o COLUMNs */.#de
141c0 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20  fine EP_Error   
141d0 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78    0x000008 /* Ex
141e0 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e  pression contain
141f0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72  s one or more er
14200 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
14210 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
14220 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
14230 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
14240 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
14250 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
14260 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
14270 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
14280 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
14290 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
142a0 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
142b0 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
142c0 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
142d0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
142e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
142f0 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
14300 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
14310 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
14320 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
14330 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
14340 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
14350 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
14360 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
14370 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
14380 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
14390 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
143a0 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
143b0 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
143c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
143d0 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
143e0 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
143f0 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
14400 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
14410 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
14420 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
14430 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
14440 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
14450 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
14460 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
14470 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
14480 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
14490 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
144a0 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
144b0 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
144c0 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
144d0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
144e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
144f0 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
14500 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
14510 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
14520 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
14530 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
14540 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
14550 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
14560 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
14570 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
14580 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
14590 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
145a0 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
145b0 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
145c0 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
145d0 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
145e0 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
145f0 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
14600 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
14610 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
14620 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
14630 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
14640 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
14650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
14660 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30 30  onstant  0x08000
14670 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20 63  0 /* Node is a c
14680 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a  onstant */../*.*
14690 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
146a0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
146b0 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
146c0 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
146d0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
146e0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
146f0 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
14700 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
14710 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
14720 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
14730 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
14740 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
14750 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
14760 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
14770 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
14780 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
14790 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
147a0 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
147b0 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
147c0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
147d0 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
147e0 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
147f0 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
14800 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
14810 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
14820 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
14830 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
14840 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
14850 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
14860 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
14870 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
14880 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
14890 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
148a0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
148b0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
148c0 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
148d0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
148e0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
148f0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
14900 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
14910 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
14920 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
14930 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20  xpr .** struct, 
14940 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
14950 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
14960 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
14970 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e  xpr.flags .** an
14980 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
14990 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
149a0 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
149b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
149c0 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
149d0 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
149e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
149f0 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
14a00 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
14a10 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
14a20 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
14a30 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
14a40 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
14a50 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
14a60 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
14a70 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
14a80 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
14a90 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
14aa0 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
14ab0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
14ac0 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
14ad0 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
14ae0 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74   .** above sqlit
14af0 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
14b00 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
14b10 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
14b20 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
14b30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
14b40 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
14b50 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
14b60 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
14b70 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
14b80 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
14b90 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
14ba0 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
14bb0 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
14bc0 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
14bd0 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
14be0 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
14bf0 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
14c00 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
14c10 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
14c20 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
14c30 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
14c40 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
14c50 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
14c60 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
14c70 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
14c80 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
14c90 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
14ca0 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
14cb0 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
14cc0 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
14cd0 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
14ce0 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
14cf0 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
14d00 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
14d10 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
14d20 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
14d30 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
14d40 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
14d50 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
14d60 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
14d70 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
14d80 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
14d90 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
14da0 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
14db0 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
14dc0 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
14dd0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
14de0 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
14df0 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
14e00 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
14e10 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
14e20 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
14e30 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
14e40 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
14e50 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
14e60 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
14e70 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
14e80 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
14e90 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
14ea0 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
14eb0 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
14ec0 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
14ed0 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
14ee0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14ef0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
14f00 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
14f10 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
14f20 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65  _item { /* For e
14f30 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
14f40 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
14f50 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
14f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14f70 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
14f80 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72  ions */.    char
14f90 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
14fa0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
14fb0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
14fc0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
14fd0 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
14ff0 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
15000 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  the expression *
15010 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64  /.    u8 sortOrd
15020 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
15030 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30   1 for DESC or 0
15040 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20   for ASC */.    
15050 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31  unsigned done :1
15060 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61  ;       /* A fla
15070 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
15080 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
15090 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
150a0 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49   unsigned bSpanI
150b0 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61  sTab :1; /* zSpa
150c0 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45  n holds DB.TABLE
150d0 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75  .COLUMN */.    u
150e0 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65  nsigned reusable
150f0 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61   :1;   /* Consta
15100 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  nt expression is
15110 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20   reusable */.   
15120 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
15130 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
15140 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
15150 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
15160 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
15170 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
15180 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
15190 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
151a0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
151b0 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
151c0 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
151d0 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
151e0 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
151f0 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
15200 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
15210 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
15220 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
15230 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20   *a;            
15240 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61        /* Alloc a
15250 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72   power of two gr
15260 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74  eater or equal t
15270 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f  o nExpr */.};../
15280 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
15290 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
152a0 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
152b0 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
152c0 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
152d0 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
152e0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
152f0 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
15300 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
15310 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
15320 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
15330 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
15340 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15350 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
15360 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
15370 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
15380 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
15390 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
153a0 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
153b0 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
153c0 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
153d0 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
153e0 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
153f0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
15400 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
15410 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
15420 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
15430 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
15440 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
15450 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
15460 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
15470 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
15480 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
15490 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
154a0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
154b0 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
154c0 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
154d0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
154e0 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
154f0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
15500 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
15510 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
15520 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
15530 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
15540 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
15550 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
15560 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
15570 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
15580 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
15590 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
155a0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
155b0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
155c0 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
155d0 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
155e0 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
155f0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
15600 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
15610 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
15620 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
15630 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
15640 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
15650 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
15660 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
15670 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
15680 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
15690 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
156a0 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
156b0 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
156c0 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
156d0 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
156e0 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
156f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
15700 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
15710 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
15720 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
15730 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
15740 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
15750 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
15760 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
15770 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
15780 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
15790 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
157a0 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
157b0 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
157c0 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
157d0 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
157e0 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
157f0 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79  s on ix86..*/.ty
15800 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73  pedef u64 Bitmas
15810 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  k;../*.** The nu
15820 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
15830 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
15840 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
15850 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
15860 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
15870 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
15880 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
15890 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
158a0 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
158b0 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
158c0 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
158d0 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
158e0 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
158f0 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  <<(n))../*.** Th
15900 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
15910 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
15920 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
15930 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
15940 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
15950 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
15960 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
15970 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
15980 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
15990 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
159a0 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
159b0 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
159c0 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
159d0 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
159e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
159f0 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
15a00 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
15a10 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
15a20 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
15a30 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
15a40 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
15a50 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
15a60 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
15a70 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
15a80 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
15a90 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
15aa0 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
15ab0 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
15ac0 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
15ad0 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
15ae0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
15af0 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
15b00 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
15b10 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
15b20 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
15b30 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
15b40 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
15b50 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
15b60 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
15b70 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
15b80 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
15b90 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
15ba0 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
15bb0 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
15bc0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
15bd0 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
15be0 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
15bf0 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
15c00 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
15c10 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
15c20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
15c30 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
15c40 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
15c50 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
15c60 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
15c70 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
15c80 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
15c90 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
15ca0 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
15cb0 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
15cc0 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
15cd0 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
15ce0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
15cf0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
15d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15d10 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
15d20 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
15d30 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
15d40 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
15d50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15d60 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
15d70 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
15d80 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
15d90 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
15da0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
15db0 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
15dc0 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
15dd0 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
15de0 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
15df0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
15e00 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
15e10 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
15e20 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
15e30 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
15e40 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
15e50 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
15e60 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
15e70 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
15e80 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
15e90 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
15ea0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
15eb0 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
15ec0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
15ed0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
15ee0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
15ef0 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
15f00 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
15f10 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
15f20 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
15f30 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
15f40 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
15f50 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
15f60 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
15f70 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
15f80 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
15f90 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
15fa0 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
15fb0 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
15fc0 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
15fd0 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
15fe0 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
15ff0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
16000 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
16010 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
16020 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
16030 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
16040 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75  revious */.    u
16050 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
16060 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
16070 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
16080 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
16090 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  se */.    unsign
160a0 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
160b0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
160c0 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
160d0 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75  related */.    u
160e0 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
160f0 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
16100 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
16110 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
16120 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
16130 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
16140 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
16150 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
16160 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  TH */.#ifndef SQ
16170 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
16180 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74  N.    u8 iSelect
16190 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53  Id;     /* If pS
161a0 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64  elect!=0, the id
161b0 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65   of the sub-sele
161c0 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e  ct in EQP */.#en
161d0 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72  dif.    int iCur
161e0 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
161f0 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
16200 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
16210 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
16220 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
16230 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
16240 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
16250 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
16260 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
16270 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
16280 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
16290 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
162a0 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
162b0 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
162c0 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
162d0 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
162e0 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64  Index;     /* Id
162f0 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
16300 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
16310 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
16320 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
16330 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72      /* Index str
16340 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
16350 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20  ding to zIndex, 
16360 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b  if any */.  } a[
16370 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
16380 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
16390 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
163a0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
163b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
163c0 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
163d0 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
163e0 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
163f0 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
16400 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
16410 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
16420 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
16430 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
16440 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
16450 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
16460 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
16470 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
16480 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
16490 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
164a0 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
164b0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
164c0 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
164d0 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
164e0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
164f0 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
16500 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
16510 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
16520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
16530 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
16540 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
16550 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
16560 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
16570 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
16580 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
16590 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
165a0 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a   join type */...
165b0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
165c0 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
165d0 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
165e0 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
165f0 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
16600 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
16610 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
16620 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  er..*/.#define W
16630 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52  HERE_ORDERBY_NOR
16640 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20  MAL   0x0000 /* 
16650 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  No-op */.#define
16660 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
16670 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f  IN      0x0001 /
16680 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
16690 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20  ssing for min() 
166a0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
166b0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41  WHERE_ORDERBY_MA
166c0 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a  X      0x0002 /*
166d0 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
166e0 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66  sing for max() f
166f0 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
16700 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53  HERE_ONEPASS_DES
16710 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20  IRED  0x0004 /* 
16720 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70  Want to do one-p
16730 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54  ass UPDATE/DELET
16740 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  E */.#define WHE
16750 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b  RE_DUPLICATES_OK
16760 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b      0x0008 /* Ok
16770 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77   to return a row
16780 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
16790 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
167a0 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45  _OMIT_OPEN_CLOSE
167b0 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c    0x0010 /* Tabl
167c0 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  e cursors are al
167d0 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64  ready open */.#d
167e0 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43  efine WHERE_FORC
167f0 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30  E_TABLE      0x0
16800 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73  020 /* Do not us
16810 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20  e an index-only 
16820 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e  search */.#defin
16830 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45  e WHERE_ONETABLE
16840 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20  _ONLY    0x0040 
16850 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65  /* Only code the
16860 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54   1st table in pT
16870 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e  abList */.#defin
16880 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59  e WHERE_AND_ONLY
16890 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20           0x0080 
168a0 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64  /* Don't use ind
168b0 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d  ices for OR term
168c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
168d0 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
168e0 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f      0x0100 /* pO
168f0 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
16900 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
16910 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
16920 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
16930 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0200 /* pOrderby
16940 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
16950 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
16960 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
16970 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
16980 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0400 /* All out
16990 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
169a0 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
169b0 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
169c0 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38 30  GROUP      0x080
169d0 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
169e0 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
169f0 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
16a00 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20  HERE_REOPEN_IDX 
16a10 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20        0x1000 /* 
16a20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65  Try to use OP_Re
16a30 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41  openIdx */../* A
16a40 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
16a50 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
16a60 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
16a70 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
16a80 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
16a90 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
16aa0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
16ab0 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
16ac0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
16ad0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
16ae0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
16af0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16b00 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
16b10 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
16b20 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
16b30 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
16b40 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
16b50 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
16b60 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
16b70 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
16b80 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
16b90 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
16ba0 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
16bb0 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
16bc0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
16bd0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
16be0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
16bf0 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
16c00 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
16c10 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
16c20 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
16c30 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
16c40 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
16c50 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
16c60 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
16c70 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
16c80 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
16c90 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
16ca0 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
16cb0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
16cc0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
16cd0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
16ce0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
16cf0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
16d00 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
16d10 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
16d20 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
16d30 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
16d40 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
16d50 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
16d60 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
16d70 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
16d80 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74  most .** context
16d90 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
16da0 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
16db0 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
16dc0 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
16dd0 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
16de0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
16df0 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
16e00 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
16e10 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
16e20 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
16e30 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
16e40 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
16e50 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
16e60 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
16e70 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
16e80 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
16e90 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
16ea0 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
16eb0 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
16ec0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
16ed0 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62   .**.** Each sub
16ee0 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
16ef0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
16f00 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
16f10 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
16f20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
16f30 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
16f40 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
16f50 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
16f60 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
16f70 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
16f80 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
16f90 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
16fa0 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
16fb0 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
16fc0 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
16fd0 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
16fe0 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
16ff0 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
17000 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
17010 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
17020 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
17030 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
17040 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
17050 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
17060 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
17070 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
17080 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
17090 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  s */.  AggInfo *
170a0 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
170b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
170c0 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
170d0 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
170e0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
170f0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
17100 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
17110 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
17120 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
17130 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
17140 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
17150 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
17160 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
17170 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
17180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17190 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
171a0 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
171b0 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
171c0 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  8 ncFlags;      
171d0 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
171e0 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
171f0 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
17200 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
17210 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
17220 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
17230 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  Flags field..*/.
17240 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
17250 41 67 67 20 20 30 78 30 31 20 20 20 20 2f 2a 20  Agg  0x01    /* 
17260 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
17270 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
17280 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
17290 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
172a0 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  2    /* One or m
172b0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
172c0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
172d0 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
172e0 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ck   0x04    /* 
172f0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
17300 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
17310 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
17320 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
17330 67 46 75 6e 63 20 30 78 30 38 20 20 20 20 2f 2a  gFunc 0x08    /*
17340 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
17350 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
17360 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
17370 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
17380 78 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 54  x   0x10    /* T
17390 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
173a0 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
173b0 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   WHERE */../*.**
173c0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
173d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
173e0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
173f0 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
17400 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
17410 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
17420 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
17430 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
17440 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74   nLimit is set t
17450 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73  o -1 if there is
17460 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
17470 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65  .  nOffset is se
17480 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68  t to 0..** If th
17490 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63  ere is a LIMIT c
174a0 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65  lause, the parse
174b0 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f  r sets nLimit to
174c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
174d0 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e  e.** limit and n
174e0 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61  Offset to the va
174f0 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65  lue of the offse
17500 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65  t (or 0 if there
17510 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65   is not.** offse
17520 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f  t).  But later o
17530 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f  n, nLimit and nO
17540 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65  ffset become the
17550 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
17560 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45  s.** in the VDBE
17570 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65   that record the
17580 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65   limit and offse
17590 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a  t counters..**.*
175a0 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
175b0 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
175c0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
175d0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
175e0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
175f0 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
17600 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
17610 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
17620 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
17630 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
17640 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
17650 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
17660 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
17670 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
17680 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
17690 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
176a0 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
176b0 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
176c0 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
176d0 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
176e0 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
176f0 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
17700 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
17710 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
17720 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
17730 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
17740 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
17750 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
17760 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
17770 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
17780 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
17790 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
177a0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
177b0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
177c0 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
177d0 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
177e0 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
177f0 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
17800 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
17810 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
17820 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
17830 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17850 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
17860 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
17870 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
17880 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67  */.  u16 selFlag
17890 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
178a0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
178b0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
178c0 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
178d0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
178e0 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
178f0 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
17900 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  rs */.  int addr
17910 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
17920 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
17930 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
17940 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
17950 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f  .  u64 nSelectRo
17960 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  w;        /* Est
17970 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
17980 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
17990 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
179a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
179b0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
179c0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
179d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
179e0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
179f0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
17a00 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
17a10 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
17a20 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
17a30 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
17a40 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
17a50 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
17a60 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
17a70 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
17a80 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
17a90 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
17aa0 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
17ab0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
17ac0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
17ad0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
17ae0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
17af0 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
17b00 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
17b10 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
17b20 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
17b30 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
17b40 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
17b50 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
17b60 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
17b70 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
17b80 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
17b90 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
17ba0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
17bb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
17bc0 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
17bd0 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
17be0 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
17bf0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
17c00 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
17c10 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
17c20 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
17c30 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
17c40 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
17c50 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
17c60 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
17c70 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
17c80 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
17c90 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
17ca0 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30  olved        0x0
17cb0 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  002  /* Identifi
17cc0 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
17cd0 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
17ce0 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
17cf0 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
17d00 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
17d10 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
17d20 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
17d30 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30  phemeral   0x000
17d40 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  8  /* Uses the O
17d50 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
17d60 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
17d70 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
17d80 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c    0x0010  /* sql
17d90 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
17da0 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
17db0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
17dc0 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20  HasTypeInfo     
17dd0 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20  0x0020  /* FROM 
17de0 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
17df0 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
17e00 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
17e10 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 30        /*     0x0
17e20 30 34 30 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f  040  NOT USED */
17e30 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
17e40 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30  es          0x00
17e50 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  80  /* Synthesiz
17e60 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
17e70 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 20  lause */.       
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17e90 20 20 20 20 30 78 30 31 30 30 20 20 4e 4f 54 20      0x0100  NOT 
17ea0 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  USED */.#define 
17eb0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
17ec0 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61     0x0200  /* Pa
17ed0 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
17ee0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
17ef0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
17f00 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20  MaybeConvert    
17f10 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20  0x0400  /* Need 
17f20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
17f30 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
17f40 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
17f50 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 20  Recursive       
17f60 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65 20 72  0x0800  /* The r
17f70 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
17f80 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
17f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
17fa0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
17fb0 78 31 30 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x1000  /* Part o
17fc0 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
17fd0 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  ry */.../*.** Th
17fe0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
17ff0 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
18000 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
18010 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
18020 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
18030 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18040 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
18050 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
18060 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
18070 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
18080 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
18090 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
180a0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
180b0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
180c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
180d0 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
180e0 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
180f0 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
18100 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
18110 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
18120 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
18130 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
18140 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
18150 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
18160 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
18170 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
18180 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
18190 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
181b0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
181c0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
181d0 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
181e0 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
181f0 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
18200 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18230 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
18240 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
18250 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
18260 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
18270 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
18280 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
18290 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
182a0 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
182b0 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
182c0 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
182d0 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
182e0 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
182f0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
18300 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
18310 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
18320 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
18330 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
18340 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
18370 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
18380 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
18390 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
183a0 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
183b0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
183c0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
183d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
183e0 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
183f0 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
18400 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
18410 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
18420 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
18430 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
18440 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
18450 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
18480 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
18490 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
184a0 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
184b0 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
184c0 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
184d0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
184e0 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
184f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18500 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
18510 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
18520 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
18530 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
18560 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
18570 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
18580 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
18590 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
185a0 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
185b0 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
185c0 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
185d0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
185e0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
185f0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
18600 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
18610 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18630 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
18640 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
18650 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
18680 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
18690 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
186a0 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
186b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
186c0 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
186d0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
186e0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
18710 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
18720 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
18730 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
18740 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
18750 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
18780 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
18790 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
187a0 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
187c0 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
187d0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
187e0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
187f0 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
18800 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
18810 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
18820 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
18830 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
18840 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
18850 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
18860 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
18870 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
18880 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
18890 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
188a0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
188b0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
188c0 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
188d0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
188e0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
188f0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
18900 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
18920 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
18930 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
18940 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
18970 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
18980 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
18990 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
189a0 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
189b0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
189c0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
189d0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
189e0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
189f0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
18a00 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
18a30 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
18a40 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
18a50 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
18a60 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
18a70 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
18a80 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
18a90 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
18aa0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18ab0 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
18ac0 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
18ad0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
18ae0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
18af0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
18b00 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
18b10 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
18b20 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
18b50 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
18b60 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
18b70 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
18ba0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
18bb0 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
18bc0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
18bd0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
18be0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
18bf0 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
18c00 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
18c10 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
18c20 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
18c30 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
18c60 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
18c70 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
18c80 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
18c90 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
18ca0 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
18cb0 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
18cc0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
18cd0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
18ce0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
18cf0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
18d00 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
18d10 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
18d20 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
18d30 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
18d40 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
18d50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
18d60 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
18d70 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
18d80 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
18d90 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
18da0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
18db0 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
18dc0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
18dd0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
18de0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
18df0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
18e00 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
18e10 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
18e20 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
18e30 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
18e40 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
18e50 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
18e60 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
18e70 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
18e80 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
18e90 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
18ea0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
18eb0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
18ec0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
18ed0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
18ee0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
18ef0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
18f00 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
18f10 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
18f20 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
18f30 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
18f40 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
18f50 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
18f60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
18f70 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
18f80 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
18f90 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
18fa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
18fb0 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
18fc0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
18fd0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
18fe0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
18ff0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
19000 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
19010 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
19020 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
19030 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
19040 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
19050 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
19060 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
19070 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
19080 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
19090 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
190a0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
190b0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
190c0 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
190d0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
190e0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
190f0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
19100 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
19110 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
19120 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
19130 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
19140 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
19150 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
19160 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
19170 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
19180 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
19190 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
191a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
191b0 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
191c0 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
191d0 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
191e0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
191f0 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
19200 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
19210 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
19220 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
19230 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
19240 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
19250 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
19260 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
19270 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19280 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
19290 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
192a0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
192b0 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
192c0 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
192d0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
192e0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
192f0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
19300 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
19310 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
19320 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
19330 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
19340 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
19350 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
19360 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
19370 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
19380 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
19390 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
193a0 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
193b0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
193c0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
193d0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
193e0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
193f0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
19400 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
19410 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
19420 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
19430 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
19440 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
19450 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
19460 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
19470 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
19480 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
19490 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
194a0 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
194b0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
194c0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
194d0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
194e0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
194f0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
19500 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
19510 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
19520 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
19530 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
19540 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
19550 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
19560 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
19570 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19590 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
195a0 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
195b0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
195c0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
195d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
195e0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
195f0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
19600 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
19610 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
19620 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
19630 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
19640 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
19650 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
19660 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
19670 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
19680 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
19690 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
196a0 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
196b0 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
196c0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
196d0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
196e0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
196f0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
19700 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
19710 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
19720 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
19730 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
19740 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
19750 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
19760 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
19770 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
19780 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
19790 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
197a0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
197b0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
197c0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
197d0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
197e0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
197f0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
19800 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
19810 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
19820 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
19830 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
19840 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
19850 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
19860 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
19870 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
19880 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
19890 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
198a0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
198b0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
198c0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
198d0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
198e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
198f0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
19900 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
19910 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
19920 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
19930 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
19940 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
19950 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
19960 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
19970 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
19980 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
19990 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
199a0 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
199b0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
199c0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
199d0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
199e0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
199f0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
19a00 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
19a10 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
19a20 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
19a30 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
19a40 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
19a50 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
19a60 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
19a70 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
19a80 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
19a90 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
19aa0 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
19ab0 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
19ac0 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
19ad0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
19ae0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
19af0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
19b00 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
19b10 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
19b20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
19b30 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
19b40 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
19b50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
19b60 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
19b70 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
19b80 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
19b90 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
19ba0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
19bb0 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
19bc0 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
19bd0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
19be0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
19bf0 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
19c00 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
19c10 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
19c20 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
19c30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
19c40 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
19c50 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
19c60 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
19c70 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
19c80 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
19c90 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
19ca0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
19cb0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
19cc0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
19cd0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
19ce0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
19cf0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
19d00 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
19d10 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
19d20 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
19d30 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
19d40 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
19d50 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
19d60 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
19d70 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
19d80 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
19d90 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
19da0 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
19db0 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
19dc0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
19dd0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
19de0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
19df0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
19e00 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
19e10 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
19e20 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
19e30 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
19e40 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
19e50 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
19e60 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
19e70 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
19e80 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
19e90 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
19ea0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
19eb0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
19ec0 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
19ed0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
19ee0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
19ef0 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
19f00 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
19f10 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
19f20 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
19f30 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
19f40 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
19f50 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
19f60 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
19f70 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
19f80 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
19f90 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
19fa0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
19fb0 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
19fc0 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
19fd0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
19fe0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
19ff0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1a000 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1a010 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1a020 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1a030 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1a040 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1a050 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1a060 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1a070 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1a080 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1a090 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1a0a0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1a0b0 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1a0c0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1a0d0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1a0e0 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1a0f0 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1a100 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1a110 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1a120 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1a130 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1a140 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1a150 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1a160 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1a170 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1a180 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1a190 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1a1a0 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1a1b0 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1a1c0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1a1d0 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1a1e0 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1a1f0 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1a200 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1a210 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1a220 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1a230 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1a240 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1a250 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1a260 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1a270 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1a280 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1a290 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1a2a0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1a2b0 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1a2c0 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1a2d0 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1a2e0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1a2f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1a300 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1a310 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1a320 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1a330 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1a340 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1a350 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1a360 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1a370 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1a380 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1a390 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1a3a0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1a3b0 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1a3c0 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1a3d0 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1a3e0 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1a3f0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1a400 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1a410 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1a420 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1a430 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1a440 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1a450 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1a460 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1a470 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1a480 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1a490 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1a4a0 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1a4b0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1a4c0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1a4d0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1a4e0 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1a4f0 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1a500 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1a510 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1a520 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a530 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1a540 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1a550 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a560 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1a570 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1a580 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1a590 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1a5a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1a5b0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1a5c0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1a5d0 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1a5e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1a5f0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1a600 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1a610 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a620 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1a630 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1a640 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1a650 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1a660 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1a670 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1a680 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1a690 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1a6a0 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1a6b0 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1a6c0 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1a6d0 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1a6e0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1a6f0 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1a700 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1a710 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1a720 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54  .  int iPartIdxT
1a730 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  ab;     /* Table
1a740 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1a750 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  o a partial inde
1a760 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  x */.  int iCach
1a770 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1a780 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1a790 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1a7a0 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1a7b0 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1a7c0 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1a7d0 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1a7e0 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1a7f0 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1a800 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1a810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a820 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1a830 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1a840 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1a850 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1a860 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1a870 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1a880 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1a890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1a8a0 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1a8b0 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1a8c0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1a8d0 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1a8e0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1a8f0 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1a900 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1a910 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1a920 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1a930 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1a940 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1a950 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1a960 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1a970 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1a980 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1a990 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1a9a0 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1a9b0 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a9d0 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1a9e0 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1a9f0 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1aa00 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1aa10 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1aa20 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1aa30 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1aa40 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1aa50 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1aa60 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1aa70 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1aa80 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1aa90 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1aaa0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1aab0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1aac0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1aad0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1aae0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1aaf0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1ab00 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1ab10 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1ab20 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1ab30 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1ab40 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1ab50 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1ab60 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1ab70 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1ab80 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1ab90 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1aba0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1abb0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1abc0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1abd0 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1abe0 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1abf0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1ac00 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1ac10 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1ac20 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1ac30 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1ac40 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1ac50 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1ac60 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1ac70 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1ac80 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 6e 64 65 66  ogram */.#ifndef
1ac90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1aca0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1acb0 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1acc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1acd0 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1ace0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1acf0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1ad00 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1ad10 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1ad20 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1ad30 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1ad40 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1ad50 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1ad60 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1ad70 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1ad80 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1ad90 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1ada0 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1adb0 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1adc0 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1add0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1ade0 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1adf0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1ae00 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1ae10 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1ae20 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1ae30 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1ae40 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1ae50 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1ae60 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1ae70 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1ae80 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69  ATE TABLE */.  i
1ae90 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20  nt addrSkipPK;  
1aea0 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1aeb0 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  f instruction to
1aec0 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45   skip PRIMARY KE
1aed0 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32  Y index */.  u32
1aee0 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1aef0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1af00 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1af10 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1af20 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1af30 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1af40 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1af50 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1af60 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1af70 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1af80 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1af90 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1afa0 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1afb0 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1afc0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1afd0 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1afe0 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1aff0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1b000 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1b010 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1b020 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1b030 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1b040 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1b050 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1b060 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1b070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b0a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b0b0 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1b0c0 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1b0d0 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1b0e0 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1b0f0 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1b100 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1b110 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1b120 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1b130 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1b140 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1b150 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1b160 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1b170 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1b180 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1b190 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1b1a0 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1b1b0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1b1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
1b200 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
1b210 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b220 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1b230 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1b240 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1b250 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1b260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b270 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1b280 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1b290 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1b2a0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1b2b0 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1b2c0 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1b2d0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1b2e0 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20  bFreeWith;      
1b2f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1b300 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62  f pWith should b
1b310 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72  e freed with par
1b320 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  ser */.  u8 expl
1b330 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1b340 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1b350 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1b360 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1b370 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1b380 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1b390 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1b3a0 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1b3b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1b3c0 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1b3d0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1b3e0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1b3f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b400 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1b410 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1b420 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1b430 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1b440 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b450 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1b460 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1b470 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b490 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1b4a0 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1b4b0 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1b4c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1b4d0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1b4e0 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1b4f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1b500 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1b510 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1b520 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1b530 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1b540 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1b550 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1b560 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1b570 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1b580 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1b590 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1b5a0 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1b5b0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1b5c0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1b5d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1b5e0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1b5f0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1b600 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1b610 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1b620 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1b630 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1b640 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1b650 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1b660 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1b670 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1b680 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1b690 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1b6a0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1b6b0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1b6c0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1b6d0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1b6e0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1b6f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1b700 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1b710 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1b720 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1b730 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1b740 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1b750 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1b760 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1b770 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1b780 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1b790 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1b7a0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1b7b0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1b7c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1b7d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1b7e0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b800 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1b810 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1b820 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1b830 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1b840 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1b850 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1b860 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1b870 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1b880 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1b890 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1b8a0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1b8b0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1b8c0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1b8d0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1b8e0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1b8f0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1b900 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1b910 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1b920 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1b930 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1b940 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   NULL */.};../*.
1b950 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1b960 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1b970 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1b980 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1b990 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1b9a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1b9b0 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1b9c0 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1b9d0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1b9e0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1b9f0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1ba00 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1ba10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1ba20 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1ba30 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1ba40 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1ba50 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1ba60 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1ba70 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1ba80 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1ba90 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1baa0 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1bab0 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1bac0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1bad0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1bae0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1baf0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1bb00 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1bb10 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1bb20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1bb30 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1bb40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1bb50 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1bb60 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1bb70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64  s opcodes..*/.#d
1bb80 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1bb90 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1bba0 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
1bbb0 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
1bbc0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1bbd0 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1bbe0 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1bbf0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1bc00 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1bc10 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1bc20 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1bc30 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1bc40 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1bc50 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1bc60 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1bc70 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1bc80 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1bc90 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1bca0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1bcb0 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1bcc0 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1bcd0 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1bce0 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1bcf0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c  define OPFLAG_CL
1bd00 45 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30  EARCACHE    0x20
1bd10 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65      /* Clear pse
1bd20 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20  udo-table cache 
1bd30 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a  in OP_Column */.
1bd40 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1bd50 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
1bd60 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1bd70 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1bd80 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
1bd90 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
1bda0 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
1bdb0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1bdc0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
1bdd0 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
1bde0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
1bdf0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1be00 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
1be10 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
1be20 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
1be30 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
1be40 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32     0x02    /* P2
1be50 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
1be60 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
1be70 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
1be80 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
1be90 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1bea0 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
1beb0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
1bec0 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1bed0 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1bee0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1bef0 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1bf00 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1bf10 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1bf20 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  r. . *. * Pointe
1bf30 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
1bf40 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1bf50 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
1bf60 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
1bf70 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
1bf80 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
1bf90 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
1bfa0 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
1bfb0 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61  ts the . *    da
1bfc0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
1bfd0 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
1bfe0 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
1bff0 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
1c000 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
1c010 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
1c020 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
1c030 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
1c040 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
1c050 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
1c060 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
1c070 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
1c080 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1c090 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
1c0a0 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
1c0b0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
1c0c0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
1c0d0 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
1c0e0 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
1c0f0 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
1c100 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1c110 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
1c120 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1c130 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
1c140 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
1c150 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
1c160 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
1c170 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
1c180 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
1c190 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
1c1a0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1c1b0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
1c1c0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1e0 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
1c1f0 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
1c200 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
1c210 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
1c220 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
1c230 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
1c260 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
1c270 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
1c280 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
1c290 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
1c2a0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
1c2b0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
1c2c0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
1c2d0 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
1c2e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1c2f0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
1c300 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
1c310 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
1c320 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
1c330 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1c340 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
1c350 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
1c360 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
1c390 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
1c3a0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1c3b0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
1c3c0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1c3d0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
1c3e0 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
1c3f0 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
1c400 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1c410 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
1c420 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1c430 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
1c440 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
1c450 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
1c460 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
1c470 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1c480 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1c490 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
1c4a0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1c4b0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
1c4c0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
1c4d0 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
1c4e0 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
1c4f0 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
1c500 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
1c510 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
1c520 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  . .**.** If ther
1c530 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
1c540 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
1c550 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
1c560 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
1c570 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
1c580 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
1c590 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
1c5a0 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
1c5b0 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1c5c0 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
1c5d0 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
1c5e0 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
1c5f0 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
1c600 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
1c610 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
1c620 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
1c630 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
1c640 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
1c650 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20  gger-program. . 
1c660 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
1c670 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1c680 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
1c690 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
1c6a0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
1c6b0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
1c6c0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
1c6d0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
1c6e0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1c6f0 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73  r of the . * ass
1c700 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
1c710 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
1c720 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
1c730 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
1c740 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
1c750 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
1c760 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
1c770 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f  m.. * . * The "o
1c780 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
1c790 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
1c7a0 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
1c7b0 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
1c7c0 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
1c7d0 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
1c7e0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
1c7f0 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
1c800 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1c810 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66  the . * value of
1c820 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
1c830 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
1c840 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
1c850 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
1c860 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1c870 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
1c880 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
1c890 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1c8a0 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
1c8b0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1c8c0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1c8d0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1c8e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
1c8f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1c900 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
1c910 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  L.. * target    
1c920 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
1c930 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
1c940 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1c950 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
1c960 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1c970 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1c980 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
1c990 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
1c9a0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1c9b0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1c9c0 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
1c9d0 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
1c9e0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1c9f0 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
1ca00 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1ca10 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
1ca20 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
1ca30 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20  S ... . *       
1ca40 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1ca50 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
1ca60 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
1ca70 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
1ca80 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
1ca90 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
1caa0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
1cab0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1cac0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1cad0 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1cae0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1caf0 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
1cb00 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1cb10 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1cb20 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
1cb30 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1cb40 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1cb60 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a  rwise NULL.. * .
1cb70 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
1cb80 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ATE). * target  
1cb90 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1cba0 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1cbb0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1cbc0 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73  e to update rows
1cbd0 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20   of.. * pWhere  
1cbe0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1cbf0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
1cc00 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
1cc10 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1cc20 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1cc30 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1cc40 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
1cc50 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
1cc60 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
1cc70 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
1cc80 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
1cc90 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1cca0 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
1ccb0 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
1ccc0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
1ccd0 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
1cce0 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
1ccf0 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75  nt.. * . */.stru
1cd00 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
1cd10 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1cd20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1cd30 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1cd40 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1cd50 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
1cd60 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
1cd70 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
1cd80 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
1cd90 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
1cda0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
1cdb0 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
1cdc0 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
1cdd0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
1cde0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
1cdf0 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20  ECT statment or 
1ce00 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
1ce10 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  TO .. SELECT ...
1ce20 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67   */.  Token targ
1ce30 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  et;        /* Ta
1ce40 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
1ce50 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
1ce60 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
1ce70 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1ce80 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1ce90 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
1cea0 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
1ceb0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1cec0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
1ced0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
1cee0 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
1cef0 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1cf00 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1cf10 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1cf20 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1cf30 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1cf40 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1cf50 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1cf60 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1cf70 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1cf80 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1cf90 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1cfa0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1cfb0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1cfc0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1cfd0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1cfe0 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1cff0 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1d000 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1d010 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1d020 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1d030 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1d040 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1d050 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1d060 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1d070 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1d080 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1d090 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1d0a0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1d0b0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1d0c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1d0d0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1d0e0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1d0f0 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
1d100 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
1d110 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
1d120 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
1d130 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
1d140 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1d150 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1d160 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1d170 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1d180 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1d190 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1d1a0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1d1b0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1d1c0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1d1d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1d1e0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1d1f0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1d200 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1d210 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1d220 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1d230 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1d240 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1d250 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1d260 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1d270 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1d280 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1d290 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1d2a0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1d2b0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1d2c0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1d2d0 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1d2e0 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1d2f0 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1d300 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1d310 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1d320 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1d330 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1d340 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1d350 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1d360 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1d370 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1d380 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1d390 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1d3a0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1d3b0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1d3c0 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1d3d0 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1d3e0 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1d3f0 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1d400 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1d410 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1d420 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
1d430 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75  ngth */.  u8   u
1d440 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  seMalloc;      /
1d450 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73  * 0: none,  1: s
1d460 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
1d470 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c   2: sqlite3_mall
1d480 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  oc */.  u8   acc
1d490 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
1d4a0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
1d4b0 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
1d4c0 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  G */.};.#define 
1d4d0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20  STRACCUM_NOMEM  
1d4e0 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43   1.#define STRAC
1d4f0 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f  CUM_TOOBIG  2../
1d500 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
1d510 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
1d520 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
1d530 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
1d540 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
1d550 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
1d560 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
1d570 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
1d580 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
1d590 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
1d5a0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1d5b0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
1d5c0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
1d5d0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
1d5e0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
1d5f0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
1d600 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
1d610 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1d620 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
1d630 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
1d640 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
1d650 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
1d660 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1d670 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
1d680 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1d690 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
1d6a0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
1d6b0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
1d6c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
1d6d0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
1d6e0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
1d6f0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
1d700 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
1d710 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
1d720 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1d730 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
1d740 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1d770 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
1d780 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
1d790 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
1d7a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d7b0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
1d7c0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
1d7d0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7f0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1d800 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
1d810 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
1d820 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
1d830 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1d840 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
1d850 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
1d860 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
1d870 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d880 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
1d890 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
1d8a0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
1d8b0 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8d0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1d8e0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
1d8f0 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
1d900 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
1d910 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
1d920 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
1d930 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
1d940 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d960 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1d970 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
1d980 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
1d990 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1d9a0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1d9b0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1d9c0 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c  r count */.  sql
1d9d0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1d9e0 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
1d9f0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
1da00 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
1da10 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1da20 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1da30 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
1da40 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
1da50 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
1da60 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
1da70 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
1da80 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
1da90 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
1daa0 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
1dab0 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
1dad0 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
1dae0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
1daf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1db00 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1db10 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
1db20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
1db30 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
1db40 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
1db50 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
1db60 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
1db70 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db90 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
1dba0 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
1dbb0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
1dbc0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1dbd0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
1dbe0 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
1dbf0 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
1dc00 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1dc10 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
1dc20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1dc30 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dc50 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
1dc60 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
1dc70 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1dca0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
1dcb0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
1dcc0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1dcd0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
1dce0 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
1dcf0 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1dd20 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
1dd30 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
1dd40 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1dd50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1dd60 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
1dd70 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1dd80 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dda0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
1ddb0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
1ddc0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
1ddd0 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
1dde0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
1ddf0 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
1de00 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
1de10 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
1de20 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
1de30 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
1de40 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
1de50 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
1de60 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
1de70 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
1de80 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
1de90 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1dea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1deb0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
1dec0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
1ded0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
1dee0 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
1def0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1df00 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
1df10 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
1df20 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
1df30 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
1df40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1df50 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
1df60 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
1df70 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
1df80 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
1df90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1dfa0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1dfb0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1dfc0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
1dfd0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1dfe0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1dff0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1e000 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1e010 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e030 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
1e040 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
1e050 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1e060 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
1e070 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
1e080 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
1e090 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
1e0a0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
1e0b0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
1e0c0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
1e0d0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
1e0e0 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
1e0f0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1e100 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1e110 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
1e120 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
1e130 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1e140 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1e150 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1e160 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1e170 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1e180 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1e190 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1e1a0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
1e1b0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
1e1c0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
1e1d0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
1e1e0 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
1e1f0 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
1e200 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
1e210 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
1e220 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1e230 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
1e240 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
1e250 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
1e260 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
1e270 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
1e280 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
1e290 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
1e2a0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
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 2f 2a 20 31 73             /* 1s
1e2d0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
1e2e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1e2f0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
1e300 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54  _TEST.  int (*xT
1e310 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74  estCallback)(int
1e320 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76  );        /* Inv
1e330 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46  oked by sqlite3F
1e340 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e  aultSim() */.#en
1e350 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c  dif.  int bLocal
1e360 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
1e370 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e380 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
1e390 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a  e() calls */.};.
1e3a0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
1e3b0 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
1e3c0 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
1e3d0 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
1e3e0 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
1e3f0 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
1e400 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
1e410 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
1e420 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
1e430 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1e440 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
1e450 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
1e460 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
1e470 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
1e480 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
1e490 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
1e4a0 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
1e4b0 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
1e4c0 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
1e4d0 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
1e4e0 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
1e4f0 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
1e500 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
1e510 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
1e520 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
1e530 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
1e540 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
1e550 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
1e560 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1e570 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
1e580 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
1e590 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
1e5a0 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
1e5b0 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
1e5c0 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
1e5d0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
1e5e0 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
1e5f0 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
1e600 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
1e610 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1e620 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1e630 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1e640 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1e650 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1e660 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1e670 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1e680 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1e690 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1e6a0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1e6b0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1e6c0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1e6d0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1e6e0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1e6f0 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
1e700 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
1e710 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
1e720 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
1e730 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
1e740 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e760 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
1e770 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
1e780 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
1e790 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e7b0 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
1e7c0 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ies */.  union {
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
1e800 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
1e810 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
1e820 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
1e850 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20  t */.    int i; 
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
1e890 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c  alue */.    SrcL
1e8a0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8c0 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
1e8d0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
1e8e0 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
1e8f0 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
1e900 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1e910 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
1e920 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ences */.  } u;.
1e930 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
1e940 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
1e950 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1e960 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
1e970 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1e980 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
1e990 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
1e9a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1e9b0 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
1e9c0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1e9d0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
1e9e0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
1e9f0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1ea00 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
1ea10 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1ea20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
1ea30 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
1ea40 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
1ea50 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
1ea60 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
1ea70 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
1ea80 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
1ea90 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
1eaa0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
1eab0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
1eac0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
1ead0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
1eae0 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
1eaf0 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
1eb00 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
1eb10 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
1eb20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
1eb30 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
1eb40 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1eb50 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1eb60 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
1eb70 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
1eb80 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
1eb90 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
1eba0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
1ebb0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
1ebc0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
1ebd0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
1ebe0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1ebf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ec00 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
1ec10 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
1ec20 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
1ec50 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1ec60 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
1ec70 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
1ec80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1ec90 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
1eca0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
1ecb0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
1ecc0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1ecd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
1ece0 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
1ecf0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
1ed00 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
1ed10 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
1ed20 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
1ed30 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
1ed40 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1ed50 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
1ed60 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
1ed70 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
1ed80 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
1ed90 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20  char *zErr;     
1eda0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
1edb0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
1edc0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
1edd0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
1ede0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  };../*.** Assumi
1edf0 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
1ee00 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1ee10 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
1ee20 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
1ee30 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
1ee40 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1ee50 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
1ee60 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
1ee70 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
1ee80 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eea0 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
1eeb0 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
1eec0 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
1eef0 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
1ef00 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
1ef10 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef50 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
1ef60 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
1ef70 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
1ef80 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
1ef90 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
1efa0 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
1efb0 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
1efc0 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
1efd0 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
1efe0 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
1eff0 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
1f000 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
1f010 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
1f020 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
1f030 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
1f040 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
1f050 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
1f060 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
1f070 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
1f080 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
1f090 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
1f0a0 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
1f0b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
1f0c0 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
1f0d0 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
1f0e0 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
1f0f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
1f100 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
1f110 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
1f120 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1f130 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
1f140 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
1f150 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1f160 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
1f170 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
1f180 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
1f190 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a  (__LINE__).../*.
1f1a0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
1f1b0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
1f1c0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
1f1d0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
1f1e0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
1f1f0 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
1f200 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
1f210 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61  fusion we also a
1f220 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
1f230 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
1f240 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
1f250 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c  n alisse for SQL
1f260 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
1f270 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
1f280 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1f290 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
1f2a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1f2b0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
1f2c0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
1f2d0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1f2e0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
1f2f0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
1f300 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
1f310 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
1f320 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
1f330 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
1f340 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
1f350 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
1f360 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1f370 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
1f380 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
1f390 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
1f3a0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
1f3b0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
1f3c0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
1f3d0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1f3e0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1f3f0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
1f400 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
1f410 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
1f420 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
1f430 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
1f440 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
1f450 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
1f460 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
1f470 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
1f480 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
1f490 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
1f4a0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
1f4b0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
1f4c0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
1f4d0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
1f4e0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
1f4f0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1f500 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1f510 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
1f520 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1f530 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
1f540 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1f550 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
1f560 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f570 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
1f580 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1f590 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f5a0 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
1f5b0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1f5c0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
1f5d0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1f5e0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
1f5f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f600 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
1f610 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1f620 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f630 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
1f640 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
1f650 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
1f660 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1f670 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
1f680 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f690 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
1f6a0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
1f6b0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
1f6c0 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
1f6d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f6e0 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
1f6f0 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
1f700 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1f710 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
1f720 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
1f730 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1f740 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f750 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
1f760 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
1f770 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1f780 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1f790 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
1f7a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1f7b0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1f7c0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
1f7d0 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
1f7e0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1f7f0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1f800 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
1f810 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
1f820 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1f830 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1f840 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
1f850 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1f860 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
1f870 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
1f880 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65  rototypes.*/.#de
1f890 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49  fine sqlite3StrI
1f8a0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69  Cmp sqlite3_stri
1f8b0 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  cmp.int sqlite3S
1f8c0 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
1f8d0 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
1f8e0 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
1f8f0 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
1f900 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
1f910 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
1f920 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
1f930 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
1f940 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e  sqlite3Malloc(in
1f950 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1f960 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29  3MallocZero(int)
1f970 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1f980 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
1f990 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  te3*, int);.void
1f9a0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
1f9b0 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69  cRaw(sqlite3*, i
1f9c0 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
1f9d0 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
1f9e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
1f9f0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
1fa00 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
1fa10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1fa20 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1fa30 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
1fa40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1fa50 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
1fa60 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
1fa70 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1fa80 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1fa90 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
1faa0 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1fab0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
1fac0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1fad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
1fae0 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
1faf0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
1fb00 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
1fb10 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
1fb20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
1fb30 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1fb40 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
1fb50 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1fb60 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
1fb70 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
1fb80 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
1fb90 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
1fba0 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
1fbb0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1fbc0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
1fbd0 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
1fbe0 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
1fbf0 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id));.int sqlite
1fc00 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
1fc10 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
1fc20 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
1fc30 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
1fc40 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
1fc50 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
1fc60 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
1fc70 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
1fc80 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
1fc90 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
1fca0 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
1fcb0 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
1fcc0 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
1fcd0 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
1fce0 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
1fcf0 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
1fd00 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
1fd10 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
1fd20 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
1fd30 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
1fd40 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
1fd50 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
1fd60 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
1fd70 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
1fd80 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
1fd90 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
1fda0 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
1fdb0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
1fdc0 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
1fdd0 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
1fde0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fdf0 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1fe00 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64        .#else.# d
1fe10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1fe20 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1fe30 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1fe40 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
1fe50 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1fe60 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
1fe70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1fe80 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
1fe90 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1fea0 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
1feb0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
1fec0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1fed0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1fee0 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
1fef0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1ff00 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1ff10 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
1ff20 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1ff30 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
1ff40 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
1ff50 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
1ff60 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
1ff70 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
1ff80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
1ff90 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
1ffa0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1ffb0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1ffc0 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
1ffd0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1ffe0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
1fff0 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
20000 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
20010 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
20020 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
20030 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
20040 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
20050 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
20060 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
20070 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
20080 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
20090 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
200a0 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69  StatusAdd(int, i
200b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
200c0 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20  3StatusSet(int, 
200d0 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  int);..#ifndef S
200e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
200f0 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
20100 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
20110 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
20120 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
20130 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
20140 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20150 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
20160 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
20170 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
20180 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
20190 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
201a0 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
201b0 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
201c0 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
201d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
201e0 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
201f0 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
20200 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
20210 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
20220 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
20230 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
20240 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20250 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
20260 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
20270 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
20280 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
20290 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
202a0 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
202b0 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
202c0 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
202d0 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
202e0 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
202f0 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
20300 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
20310 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
20320 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
20330 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
20340 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
20350 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
20360 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
20370 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
20380 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
20390 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
203a0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
203b0 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
203c0 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
203d0 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
203e0 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
203f0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
20400 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
20410 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
20420 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
20430 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
20440 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
20450 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
20460 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
20470 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
20480 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
20490 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
204a0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ar*);.#endif../*
204b0 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69   Output formatti
204c0 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ng for SQLITE_TE
204d0 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a  STCTRL_EXPLAIN *
204e0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
204f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45  LITE_ENABLE_TREE
20500 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64  _EXPLAIN).  void
20510 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
20520 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76  egin(Vdbe*);.  v
20530 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20540 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20  inPrintf(Vdbe*, 
20550 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
20560 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20570 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a  3ExplainNL(Vdbe*
20580 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20590 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62  3ExplainPush(Vdb
205a0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
205b0 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64  te3ExplainPop(Vd
205c0 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
205d0 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
205e0 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
205f0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
20600 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c  elect(Vdbe*, Sel
20610 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
20620 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
20630 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Vdbe*, Expr*);.
20640 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20650 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64  plainExprList(Vd
20660 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  be*, ExprList*);
20670 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  .  const char *s
20680 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
20690 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65  ation(Vdbe*);.#e
206a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
206b0 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e  ite3ExplainBegin
206c0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
206d0 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63  ite3ExplainSelec
206e0 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
206f0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
20700 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  pr(A,B).# define
20710 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
20720 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64  xprList(A,B).# d
20730 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
20740 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20  lainFinish(X).# 
20750 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
20760 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29  beExplanation(X)
20770 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64   0.#endif...void
20780 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
20790 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
207a0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
207b0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
207c0 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
207d0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
207e0 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
207f0 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
20800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
20810 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
20820 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
20830 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20840 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
20850 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20860 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
20870 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
20880 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
20890 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
208a0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
208b0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
208c0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
208d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
208e0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
208f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
20900 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
20910 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
20920 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20930 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
20940 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70  che(Parse*);.Exp
20950 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
20960 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
20970 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
20980 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
20990 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
209a0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
209b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
209c0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
209d0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
209e0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
209f0 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
20a00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
20a10 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  r*, Expr*, const
20a20 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
20a30 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
20a40 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
20a50 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
20a60 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
20a70 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
20a80 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
20a90 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
20aa0 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
20ab0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
20ac0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
20ad0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
20ae0 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
20af0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
20b00 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
20b10 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
20b20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
20b30 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
20b40 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
20b50 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
20b60 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
20b70 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
20b80 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
20b90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20ba0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
20bb0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
20bc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
20bd0 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
20be0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
20bf0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
20c00 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
20c10 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
20c20 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
20c30 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
20c40 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
20c50 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
20c60 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
20c70 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
20c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
20c90 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
20ca0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
20cb0 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
20cc0 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
20cd0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
20ce0 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
20cf0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
20d00 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
20d10 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
20d20 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20  qlite3*);.Table 
20d30 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
20d40 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
20d50 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
20d60 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
20d70 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
20d80 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
20d90 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
20da0 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
20db0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
20dc0 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
20dd0 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
20de0 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
20df0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
20e00 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
20e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
20e20 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
20e30 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
20e40 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
20e50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
20e60 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
20e70 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
20e80 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
20e90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20ea0 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
20eb0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
20ec0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
20ed0 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79  lite3AddColumnTy
20ee0 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  pe(Parse*,Token*
20ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20f00 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
20f10 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
20f20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
20f30 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
20f40 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
20f50 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
20f60 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
20f70 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
20f80 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20f90 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
20fa0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
20fb0 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
20fe0 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
20ff0 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
21000 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
21010 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21020 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
21030 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
21040 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
21050 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
21060 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71  TEST.# define sq
21070 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
21080 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
21090 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
210a0 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
210b0 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
210c0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
210d0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
210e0 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
210f0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
21100 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
21110 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
21120 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
21130 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
21140 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
21150 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
21160 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
21170 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
21180 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
21190 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
211a0 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
211b0 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65  nt,int*);..RowSe
211c0 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
211d0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
211e0 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
211f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21200 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
21210 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
21220 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
21230 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
21240 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
21250 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
21260 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
21270 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
21280 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
21290 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
212a0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
212b0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
212c0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
212d0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
212e0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
212f0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
21300 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
21310 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
21320 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
21330 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
21340 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
21350 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
21360 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
21370 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
21380 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  0.#endif..#if SQ
21390 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
213a0 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  D>30.  int sqlit
213b0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
213c0 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66  yDbMask);.#endif
213d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
213e0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
213f0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
21400 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21410 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61  CodeDropTable(Pa
21420 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
21430 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21440 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
21450 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
21460 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
21470 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
21480 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
21490 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
214a0 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
214b0 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
214c0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
214d0 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
214e0 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
214f0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
21500 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
21510 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21520 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
21530 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
21540 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
21550 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
21560 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
21570 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
21580 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
21590 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
215a0 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
215b0 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
215c0 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
215d0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
215e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
215f0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
21600 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
21610 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
21620 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
21630 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
21640 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
21650 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
21660 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
21670 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
21680 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
21690 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
216a0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
216b0 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
216c0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
216d0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
216e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21700 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20          Token*, 
21710 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
21720 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
21730 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
21740 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
21750 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
21760 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21770 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
21780 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
21790 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
217a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
217b0 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
217c0 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
217d0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
217e0 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
217f0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
21800 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
21810 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
21820 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
21830 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
21840 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
21850 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
21860 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
21870 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
21880 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
21890 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a  char**);.Index *
218a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
218b0 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
218c0 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
218d0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
218e0 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21900 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
21910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
21920 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
21930 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
21940 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
21950 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
21960 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
21970 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
21980 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
21990 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
219a0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
219b0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
219d0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
219e0 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  16,Expr*,Expr*);
219f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
21a00 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ectDelete(sqlite
21a10 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61  3*, Select*);.Ta
21a20 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ble *sqlite3SrcL
21a30 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a  istLookup(Parse*
21a40 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
21a50 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e   sqlite3IsReadOn
21a60 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ly(Parse*, Table
21a70 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
21a80 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50  lite3OpenTable(P
21a90 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c  arse*, int iCur,
21aa0 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a   int iDb, Table*
21ab0 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69  , int);.#if defi
21ac0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
21ad0 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
21ae0 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  LIMIT) && !defin
21af0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
21b00 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73  UBQUERY).Expr *s
21b10 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65  qlite3LimitWhere
21b20 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
21b30 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
21b40 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61  ,Expr*,Expr*,cha
21b50 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  r*);.#endif.void
21b60 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
21b70 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
21b80 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
21b90 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
21ba0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
21bb0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
21bc0 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
21bd0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
21be0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
21bf0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
21c00 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
21c10 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
21c20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
21c30 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34  WhereInfo*);.u64
21c40 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
21c50 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
21c60 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21c70 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
21c80 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
21c90 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
21ca0 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
21cb0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
21cc0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
21cd0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
21ce0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
21cf0 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
21d00 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21d10 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
21d20 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
21d30 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
21d40 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
21d50 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Info*, int*);.in
21d60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
21d70 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
21d80 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
21d90 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
21da0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21db0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
21dc0 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
21dd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
21de0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21df0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
21e00 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
21e10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21e20 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
21e30 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
21e40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21e50 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
21e60 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
21e70 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
21e80 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  op(Parse*);.void
21e90 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
21ea0 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20  eRemove(Parse*, 
21eb0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21ec0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
21ed0 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76  Clear(Parse*);.v
21ee0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
21ef0 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e  acheAffinityChan
21f00 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ge(Parse*, int, 
21f10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21f20 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
21f30 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
21f40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21f50 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
21f60 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
21f70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21f80 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
21f90 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
21fa0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
21fb0 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
21fc0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
21fd0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
21fe0 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
21ff0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
22000 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22010 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
22020 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
22030 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22040 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
22050 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
22060 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ist*, int, u8);.
22070 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
22080 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
22090 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
220a0 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
220b0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
220c0 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
220d0 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
220e0 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
220f0 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
22100 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
22110 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
22120 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22130 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
22140 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22150 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
22160 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
22170 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
22180 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
22190 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
221a0 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
221b0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
221c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
221d0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
221e0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
221f0 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
22200 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
22210 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
22220 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
22230 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
22240 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
22250 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
22260 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
22270 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
22280 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
22290 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
222a0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
222b0 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
222c0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
222d0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
222e0 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
222f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
22300 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
22310 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
22320 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
22330 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
22340 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
22350 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
22360 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
22370 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
22380 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
22390 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
223a0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
223b0 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
223c0 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
223d0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
223e0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
223f0 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
22400 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
22410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22420 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
22430 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
22440 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
22450 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
22460 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
22470 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
22480 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
22490 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
224a0 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
224b0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
224c0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
224d0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
224e0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
224f0 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
22500 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22510 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
22520 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
22530 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
22540 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
22550 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
22560 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
22570 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
22580 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
22590 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
225a0 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
225b0 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
225c0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
225d0 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
225e0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
225f0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
22600 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
22610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22620 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
22630 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
22640 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
22650 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
22660 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
22670 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
22680 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
22690 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
226a0 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
226b0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
226c0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
226d0 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29  rFunction(Expr*)
226e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
226f0 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
22700 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
22710 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
22720 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
22730 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
22740 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
22750 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
22760 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
22770 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
22780 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
22790 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
227a0 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54  wDelete(Parse*,T
227b0 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
227c0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
227d0 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  8,u8,u8);.void s
227e0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
227f0 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
22800 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22810 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
22820 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
22830 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
22840 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
22850 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
22860 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
22870 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
22880 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
22890 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
228a0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
228b0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
228c0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
228d0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
228e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22900 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
22910 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
22920 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
22930 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
22940 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
22950 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
22960 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
22970 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
22980 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22990 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20   int, int, u8*, 
229a0 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
229b0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
229c0 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
229d0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
229e0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
229f0 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
22a00 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
22a10 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
22a20 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
22a30 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
22a40 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
22a50 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20  , i8, u8);.void 
22a60 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e  sqlite3UniqueCon
22a70 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
22a80 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  int, Index*);.vo
22a90 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43  id sqlite3RowidC
22aa0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
22ab0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a  , int, Table*);.
22ac0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
22ad0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
22ae0 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
22af0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
22b00 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
22b10 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
22b20 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
22b30 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
22b40 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
22b50 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
22b60 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
22b70 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
22b80 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
22b90 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
22ba0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76  ,Select*,int);.v
22bb0 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
22bc0 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
22bd0 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
22be0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
22bf0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
22c00 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22c10 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
22c20 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
22c30 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
22c40 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
22c50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22c60 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
22c70 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
22c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
22c90 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
22ca0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
22cb0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
22cc0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
22cd0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
22ce0 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
22cf0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
22d00 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
22d10 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
22d20 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
22d30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
22d40 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
22d50 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
22d60 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
22d70 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
22d80 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
22d90 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
22da0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
22db0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
22dc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
22dd0 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
22de0 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
22df0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
22e00 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
22e30 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
22e40 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
22e50 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
22e60 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
22e70 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
22e80 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
22e90 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
22ea0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22eb0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
22ec0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
22ed0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
22ee0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
22ef0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
22f00 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
22f10 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
22f20 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
22f30 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
22f40 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
22f50 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22f60 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
22f70 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
22f80 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
22f90 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
22fc0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
22fd0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
22fe0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
22ff0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
23000 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
23010 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
23020 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
23030 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
23040 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
23050 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
23060 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
23070 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
23080 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
23090 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
230a0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
230b0 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
230c0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
230d0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
230e0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
230f0 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
23100 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
23110 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
23140 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
23150 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
23160 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
23170 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
23180 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
23190 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
231a0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
231b0 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
231c0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
231d0 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
231e0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
231f0 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
23200 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
23210 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
23220 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
23230 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
23240 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
23250 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
23260 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
23270 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
23280 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
23290 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
232a0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
232b0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
232c0 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
232d0 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65  plevel : (p)).#e
232e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
232f0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
23300 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
23310 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
23320 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
23330 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23340 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
23350 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
23360 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
23370 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
23380 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
23390 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
233a0 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
233b0 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
233c0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
233d0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
233e0 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
233f0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
23400 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
23410 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
23420 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
23430 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
23440 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
23450 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
23460 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
23470 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
23480 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
23490 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
234a0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
234b0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
234c0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
234d0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
234e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
234f0 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
23500 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
23510 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23520 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
23530 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
23540 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
23550 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
23560 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
23570 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
23580 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
23590 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
235a0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
235b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
235c0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
235d0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
235e0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
235f0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
23600 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
23610 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
23620 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
23630 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
23640 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
23650 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
23660 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
23670 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
23680 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
23690 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
236a0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
236b0 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
236c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
236d0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
236e0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
236f0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
23700 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
23710 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
23720 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
23730 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
23740 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
23750 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
23760 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
23770 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
23780 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
23790 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
237a0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
237b0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
237c0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
237d0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
237e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
237f0 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
23800 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
23810 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
23820 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
23830 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
23840 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
23850 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
23860 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
23870 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
23880 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
23890 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
238a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
238b0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
238c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
238d0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
238e0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
238f0 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
23900 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
23910 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
23920 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
23930 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
23940 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
23950 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
23960 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
23970 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
23980 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
23990 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
239a0 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
239b0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
239c0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
239d0 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
239e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
239f0 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
23a00 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
23a10 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
23a20 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c  ;.#endif.u64 sql
23a30 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
23a40 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  LogEst);../*.** 
23a50 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
23a60 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
23a70 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
23a80 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
23a90 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
23aa0 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
23ab0 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
23ac0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
23ad0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
23ae0 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
23af0 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
23b00 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
23b10 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
23b20 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
23b30 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
23b40 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
23b50 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
23b60 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
23b70 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
23b80 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
23b90 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
23ba0 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
23bb0 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
23bc0 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
23bd0 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
23be0 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
23bf0 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
23c00 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
23c10 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
23c20 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
23c30 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
23c40 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
23c50 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
23c60 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
23c70 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
23c80 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
23c90 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
23ca0 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
23cb0 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
23cc0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
23cd0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
23ce0 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
23cf0 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
23d00 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
23d10 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
23d20 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
23d30 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
23d40 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
23d50 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
23d60 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
23d70 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
23d80 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
23d90 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
23da0 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
23db0 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
23dc0 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28  e3TableAffinity(
23dd0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
23de0 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
23df0 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
23e00 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
23e10 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
23e20 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
23e30 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
23e40 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
23e50 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
23e60 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
23e70 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
23e80 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
23e90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
23ea0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
23eb0 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
23ec0 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
23ed0 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
23ee0 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
23ef0 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
23f00 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
23f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23f20 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
23f30 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
23f40 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
23f50 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
23f60 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
23f70 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
23f80 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
23f90 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
23fa0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
23fb0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
23fc0 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
23fd0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 0a 63  (SQLITE_TEST) .c
23fe0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
23ff0 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a  e3ErrName(int);.
24000 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
24010 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
24020 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
24030 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
24040 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
24050 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
24060 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
24070 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
24080 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c   char*,int);.Col
24090 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
240a0 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
240b0 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
240c0 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
240d0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
240e0 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
240f0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
24100 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  xpr);.Expr *sqli
24110 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
24120 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
24130 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
24140 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
24150 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
24160 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
24170 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
24180 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
24190 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
241a0 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
241b0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
241c0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
241d0 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
241e0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
241f0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
24200 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
24210 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
24220 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
24230 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
24240 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
24250 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
24260 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
24270 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
24280 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
24290 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
242a0 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
242b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
242c0 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
242d0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
242e0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
242f0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
24300 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24310 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
24320 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
24330 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
24340 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
24350 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
24360 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
24370 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
24380 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
24390 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
243a0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
243b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
243c0 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
243d0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
243e0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24400 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
24410 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
24420 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
24430 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
24440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
24450 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
24460 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
24470 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
24480 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
24490 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
244a0 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
244b0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
244c0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
244d0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
244e0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
244f0 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
24500 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
24510 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24520 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
24530 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
24540 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
24550 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
24560 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
24570 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
24580 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
24590 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
245a0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
245b0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
245c0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
245d0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
245e0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
245f0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
24600 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
24610 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
24620 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
24630 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
24640 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
24650 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
24660 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
24670 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
24680 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
24690 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
246a0 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
246b0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
246c0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
246d0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
246e0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
246f0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
24700 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24710 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
24720 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
24730 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
24740 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
24750 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
24760 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
24770 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
24780 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
24790 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
247a0 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
247b0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
247c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
247d0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
247e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
247f0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
24800 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
24810 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
24820 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
24830 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
24840 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
24850 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24860 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
24870 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
24880 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
24890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
248a0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
248b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
248c0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
248d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
248e0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
248f0 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
24900 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
24910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24920 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
24930 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
24940 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
24950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
24960 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
24970 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
24980 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
24990 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
249a0 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
249b0 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
249c0 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
249d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
249e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
249f0 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
24a00 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
24a10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24a20 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
24a30 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
24a40 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
24a50 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
24a60 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
24a70 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
24a80 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
24a90 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
24aa0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
24ab0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
24ac0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
24ad0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
24ae0 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
24af0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
24b00 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
24b10 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
24b20 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
24b30 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
24b40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24b50 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
24b60 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
24b70 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
24b80 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
24b90 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
24ba0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
24bb0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
24bc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
24bd0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
24be0 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
24bf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24c00 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
24c10 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
24c20 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
24c30 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
24c40 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
24c50 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
24c60 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
24c70 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
24c80 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
24c90 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
24ca0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
24cb0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
24cc0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
24cd0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
24ce0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
24cf0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
24d00 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
24d10 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
24d20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
24d30 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
24d40 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
24d50 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
24d60 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
24d70 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
24d80 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
24d90 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
24da0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
24db0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
24dc0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
24dd0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
24de0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
24df0 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
24e00 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
24e10 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
24e20 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
24e30 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
24e40 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
24e50 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
24e60 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
24e70 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
24e80 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
24e90 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
24ea0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
24eb0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
24ec0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
24ed0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
24ee0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
24ef0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
24f00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
24f10 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
24f20 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
24f30 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
24f40 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
24f50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
24f60 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
24f70 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
24f80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24f90 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
24fa0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
24fb0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
24fc0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
24fd0 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
24fe0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
24ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25000 70 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 63  ppendSpace(StrAc
25010 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  cum*,int);.char 
25020 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
25030 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
25040 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25050 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
25060 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
25070 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
25080 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
25090 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
250a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
250b0 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
250c0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
250d0 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
250e0 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
250f0 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
25100 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
25110 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
25120 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
25130 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
25140 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
25150 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
25160 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
25170 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
25180 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
25190 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
251a0 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
251b0 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
251c0 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
251d0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  ,u8,int,int*);.i
251e0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
251f0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
25200 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
25210 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
25220 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25230 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
25240 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
25250 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
25260 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
25270 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
25280 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
25290 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  alue**);.#endif.
252a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
252b0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
252c0 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
252d0 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
252e0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
252f0 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29  oid*(*)(size_t))
25300 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
25310 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
25320 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
25330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
25340 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ser(void*, int, 
25350 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a  Token, Parse*);.
25360 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
25370 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
25380 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
25390 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
253a0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
253b0 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
253c0 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
253d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
253e0 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
253f0 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
25400 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
25410 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
25420 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
25430 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
25440 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
25450 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25460 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
25470 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
25480 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
25490 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
254a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
254b0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
254c0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
254d0 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
254e0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
254f0 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
25500 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
25510 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
25520 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
25530 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
25540 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
25550 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
25560 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
25570 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
25580 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
25590 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
255a0 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
255b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
255c0 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
255d0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
255e0 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
255f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25600 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65  abLock(X) .#  de
25610 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
25620 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
25630 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
25640 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
25650 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25660 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
25670 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
25680 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
25690 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
256a0 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
256b0 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
256c0 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
256d0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
256e0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
256f0 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
25700 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
25710 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
25720 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
25730 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
25740 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
25750 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
25760 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
25770 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
25780 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
25790 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
257a0 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
257b0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
257c0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
257d0 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
257e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
257f0 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
25800 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
25810 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
25820 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
25830 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
25840 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
25850 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
25860 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
25870 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
25880 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
25890 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20  3*, Table*);.#  
258a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
258b0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
258c0 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
258d0 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
258e0 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  0).#endif.void s
258f0 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
25900 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
25910 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
25920 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
25930 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
25940 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
25950 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25960 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61  ite3VtabFinishPa
25970 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
25980 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25990 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72  3VtabArgInit(Par
259a0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
259b0 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28  e3VtabArgExtend(
259c0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
259d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
259e0 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74  CallCreate(sqlit
259f0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
25a00 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29  char *, char **)
25a10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
25a20 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72  bCallConnect(Par
25a30 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e  se*, Table*);.in
25a40 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
25a50 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33  lDestroy(sqlite3
25a60 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
25a70 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
25a80 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69  e3VtabBegin(sqli
25a90 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29  te3 *, VTable *)
25aa0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
25ab0 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75  e3VtabOverloadFu
25ac0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a  nction(sqlite3 *
25ad0 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e  ,FuncDef*, int n
25ae0 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  Arg, Expr*);.voi
25af0 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64  d sqlite3Invalid
25b00 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
25b10 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
25b20 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
25b30 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
25b40 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74  lite3StmtCurrent
25b50 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Time(sqlite3_con
25b60 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
25b70 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
25b80 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
25b90 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
25ba0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
25bb0 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
25bc0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
25bd0 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69  te3_stmt *);.voi
25be0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52  d sqlite3ParserR
25bf0 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e  eset(Parse*);.in
25c00 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  t sqlite3Reprepa
25c10 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20  re(Vdbe*);.void 
25c20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
25c30 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65  heckLength(Parse
25c40 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
25c50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c  nst char*);.Coll
25c60 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61  Seq *sqlite3Bina
25c70 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71  ryCompareCollSeq
25c80 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
25c90 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73  , Expr *);.int s
25ca0 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f  qlite3TempInMemo
25cb0 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  ry(const sqlite3
25cc0 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
25cd0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
25ce0 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66  dename(int);.#if
25cf0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25d00 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74  _WAL.  int sqlit
25d10 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c  e3Checkpoint(sql
25d20 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
25d30 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20   int*, int*);.  
25d40 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65  int sqlite3WalDe
25d50 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c  faultHook(void*,
25d60 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25d70 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  har*,int);.#endi
25d80 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
25d90 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68  _OMIT_CTE.  With
25da0 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64   *sqlite3WithAdd
25db0 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f  (Parse*,With*,To
25dc0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
25dd0 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20  elect*);.  void 
25de0 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74  sqlite3WithDelet
25df0 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a  e(sqlite3*,With*
25e00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25e10 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a  3WithPush(Parse*
25e20 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65  , With*, u8);.#e
25e30 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
25e40 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c  te3WithPush(x,y,
25e50 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  z).#define sqlit
25e60 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79  e3WithDelete(x,y
25e70 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63  ).#endif../* Dec
25e80 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
25e90 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
25ea0 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
25eb0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
25ec0 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
25ed0 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
25ee0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
25ef0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
25f00 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
25f10 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
25f20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
25f30 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
25f40 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
25f50 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
25f60 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
25f70 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
25f80 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
25f90 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
25fa0 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
25fb0 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
25fc0 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
25fd0 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65  y is .** provide
25fe0 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
25ff0 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
26000 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
26010 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
26020 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
26030 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26040 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
26050 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26060 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
26070 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
26080 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
26090 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
260a0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
260b0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
260c0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
260d0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
260e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
260f0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
26100 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
26110 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
26120 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
26130 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
26140 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
26150 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
26160 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
26170 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
26180 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
26190 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
261a0 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
261b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
261c0 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
261d0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
261e0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
261f0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
26200 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
26210 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
26220 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
26230 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
26240 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
26250 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
26260 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
26270 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
26280 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
26290 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
262a0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
262b0 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65  sqlite3 *, Table
262c0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
262d0 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50  3FkLocateIndex(P
262e0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65  arse*,Table*,FKe
262f0 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a  y*,Index**,int**
26300 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
26310 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  ne sqlite3FkDele
26320 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e  te(a,b).  #defin
26330 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  e sqlite3FkLocat
26340 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65  eIndex(a,b,c,d,e
26350 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
26360 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
26370 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
26380 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
26390 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
263a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
263b0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
263c0 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
263d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
263e0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
263f0 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
26400 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
26410 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75   the code in fau
26420 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64  lt.c used for id
26430 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67  entifying "benig
26440 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69  n".** malloc fai
26450 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f  lures. This is o
26460 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53  nly present if S
26470 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
26480 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f  IN_TEST.** is no
26490 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69  t defined..*/.#i
264a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
264b0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
264c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
264d0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  inBenignMalloc(v
264e0 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  oid);.  void sql
264f0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
26500 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  loc(void);.#else
26510 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26520 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
26530 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20  loc().  #define 
26540 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
26550 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a  Malloc().#endif.
26560 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72  ./*.** Allowed r
26570 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
26580 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  m sqlite3FindInI
26590 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  ndex().*/.#defin
265a0 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
265b0 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53          1   /* S
265c0 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20  earch the rowid 
265d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
265e0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
265f0 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20  _EPH          2 
26600 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65    /* Search an e
26610 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20  phemeral b-tree 
26620 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
26630 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20  DEX_INDEX_ASC   
26640 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   3   /* Existing
26650 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47   index ASCENDING
26660 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
26670 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
26680 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    4   /* Existin
26690 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49  g index DESCENDI
266a0 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
266b0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20  _INDEX_NOOP     
266c0 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61      5   /* No ta
266d0 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55  ble available. U
266e0 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a  se comparisons *
266f0 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  /./*.** Allowed 
26700 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72  flags for the 3r
26710 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
26720 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
26730 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  x()..*/.#define 
26740 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b  IN_INDEX_NOOP_OK
26750 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
26760 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f  OK to return IN_
26770 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64  INDEX_NOOP */.#d
26780 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d  efine IN_INDEX_M
26790 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30  EMBERSHIP  0x000
267a0 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  2  /* IN operato
267b0 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65  r used for membe
267c0 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64  rship test */.#d
267d0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c  efine IN_INDEX_L
267e0 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30  OOP        0x000
267f0 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f  4  /* IN operato
26800 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70  r used as a loop
26810 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46   */.int sqlite3F
26820 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
26830 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c   *, Expr *, u32,
26840 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20   int*);..#ifdef 
26850 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
26860 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74  OMIC_WRITE.  int
26870 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
26880 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
26890 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
268a0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
268b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e   int, int);.  in
268c0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
268d0 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
268e0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
268f0 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28  e3JournalCreate(
26900 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
26910 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
26920 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69  urnalExists(sqli
26930 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65  te3_file *p);.#e
26940 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26950 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
26960 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e  (pVfs) ((pVfs)->
26970 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66  szOsFile).  #def
26980 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
26990 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23 65  alExists(p) 1.#e
269a0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
269b0 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
269c0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
269d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  ;.int sqlite3Mem
269e0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64  JournalSize(void
269f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
26a00 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74  MemJournal(sqlit
26a10 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66  e3_file *);..#if
26a20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
26a30 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20  _DEPTH>0.  void 
26a40 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
26a50 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61 72  ight(Parse *pPar
26a60 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20  se, Expr *p);.  
26a70 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
26a80 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
26a90 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
26aa0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
26ab0 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
26ac0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
26ad0 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  e sqlite3ExprSet
26ae0 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64  Height(x,y).  #d
26af0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
26b00 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
26b10 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
26b20 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
26b30 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
26b40 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
26b50 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
26b60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
26b70 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
26b80 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26b90 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
26ba0 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
26bb0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
26bc0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
26bd0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
26be0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
26bf0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
26c00 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
26c10 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
26c20 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
26c30 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
26c40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
26c50 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
26c60 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
26c70 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
26c80 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
26c90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
26ca0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
26cb0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
26cc0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
26ce0 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
26cf0 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
26d00 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
26d10 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
26d20 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
26d30 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
26d40 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
26d50 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
26d60 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
26d70 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
26d80 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
26d90 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
26da0 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  . .*/.#ifdef SQL
26db0 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
26dc0 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
26dd0 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
26de0 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
26df0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
26e00 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
26e10 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
26e20 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58  dbe*);.SQLITE_EX
26e30 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69  TERN void (*sqli
26e40 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
26e50 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
26e60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
26e70 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
26e80 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
26e90 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
26ea0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
26eb0 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
26ec0 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
26ed0 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
26ee0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
26ef0 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
26f00 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
26f10 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
26f20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
26f30 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
26f40 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
26f50 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
26f60 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
26f70 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
26f80 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
26f90 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
26fa0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
26fb0 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
26fc0 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
26fd0 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
26fe0 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
26ff0 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
27000 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
27010 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
27020 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
27030 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
27040 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
27050 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
27060 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
27070 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
27080 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
27090 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
270a0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
270b0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
270c0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
270d0 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
270e0 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
270f0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
27100 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
27110 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
27120 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
27130 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
27140 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
27150 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
27160 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
27170 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
27180 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
27190 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
271a0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
271b0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
271c0 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
271d0 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
271e0 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
271f0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
27200 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
27210 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
27220 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
27230 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
27240 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
27250 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
27260 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
27270 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
27280 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
27290 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
272a0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
272b0 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
272c0 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
272d0 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
272e0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
272f0 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
27300 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
27310 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
27320 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
27330 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
27340 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
27350 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
27360 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
27370 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
27380 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
27390 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
273a0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
273b0 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
273c0 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
273d0 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
273e0 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
273f0 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
27400 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
27410 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
27420 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
27430 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
27440 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
27450 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
27460 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
27470 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
27480 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
27490 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
274a0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
274b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
274c0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
274d0 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
274e0 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
274f0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
27500 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
27510 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
27520 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
27530 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
27540 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
27550 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
27560 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
27570 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
27580 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
27590 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
275a0 32 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65  2  /* Might have
275b0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
275c0 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e  memory */.#defin
275d0 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43  e MEMTYPE_SCRATC
275e0 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63  H    0x04  /* Sc
275f0 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e  ratch allocation
27600 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
27610 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
27620 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61  0x08  /* Page ca
27630 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
27640 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
27650 50 45 5f 44 42 20 20 20 20 20 20 20 20 20 30 78  PE_DB         0x
27660 31 30 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69  10  /* Uses sqli
27670 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74  te3DbMalloc, not
27680 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a   sqlite_malloc *
27690 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
276a0 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
276b0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
276c0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
276d0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
276e0 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
276f0 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
27700 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
27710 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
27720 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
27730 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
27740 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
27750 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.