/ Hex Artifact Content
Login

Artifact c8d0e5ce27a862836de70fc3eadc1e65cea7e3d8:


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 2a 20 40 28 23 29 20  ite..**.** @(#) 
01b0: 24 49 64 3a 20 73 71 6c 69 74 65 49 6e 74 2e 68  $Id: sqliteInt.h
01c0: 2c 76 20 31 2e 35 34 37 20 32 30 30 37 2f 30 33  ,v 1.547 2007/03
01d0: 2f 32 39 20 30 35 3a 35 31 3a 34 39 20 64 72 68  /29 05:51:49 drh
01e0: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 66 6e 64 65   Exp $.*/.#ifnde
01f0: 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 0a  f _SQLITEINT_H_.
0200: 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45 49  #define _SQLITEI
0210: 4e 54 5f 48 5f 0a 0a 23 69 66 20 64 65 66 69 6e  NT_H_..#if defin
0220: 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c  ed(SQLITE_TCL) |
0230: 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29  | defined(TCLSH)
0240: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e  .# include <tcl.
0250: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
0260: 20 4d 61 6e 79 20 70 65 6f 70 6c 65 20 61 72 65   Many people are
0270: 20 66 61 69 6c 69 6e 67 20 74 6f 20 73 65 74 20   failing to set 
0280: 2d 44 4e 44 45 42 55 47 3d 31 20 77 68 65 6e 20  -DNDEBUG=1 when 
0290: 63 6f 6d 70 69 6c 69 6e 67 20 53 51 4c 69 74 65  compiling SQLite
02a0: 2e 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45  ..** Setting NDE
02b0: 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f  BUG makes the co
02c0: 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 72  de smaller and r
02d0: 75 6e 20 66 61 73 74 65 72 2e 20 20 53 6f 20 74  un faster.  So t
02e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
02f0: 6c 69 6e 65 73 20 61 72 65 20 61 64 64 65 64 20  lines are added 
0300: 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
0310: 20 73 65 74 20 4e 44 45 42 55 47 20 75 6e 6c 65   set NDEBUG unle
0320: 73 73 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ss the -DSQLITE_
0330: 44 45 42 55 47 3d 31 0a 2a 2a 20 6f 70 74 69 6f  DEBUG=1.** optio
0340: 6e 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20  n is set.  Thus 
0350: 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61  NDEBUG becomes a
0360: 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20  n opt-in rather 
0370: 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a  than an opt-out.
0380: 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23  ** feature..*/.#
0390: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
03a0: 55 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UG) && !defined(
03b0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23  SQLITE_DEBUG) .#
03c0: 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31   define NDEBUG 1
03d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
03e0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
03f0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
0400: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
0410: 20 50 6f 73 69 78 20 69 66 20 74 68 65 0a 2a 2a   Posix if the.**
0420: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0430: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0440: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0450: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0460: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0470: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0480: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0490: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
04a0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
04b0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
04c0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
04d0: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
04e0: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
04f0: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0500: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0510: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0520: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0530: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0540: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0550: 65 20 28 65 78 3a 20 52 65 64 48 61 74 20 37 2e  e (ex: RedHat 7.
0560: 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74 20  2) but you want 
0570: 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f 72  your code to wor
0580: 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72  k.** on an older
0590: 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65   machine (ex: Re
05a0: 64 48 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79  dHat 6.0).  If y
05b0: 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65  ou compile on Re
05c0: 64 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68  dHat 7.2.** with
05d0: 6f 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c  out this option,
05e0: 20 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20   LFS is enable. 
05f0: 20 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f   But LFS does no
0600: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b  t exist in the k
0610: 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 48  ernel.** in RedH
0620: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0630: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0640: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0650: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0660: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0670: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0680: 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20  *.** Similar is 
0690: 74 72 75 65 20 66 6f 72 20 4d 61 63 4f 53 2e 20  true for MacOS. 
06a0: 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70   LFS is only sup
06b0: 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 4f 53 20  ported on MacOS 
06c0: 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  9 and later..*/.
06d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
06e0: 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66  ISABLE_LFS.# def
06f0: 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20  ine _LARGE_FILE 
0700: 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66        1.# ifndef
0710: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0720: 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46  TS.#   define _F
0730: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0740: 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  64.# endif.# def
0750: 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53  ine _LARGEFILE_S
0760: 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a  OURCE 1.#endif..
0770: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0780: 33 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 68  3.h".#include "h
0790: 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ash.h".#include 
07a0: 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75  "parse.h".#inclu
07b0: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
07c0: 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e  clude <stdlib.h>
07d0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e  .#include <strin
07e0: 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61  g.h>.#include <a
07f0: 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  ssert.h>.#includ
0800: 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a  e <stddef.h>../*
0810: 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67  .** If compiling
0820: 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72   for a processor
0830: 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61   that lacks floa
0840: 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f  ting point suppo
0850: 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74  rt,.** substitut
0860: 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c  e integer for fl
0870: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a  oating-point.*/.
0880: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
0890: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
08a0: 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c  T.# define doubl
08b0: 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  e sqlite_int64.#
08c0: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
08d0: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
08e0: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
08f0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
0900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
0910: 49 47 5f 44 42 4c 20 28 30 78 37 66 66 66 66 66  IG_DBL (0x7fffff
0920: 66 66 66 66 66 66 66 66 66 66 29 0a 23 20 65 6e  ffffffffff).# en
0930: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
0940: 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d  ITE_OMIT_DATETIM
0950: 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69  E_FUNCS 1.# defi
0960: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ne SQLITE_OMIT_T
0970: 52 41 43 45 20 31 0a 23 65 6e 64 69 66 0a 23 69  RACE 1.#endif.#i
0980: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
0990: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
09a0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
09b0: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
09c0: 2a 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  * The maximum nu
09d0: 6d 62 65 72 20 6f 66 20 69 6e 2d 6d 65 6d 6f 72  mber of in-memor
09e0: 79 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 66  y pages to use f
09f0: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
0a00: 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  base.** table an
0a10: 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
0a20: 74 61 62 6c 65 73 2e 20 49 6e 74 65 72 6e 61 6c  tables. Internal
0a30: 6c 79 2c 20 74 68 65 20 4d 41 58 5f 50 41 47 45  ly, the MAX_PAGE
0a40: 53 20 61 6e 64 20 0a 2a 2a 20 54 45 4d 50 5f 50  S and .** TEMP_P
0a50: 41 47 45 53 20 6d 61 63 72 6f 73 20 61 72 65 20  AGES macros are 
0a60: 75 73 65 64 2e 20 54 6f 20 6f 76 65 72 72 69 64  used. To overrid
0a70: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  e the default va
0a80: 6c 75 65 73 20 61 74 0a 2a 2a 20 63 6f 6d 70 69  lues at.** compi
0a90: 6c 61 74 69 6f 6e 20 74 69 6d 65 2c 20 74 68 65  lation time, the
0aa0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
0ab0: 43 41 43 48 45 5f 53 49 5a 45 20 61 6e 64 20 0a  CACHE_SIZE and .
0ac0: 2a 2a 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ** SQLITE_DEFAUL
0ad0: 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a  T_TEMP_CACHE_SIZ
0ae0: 45 20 6d 61 63 72 6f 73 20 73 68 6f 75 6c 64 20  E macros should 
0af0: 62 65 20 73 65 74 2e 0a 2a 2f 0a 23 69 66 64 65  be set..*/.#ifde
0b00: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
0b10: 5f 43 41 43 48 45 5f 53 49 5a 45 0a 23 20 64 65  _CACHE_SIZE.# de
0b20: 66 69 6e 65 20 4d 41 58 5f 50 41 47 45 53 20 53  fine MAX_PAGES S
0b30: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41  QLITE_DEFAULT_CA
0b40: 43 48 45 5f 53 49 5a 45 0a 23 65 6c 73 65 0a 23  CHE_SIZE.#else.#
0b50: 20 64 65 66 69 6e 65 20 4d 41 58 5f 50 41 47 45   define MAX_PAGE
0b60: 53 20 20 20 32 30 30 30 0a 23 65 6e 64 69 66 0a  S   2000.#endif.
0b70: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
0b80: 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45  FAULT_TEMP_CACHE
0b90: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 54  _SIZE.# define T
0ba0: 45 4d 50 5f 50 41 47 45 53 20 53 51 4c 49 54 45  EMP_PAGES SQLITE
0bb0: 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41  _DEFAULT_TEMP_CA
0bc0: 43 48 45 5f 53 49 5a 45 0a 23 65 6c 73 65 0a 23  CHE_SIZE.#else.#
0bd0: 20 64 65 66 69 6e 65 20 54 45 4d 50 5f 50 41 47   define TEMP_PAG
0be0: 45 53 20 20 20 35 30 30 0a 23 65 6e 64 69 66 0a  ES   500.#endif.
0bf0: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
0c00: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
0c10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
0c20: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
0c30: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
0c40: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
0c50: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
0c60: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
0c70: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
0c80: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
0c90: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
0ca0: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
0cb0: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
0cc0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0cd0: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
0ce0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
0cf0: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
0d00: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
0d10: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
0d20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
0d30: 72 6f 20 69 73 20 73 65 74 20 74 6f 20 31 2c 20  ro is set to 1, 
0d40: 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73  then NULL values
0d50: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a   are considered.
0d60: 2a 2a 20 64 69 73 74 69 6e 63 74 20 77 68 65 6e  ** distinct when
0d70: 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 77 68 65   determining whe
0d80: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 77 6f 20  ther or not two 
0d90: 65 6e 74 72 69 65 73 20 61 72 65 20 74 68 65 20  entries are the 
0da0: 73 61 6d 65 0a 2a 2a 20 69 6e 20 61 20 55 4e 49  same.** in a UNI
0db0: 51 55 45 20 69 6e 64 65 78 2e 20 20 54 68 69 73  QUE index.  This
0dc0: 20 69 73 20 74 68 65 20 77 61 79 20 50 6f 73 74   is the way Post
0dd0: 67 72 65 53 51 4c 2c 20 4f 72 61 63 6c 65 2c 20  greSQL, Oracle, 
0de0: 44 42 32 2c 20 4d 79 53 51 4c 2c 0a 2a 2a 20 4f  DB2, MySQL,.** O
0df0: 43 45 4c 4f 54 2c 20 61 6e 64 20 46 69 72 65 62  CELOT, and Fireb
0e00: 69 72 64 20 61 6c 6c 20 77 6f 72 6b 2e 20 20 54  ird all work.  T
0e10: 68 65 20 53 51 4c 39 32 20 73 70 65 63 20 65 78  he SQL92 spec ex
0e20: 70 6c 69 63 69 74 6c 79 20 73 61 79 73 20 74 68  plicitly says th
0e30: 69 73 0a 2a 2a 20 69 73 20 74 68 65 20 77 61 79  is.** is the way
0e40: 20 74 68 69 6e 67 73 20 61 72 65 20 73 75 70 70   things are supp
0e50: 6f 73 65 20 74 6f 20 77 6f 72 6b 2e 0a 2a 2a 0a  ose to work..**.
0e60: 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** If the follow
0e70: 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 73 65 74  ing macro is set
0e80: 20 74 6f 20 30 2c 20 74 68 65 20 4e 55 4c 4c 73   to 0, the NULLs
0e90: 20 61 72 65 20 69 6e 64 69 73 74 69 6e 63 74 20   are indistinct 
0ea0: 66 6f 72 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  for.** a UNIQUE 
0eb0: 69 6e 64 65 78 2e 20 20 49 6e 20 74 68 69 73 20  index.  In this 
0ec0: 6d 6f 64 65 2c 20 79 6f 75 20 63 61 6e 20 6f 6e  mode, you can on
0ed0: 6c 79 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65  ly have a single
0ee0: 20 4e 55 4c 4c 20 65 6e 74 72 79 0a 2a 2a 20 66   NULL entry.** f
0ef0: 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  or a column decl
0f00: 61 72 65 64 20 55 4e 49 51 55 45 2e 20 20 54 68  ared UNIQUE.  Th
0f10: 69 73 20 69 73 20 74 68 65 20 77 61 79 20 49 6e  is is the way In
0f20: 66 6f 72 6d 69 78 20 61 6e 64 20 53 51 4c 20 53  formix and SQL S
0f30: 65 72 76 65 72 0a 2a 2a 20 77 6f 72 6b 2e 0a 2a  erver.** work..*
0f40: 2f 0a 23 64 65 66 69 6e 65 20 4e 55 4c 4c 5f 44  /.#define NULL_D
0f50: 49 53 54 49 4e 43 54 5f 46 4f 52 5f 55 4e 49 51  ISTINCT_FOR_UNIQ
0f60: 55 45 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  UE 1../*.** The 
0f70: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
0f80: 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  f attached datab
0f90: 61 73 65 73 2e 20 20 54 68 69 73 20 6d 75 73 74  ases.  This must
0fa0: 20 62 65 20 61 74 20 6c 65 61 73 74 20 32 0a 2a   be at least 2.*
0fb0: 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75  * in order to su
0fc0: 70 70 6f 72 74 20 74 68 65 20 6d 61 69 6e 20 64  pport the main d
0fd0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 28 30 29  atabase file (0)
0fe0: 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20 75 73   and the file us
0ff0: 65 64 20 74 6f 0a 2a 2a 20 68 6f 6c 64 20 74 65  ed to.** hold te
1000: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 28  mporary tables (
1010: 31 29 2e 20 20 41 6e 64 20 69 74 20 6d 75 73 74  1).  And it must
1020: 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 33 32   be less than 32
1030: 20 62 65 63 61 75 73 65 0a 2a 2a 20 77 65 20 75   because.** we u
1040: 73 65 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  se a bitmask of 
1050: 64 61 74 61 62 61 73 65 73 20 77 69 74 68 20 61  databases with a
1060: 20 75 33 32 20 69 6e 20 70 6c 61 63 65 73 20 28   u32 in places (
1070: 66 6f 72 20 65 78 61 6d 70 6c 65 0a 2a 2a 20 74  for example.** t
1080: 68 65 20 50 61 72 73 65 2e 63 6f 6f 6b 69 65 4d  he Parse.cookieM
1090: 61 73 6b 20 66 69 65 6c 64 29 2e 0a 2a 2f 0a 23  ask field)..*/.#
10a0: 64 65 66 69 6e 65 20 4d 41 58 5f 41 54 54 41 43  define MAX_ATTAC
10b0: 48 45 44 20 31 30 0a 0a 2f 2a 0a 2a 2a 20 54 68  HED 10../*.** Th
10c0: 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
10d0: 6f 66 20 61 20 3f 6e 6e 6e 20 77 69 6c 64 63 61  of a ?nnn wildca
10e0: 72 64 20 74 68 61 74 20 74 68 65 20 70 61 72 73  rd that the pars
10f0: 65 72 20 77 69 6c 6c 20 61 63 63 65 70 74 2e 0a  er will accept..
1100: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1110: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
1120: 55 4d 42 45 52 20 39 39 39 0a 0a 2f 2a 0a 2a 2a  UMBER 999../*.**
1130: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
1140: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
1150: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
1160: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
1170: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
1180: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
1190: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
11a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
11b0: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
11c0: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
11d0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
11e0: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
11f0: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
1200: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
1210: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
1220: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
1230: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
1240: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
1250: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
1260: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
1270: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1280: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 31  LT_FILE_FORMAT 1
1290: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
12a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
12b0: 20 76 61 6c 75 65 20 66 6f 72 20 54 45 4d 50 5f   value for TEMP_
12c0: 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74  STORE in case it
12d0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
12e0: 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  d.** on the comm
12f0: 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e  and-line.*/.#ifn
1300: 64 65 66 20 54 45 4d 50 5f 53 54 4f 52 45 0a 23  def TEMP_STORE.#
1310: 20 64 65 66 69 6e 65 20 54 45 4d 50 5f 53 54 4f   define TEMP_STO
1320: 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RE 1.#endif../*.
1330: 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20  ** GCC does not 
1340: 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65  define the offse
1350: 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77  tof() macro so w
1360: 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20  e'll have to do 
1370: 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e  it.** ourselves.
1380: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73  .*/.#ifndef offs
1390: 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66  etof.#define off
13a0: 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c  setof(STRUCTURE,
13b0: 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63  FIELD) ((int)((c
13c0: 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52  har*)&((STRUCTUR
13d0: 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23  E*)0)->FIELD)).#
13e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  endif../*.** Che
13f0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
1400: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
1410: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
1420: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
1430: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
1440: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
1450: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
1460: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
1470: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
1480: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
1490: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
14a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
14b0: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
14c0: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
14d0: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
14e0: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
14f0: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
1500: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
1510: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
1520: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
1530: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
1540: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
1550: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
1560: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
1570: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
1580: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
1590: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
15a0: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
15b0: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
15c0: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
15d0: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
15e0: 45 0a 23 20 64 65 66 69 6e 65 20 55 49 4e 54 33  E.# define UINT3
15f0: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
1600: 69 6e 74 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  int.#endif.#ifnd
1610: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
1620: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
1630: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
1640: 72 74 20 69 6e 74 0a 23 65 6e 64 69 66 0a 23 69  rt int.#endif.#i
1650: 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  fndef INT16_TYPE
1660: 0a 23 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  .# define INT16_
1670: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
1680: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
1690: 4e 54 38 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  NT8_TYPE.# defin
16a0: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
16b0: 69 67 6e 65 64 20 63 68 61 72 0a 23 65 6e 64 69  igned char.#endi
16c0: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
16d0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 49 4e 54  YPE.# define INT
16e0: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
16f0: 61 72 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  ar.#endif.#ifnde
1700: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
1710: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
1720: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
1730: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
1740: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
1750: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
1760: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
1770: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
1780: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
1790: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
17a0: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
17b0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
17c0: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
17d0: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
17e0: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
17f0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
1800: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
1810: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
1820: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
1830: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
1840: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
1850: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
1860: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
1870: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
1880: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
1890: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
18a0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
18b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
18c0: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
18d0: 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20  PE i8;          
18e0: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
18f0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
1900: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
1910: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
1920: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
1930: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
1940: 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61  ndian,.** evalua
1950: 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  ted at runtime..
1960: 2a 2f 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  */.extern const 
1970: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
1980: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42  #define SQLITE_B
1990: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
19a0: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
19b0: 6e 65 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  ne)==0).#define 
19c0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
19d0: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
19e0: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
19f0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1a00: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1a10: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1a20: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1a30: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
1a40: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
1a50: 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68  a given sqlite h
1a60: 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  andle. .**.** Th
1a70: 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  e sqlite.busyHan
1a80: 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74  dler member of t
1a90: 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74  he sqlite struct
1aa0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75   contains the bu
1ab0: 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  sy.** callback f
1ac0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1ad0: 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67  handle. Each pag
1ae0: 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68  er opened via th
1af0: 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64  e sqlite.** hand
1b00: 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70  le is passed a p
1b10: 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
1b20: 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68  .busyHandler. Th
1b30: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
1b40: 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75  * callback is cu
1b50: 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20  rrently invoked 
1b60: 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e  only from within
1b70: 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70   pager.c..*/.typ
1b80: 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79  edef struct Busy
1b90: 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64  Handler BusyHand
1ba0: 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79  ler;.struct Busy
1bb0: 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20  Handler {.  int 
1bc0: 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c  (*xFunc)(void *,
1bd0: 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75  int);  /* The bu
1be0: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
1bf0: 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20   void *pArg;    
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1c10: 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73 79  irst arg to busy
1c20: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69   callback */.  i
1c30: 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20  nt nBusy;       
1c40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63            /* Inc
1c50: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
1c60: 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a  ch busy call */.
1c70: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  };../*.** Defer 
1c80: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
1c90: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
1ca0: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
1cb0: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
1cc0: 6e 64 6c 65 72 20 74 79 70 65 64 65 66 73 2e 0a  ndler typedefs..
1cd0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  */.#include "vdb
1ce0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 62  e.h".#include "b
1cf0: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
1d00: 20 22 70 61 67 65 72 2e 68 22 0a 0a 23 69 66 64   "pager.h"..#ifd
1d10: 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
1d20: 55 47 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  UG./*.** The fol
1d30: 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61  lowing global va
1d40: 72 69 61 62 6c 65 73 20 61 72 65 20 75 73 65 64  riables are used
1d50: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
1d60: 20 64 65 62 75 67 67 69 6e 67 0a 2a 2a 20 6f 6e   debugging.** on
1d70: 6c 79 2e 20 20 54 68 65 79 20 6f 6e 6c 79 20 77  ly.  They only w
1d80: 6f 72 6b 20 69 66 20 53 51 4c 49 54 45 5f 4d 45  ork if SQLITE_ME
1d90: 4d 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  MDEBUG is define
1da0: 64 2e 0a 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74  d..*/.extern int
1db0: 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63   sqlite3_nMalloc
1dc0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
1dd0: 20 6f 66 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63   of sqliteMalloc
1de0: 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 65 78 74 65  () calls */.exte
1df0: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e  rn int sqlite3_n
1e00: 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Free;        /* 
1e10: 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65  Number of sqlite
1e20: 46 72 65 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  Free() calls */.
1e30: 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1e40: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3b 20  e3_iMallocFail; 
1e50: 20 2f 2a 20 46 61 69 6c 20 73 71 6c 69 74 65 4d   /* Fail sqliteM
1e60: 61 6c 6c 6f 63 28 29 20 61 66 74 65 72 20 74 68  alloc() after th
1e70: 69 73 20 6d 61 6e 79 20 63 61 6c 6c 73 20 2a 2f  is many calls */
1e80: 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
1e90: 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74  te3_iMallocReset
1ea0: 3b 20 2f 2a 20 53 65 74 20 69 4d 61 6c 6c 6f 63  ; /* Set iMalloc
1eb0: 46 61 69 6c 20 74 6f 20 74 68 69 73 20 77 68 65  Fail to this whe
1ec0: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 20 2a  n it reaches 0 *
1ed0: 2f 0a 0a 65 78 74 65 72 6e 20 76 6f 69 64 20 2a  /..extern void *
1ee0: 73 71 6c 69 74 65 33 5f 70 46 69 72 73 74 3b 20  sqlite3_pFirst; 
1ef0: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1f00: 65 72 20 74 6f 20 6c 69 6e 6b 65 64 20 6c 69 73  er to linked lis
1f10: 74 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  t of allocations
1f20: 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73   */.extern int s
1f30: 71 6c 69 74 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63  qlite3_nMaxAlloc
1f40: 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68  ;        /* High
1f50: 20 77 61 74 65 72 20 6d 61 72 6b 20 6f 66 20 54   water mark of T
1f60: 68 72 65 61 64 44 61 74 61 2e 6e 41 6c 6c 6f 63  hreadData.nAlloc
1f70: 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73   */.extern int s
1f80: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69 73  qlite3_mallocDis
1f90: 61 6c 6c 6f 77 65 64 3b 20 2f 2a 20 61 73 73 65  allowed; /* asse
1fa0: 72 74 28 29 20 69 6e 20 73 71 6c 69 74 65 33 4d  rt() in sqlite3M
1fb0: 61 6c 6c 6f 63 28 29 20 69 66 20 73 65 74 20 2a  alloc() if set *
1fc0: 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  /.extern int sql
1fd0: 69 74 65 33 5f 69 73 46 61 69 6c 3b 20 20 20 20  ite3_isFail;    
1fe0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1ff0: 66 20 61 6c 6c 20 6d 61 6c 6c 6f 63 20 63 61 6c  f all malloc cal
2000: 6c 73 20 73 68 6f 75 6c 64 20 66 61 69 6c 20 2a  ls should fail *
2010: 2f 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  /.extern const c
2020: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 7a 46 69  har *sqlite3_zFi
2030: 6c 65 3b 20 20 20 20 2f 2a 20 46 69 6c 65 6e 61  le;    /* Filena
2040: 6d 65 20 74 6f 20 61 73 73 6f 63 69 61 74 65 20  me to associate 
2050: 64 65 62 75 67 20 69 6e 66 6f 20 77 69 74 68 20  debug info with 
2060: 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  */.extern int sq
2070: 6c 69 74 65 33 5f 69 4c 69 6e 65 3b 20 20 20 20  lite3_iLine;    
2080: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 65 20          /* Line 
2090: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 62 75 67  number for debug
20a0: 20 69 6e 66 6f 20 2a 2f 0a 0a 23 64 65 66 69 6e   info */..#defin
20b0: 65 20 45 4e 54 45 52 5f 4d 41 4c 4c 4f 43 20 28  e ENTER_MALLOC (
20c0: 73 71 6c 69 74 65 33 5f 7a 46 69 6c 65 20 3d 20  sqlite3_zFile = 
20d0: 5f 5f 46 49 4c 45 5f 5f 2c 20 73 71 6c 69 74 65  __FILE__, sqlite
20e0: 33 5f 69 4c 69 6e 65 20 3d 20 5f 5f 4c 49 4e 45  3_iLine = __LINE
20f0: 5f 5f 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  __).#define sqli
2100: 74 65 4d 61 6c 6c 6f 63 28 78 29 20 20 20 20 20  teMalloc(x)     
2110: 20 20 20 20 20 28 45 4e 54 45 52 5f 4d 41 4c 4c       (ENTER_MALL
2120: 4f 43 2c 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  OC, sqlite3Mallo
2130: 63 28 78 2c 31 29 29 0a 23 64 65 66 69 6e 65 20  c(x,1)).#define 
2140: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77 28  sqliteMallocRaw(
2150: 78 29 20 20 20 20 20 20 20 28 45 4e 54 45 52 5f  x)       (ENTER_
2160: 4d 41 4c 4c 4f 43 2c 20 73 71 6c 69 74 65 33 4d  MALLOC, sqlite3M
2170: 61 6c 6c 6f 63 52 61 77 28 78 2c 31 29 29 0a 23  allocRaw(x,1)).#
2180: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 52 65 61  define sqliteRea
2190: 6c 6c 6f 63 28 78 2c 79 29 20 20 20 20 20 20 20  lloc(x,y)       
21a0: 28 45 4e 54 45 52 5f 4d 41 4c 4c 4f 43 2c 20 73  (ENTER_MALLOC, s
21b0: 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 78 2c  qlite3Realloc(x,
21c0: 79 29 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  y)).#define sqli
21d0: 74 65 53 74 72 44 75 70 28 78 29 20 20 20 20 20  teStrDup(x)     
21e0: 20 20 20 20 20 28 45 4e 54 45 52 5f 4d 41 4c 4c       (ENTER_MALL
21f0: 4f 43 2c 20 73 71 6c 69 74 65 33 53 74 72 44 75  OC, sqlite3StrDu
2200: 70 28 78 29 29 0a 23 64 65 66 69 6e 65 20 73 71  p(x)).#define sq
2210: 6c 69 74 65 53 74 72 4e 44 75 70 28 78 2c 79 29  liteStrNDup(x,y)
2220: 20 20 20 20 20 20 20 28 45 4e 54 45 52 5f 4d 41         (ENTER_MA
2230: 4c 4c 4f 43 2c 20 73 71 6c 69 74 65 33 53 74 72  LLOC, sqlite3Str
2240: 4e 44 75 70 28 78 2c 79 29 29 0a 23 64 65 66 69  NDup(x,y)).#defi
2250: 6e 65 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63  ne sqliteRealloc
2260: 4f 72 46 72 65 65 28 78 2c 79 29 20 28 45 4e 54  OrFree(x,y) (ENT
2270: 45 52 5f 4d 41 4c 4c 4f 43 2c 20 73 71 6c 69 74  ER_MALLOC, sqlit
2280: 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  e3ReallocOrFree(
2290: 78 2c 79 29 29 0a 0a 23 65 6c 73 65 0a 0a 23 64  x,y))..#else..#d
22a0: 65 66 69 6e 65 20 45 4e 54 45 52 5f 4d 41 4c 4c  efine ENTER_MALL
22b0: 4f 43 20 30 0a 23 64 65 66 69 6e 65 20 73 71 6c  OC 0.#define sql
22c0: 69 74 65 4d 61 6c 6c 6f 63 28 78 29 20 20 20 20  iteMalloc(x)    
22d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 61 6c        sqlite3Mal
22e0: 6c 6f 63 28 78 2c 31 29 0a 23 64 65 66 69 6e 65  loc(x,1).#define
22f0: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77   sqliteMallocRaw
2300: 28 78 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  (x)       sqlite
2310: 33 4d 61 6c 6c 6f 63 52 61 77 28 78 2c 31 29 0a  3MallocRaw(x,1).
2320: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 52 65  #define sqliteRe
2330: 61 6c 6c 6f 63 28 78 2c 79 29 20 20 20 20 20 20  alloc(x,y)      
2340: 20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28   sqlite3Realloc(
2350: 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  x,y).#define sql
2360: 69 74 65 53 74 72 44 75 70 28 78 29 20 20 20 20  iteStrDup(x)    
2370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
2380: 44 75 70 28 78 29 0a 23 64 65 66 69 6e 65 20 73  Dup(x).#define s
2390: 71 6c 69 74 65 53 74 72 4e 44 75 70 28 78 2c 79  qliteStrNDup(x,y
23a0: 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  )       sqlite3S
23b0: 74 72 4e 44 75 70 28 78 2c 79 29 0a 23 64 65 66  trNDup(x,y).#def
23c0: 69 6e 65 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f  ine sqliteReallo
23d0: 63 4f 72 46 72 65 65 28 78 2c 79 29 20 73 71 6c  cOrFree(x,y) sql
23e0: 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65  ite3ReallocOrFre
23f0: 65 28 78 2c 79 29 0a 0a 23 65 6e 64 69 66 0a 0a  e(x,y)..#endif..
2400: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 46 72  #define sqliteFr
2410: 65 65 28 78 29 20 20 20 20 20 20 20 20 20 20 73  ee(x)          s
2420: 71 6c 69 74 65 33 46 72 65 65 58 28 78 29 0a 23  qlite3FreeX(x).#
2430: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 41 6c 6c  define sqliteAll
2440: 6f 63 53 69 7a 65 28 78 29 20 20 20 20 20 73 71  ocSize(x)     sq
2450: 6c 69 74 65 33 41 6c 6c 6f 63 53 69 7a 65 28 78  lite3AllocSize(x
2460: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  ).../*.** An ins
2470: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
2480: 72 75 63 74 75 72 65 20 6d 69 67 68 74 20 62 65  ructure might be
2490: 20 61 6c 6c 6f 63 61 74 65 64 20 74 6f 20 73 74   allocated to st
24a0: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ore information.
24b0: 2a 2a 20 73 70 65 63 69 66 69 63 20 74 6f 20 61  ** specific to a
24c0: 20 73 69 6e 67 6c 65 20 74 68 72 65 61 64 2e 0a   single thread..
24d0: 2a 2f 0a 73 74 72 75 63 74 20 54 68 72 65 61 64  */.struct Thread
24e0: 44 61 74 61 20 7b 0a 20 20 69 6e 74 20 64 75 6d  Data {.  int dum
24f0: 6d 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  my;             
2500: 20 20 2f 2a 20 53 6f 20 74 68 61 74 20 74 68 69    /* So that thi
2510: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 6e  s structure is n
2520: 65 76 65 72 20 65 6d 70 74 79 20 2a 2f 0a 0a 23  ever empty */..#
2530: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2540: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
2550: 45 4d 45 4e 54 0a 20 20 69 6e 74 20 6e 53 6f 66  EMENT.  int nSof
2560: 74 48 65 61 70 4c 69 6d 69 74 3b 20 20 20 20 20  tHeapLimit;     
2570: 20 2f 2a 20 53 75 67 67 65 73 74 65 64 20 6d 61   /* Suggested ma
2580: 78 20 6d 65 6d 20 61 6c 6c 6f 63 61 74 69 6f 6e  x mem allocation
2590: 2e 20 20 4e 6f 20 6c 69 6d 69 74 20 69 66 20 3c  .  No limit if <
25a0: 30 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f  0 */.  int nAllo
25b0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
25c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
25d0: 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 6c  es currently all
25e0: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 50 61 67 65  ocated */.  Page
25f0: 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2600: 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
2610: 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 67 65 72  ist of all pager
2620: 73 20 69 6e 20 74 68 69 73 20 74 68 72 65 61 64  s in this thread
2630: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e   */.#endif..#ifn
2640: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2650: 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 75  SHARED_CACHE.  u
2660: 38 20 75 73 65 53 68 61 72 65 64 44 61 74 61 3b  8 useSharedData;
2670: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
2680: 69 66 20 73 68 61 72 65 64 20 70 61 67 65 72 73  if shared pagers
2690: 20 61 6e 64 20 73 63 68 65 6d 61 73 20 61 72 65   and schemas are
26a0: 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 42 74   enabled */.  Bt
26b0: 53 68 61 72 65 64 20 2a 70 42 74 72 65 65 3b 20  Shared *pBtree; 
26c0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
26d0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 75 72   list of all cur
26e0: 72 65 6e 74 6c 79 20 6f 70 65 6e 20 42 54 72 65  rently open BTre
26f0: 65 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  es */.#endif.};.
2700: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
2710: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
2720: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
2730: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
2740: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
2750: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
2760: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
2770: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
2780: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
2790: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
27a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
27b0: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
27c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
27d0: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
27e0: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
27f0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
2800: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
2810: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
2820: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
2830: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
2840: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
2850: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
2860: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
2870: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
2880: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
2890: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
28a0: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
28b0: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
28c0: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
28d0: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
28e0: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
28f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
2900: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
2910: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
2920: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
2930: 20 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65   (sizeof(X)/size
2940: 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a  of(X[0]))../*.**
2950: 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e   Forward referen
2960: 63 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65  ces to structure
2970: 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  s.*/.typedef str
2980: 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49  uct AggInfo AggI
2990: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
29a0: 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
29b0: 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70  AuthContext;.typ
29c0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
29d0: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
29e0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
29f0: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
2a00: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
2a10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
2a20: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
2a30: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
2a40: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
2a50: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
2a60: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
2a70: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
2a80: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
2a90: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
2aa0: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
2ab0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
2ac0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
2ad0: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
2ae0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
2af0: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
2b00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
2b10: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
2b20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
2b30: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
2b40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
2b50: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
2b60: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
2b70: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
2b80: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
2b90: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
2ba0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
2bb0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
2bc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
2bd0: 54 68 72 65 61 64 44 61 74 61 20 54 68 72 65 61  ThreadData Threa
2be0: 64 44 61 74 61 3b 0a 74 79 70 65 64 65 66 20 73  dData;.typedef s
2bf0: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
2c00: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
2c10: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
2c20: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
2c30: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
2c40: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
2c50: 74 20 54 72 69 67 67 65 72 53 74 61 63 6b 20 54  t TriggerStack T
2c60: 72 69 67 67 65 72 53 74 61 63 6b 3b 0a 74 79 70  riggerStack;.typ
2c70: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
2c80: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
2c90: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
2ca0: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
2cb0: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
2cc0: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
2cd0: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
2ce0: 20 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76   struct WhereLev
2cf0: 65 6c 20 57 68 65 72 65 4c 65 76 65 6c 3b 0a 0a  el WhereLevel;..
2d00: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
2d10: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
2d20: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
2d30: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
2d40: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
2d50: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
2d60: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
2d70: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
2d80: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
2d90: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
2da0: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
2db0: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
2dc0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2dd0: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
2de0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2df0: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
2e00: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
2e10: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
2e20: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
2e30: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
2e40: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
2e50: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
2e60: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
2e70: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
2e80: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
2e90: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
2ea0: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
2eb0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
2ec0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69 6e 54 72  ile */.  u8 inTr
2ed0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ans;          /*
2ee0: 20 30 3a 20 6e 6f 74 20 77 72 69 74 61 62 6c 65   0: not writable
2ef0: 2e 20 20 31 3a 20 54 72 61 6e 73 61 63 74 69 6f  .  1: Transactio
2f00: 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70 6f 69 6e  n.  2: Checkpoin
2f10: 74 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  t */.  u8 safety
2f20: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
2f30: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
2f40: 20 73 79 6e 63 68 69 6e 67 20 64 61 74 61 20 74   synching data t
2f50: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 76 6f 69 64  o disk */.  void
2f60: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
2f70: 20 20 20 20 20 20 2f 2a 20 41 75 78 69 6c 69 61        /* Auxilia
2f80: 72 79 20 64 61 74 61 2e 20 20 55 73 75 61 6c 6c  ry data.  Usuall
2f90: 79 20 4e 55 4c 4c 20 2a 2f 0a 20 20 76 6f 69 64  y NULL */.  void
2fa0: 20 28 2a 78 46 72 65 65 41 75 78 29 28 76 6f 69   (*xFreeAux)(voi
2fb0: 64 2a 29 3b 20 20 2f 2a 20 52 6f 75 74 69 6e 65  d*);  /* Routine
2fc0: 20 74 6f 20 66 72 65 65 20 70 41 75 78 20 2a 2f   to free pAux */
2fd0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
2fe0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
2ff0: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
3000: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
3010: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
3020: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
3030: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
3040: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
3050: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
3060: 68 65 6d 61 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  hema..*/.struct 
3070: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
3080: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
3090: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
30a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
30b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
30c0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
30d0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
30e0: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
30f0: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
3100: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
3110: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
3120: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
3130: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
3140: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
3150: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
3160: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
3170: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 61 46 4b  me */.  Hash aFK
3180: 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ey;          /* 
3190: 46 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 64  Foreign keys ind
31a0: 65 78 65 64 20 62 79 20 74 6f 2d 74 61 62 6c 65  exed by to-table
31b0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
31c0: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
31d0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
31e0: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
31f0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
3200: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
3210: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
3220: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
3230: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
3240: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
3250: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3260: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
3270: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
3280: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
3290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
32a0: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
32b0: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
32c0: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
32d0: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
32e0: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
32f0: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
3300: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
3310: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
3320: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
3330: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
3340: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
3350: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
3360: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
3370: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
3380: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
3390: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
33a0: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
33b0: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
33c0: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
33d0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
33e0: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
33f0: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
3400: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
3410: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
3420: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
3430: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
3440: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
3450: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
3460: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
3470: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
3480: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
3490: 20 44 42 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e   DB.flags field.
34a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
34b0: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
34c0: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
34d0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
34e0: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
34f0: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
3500: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
3510: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
3520: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
3530: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
3540: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
3550: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
3560: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
3570: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
3580: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
3590: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
35a0: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
35b0: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
35c0: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
35d0: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
35e0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
35f0: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
3600: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
3610: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
3620: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
3630: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
3640: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
3650: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
3660: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
3670: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
3680: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
3690: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
36a0: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
36b0: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c   */..#define SQL
36c0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
36d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
36e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
36f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
3700: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
3710: 61 62 61 73 65 20 69 73 20 61 6e 20 69 6e 73 74  abase is an inst
3720: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
3730: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
3740: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  .**.** The sqlit
3750: 65 2e 6c 61 73 74 52 6f 77 69 64 20 72 65 63 6f  e.lastRowid reco
3760: 72 64 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73  rds the last ins
3770: 65 72 74 20 72 6f 77 69 64 20 67 65 6e 65 72 61  ert rowid genera
3780: 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ted by an.** ins
3790: 65 72 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ert statement.  
37a0: 49 6e 73 65 72 74 73 20 6f 6e 20 76 69 65 77 73  Inserts on views
37b0: 20 64 6f 20 6e 6f 74 20 61 66 66 65 63 74 20 69   do not affect i
37c0: 74 73 20 76 61 6c 75 65 2e 20 20 45 61 63 68 0a  ts value.  Each.
37d0: 2a 2a 20 74 72 69 67 67 65 72 20 68 61 73 20 69  ** trigger has i
37e0: 74 73 20 6f 77 6e 20 63 6f 6e 74 65 78 74 2c 20  ts own context, 
37f0: 73 6f 20 74 68 61 74 20 6c 61 73 74 52 6f 77 69  so that lastRowi
3800: 64 20 63 61 6e 20 62 65 20 75 70 64 61 74 65 64  d can be updated
3810: 20 69 6e 73 69 64 65 0a 2a 2a 20 74 72 69 67 67   inside.** trigg
3820: 65 72 73 20 61 73 20 75 73 75 61 6c 2e 20 20 54  ers as usual.  T
3830: 68 65 20 70 72 65 76 69 6f 75 73 20 76 61 6c 75  he previous valu
3840: 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72  e will be restor
3850: 65 64 20 6f 6e 63 65 20 74 68 65 20 74 72 69 67  ed once the trig
3860: 67 65 72 0a 2a 2a 20 65 78 69 74 73 2e 20 20 55  ger.** exits.  U
3870: 70 6f 6e 20 65 6e 74 65 72 69 6e 67 20 61 20 62  pon entering a b
3880: 65 66 6f 72 65 20 6f 72 20 69 6e 73 74 65 61 64  efore or instead
3890: 20 6f 66 20 74 72 69 67 67 65 72 2c 20 6c 61 73   of trigger, las
38a0: 74 52 6f 77 69 64 20 69 73 20 6e 6f 0a 2a 2a 20  tRowid is no.** 
38b0: 6c 6f 6e 67 65 72 20 28 73 69 6e 63 65 20 61 66  longer (since af
38c0: 74 65 72 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e  ter version 2.8.
38d0: 31 32 29 20 72 65 73 65 74 20 74 6f 20 2d 31 2e  12) reset to -1.
38e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  .**.** The sqlit
38f0: 65 2e 6e 43 68 61 6e 67 65 20 64 6f 65 73 20 6e  e.nChange does n
3900: 6f 74 20 63 6f 75 6e 74 20 63 68 61 6e 67 65 73  ot count changes
3910: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
3920: 20 61 6e 64 20 6b 65 65 70 73 20 6e 6f 0a 2a 2a   and keeps no.**
3930: 20 63 6f 6e 74 65 78 74 2e 20 20 49 74 20 69 73   context.  It is
3940: 20 72 65 73 65 74 20 61 74 20 73 74 61 72 74 20   reset at start 
3950: 6f 66 20 73 71 6c 69 74 65 33 5f 65 78 65 63 2e  of sqlite3_exec.
3960: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 6c  .** The sqlite.l
3970: 73 43 68 61 6e 67 65 20 72 65 70 72 65 73 65 6e  sChange represen
3980: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
3990: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
39a0: 20 74 68 65 20 6c 61 73 74 0a 2a 2a 20 69 6e 73   the last.** ins
39b0: 65 72 74 2c 20 75 70 64 61 74 65 2c 20 6f 72 20  ert, update, or 
39c0: 64 65 6c 65 74 65 20 73 74 61 74 65 6d 65 6e 74  delete statement
39d0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 63 6f  .  It remains co
39e0: 6e 73 74 61 6e 74 20 74 68 72 6f 75 67 68 6f 75  nstant throughou
39f0: 74 20 74 68 65 0a 2a 2a 20 6c 65 6e 67 74 68 20  t the.** length 
3a00: 6f 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 61  of a statement a
3a10: 6e 64 20 69 73 20 74 68 65 6e 20 75 70 64 61 74  nd is then updat
3a20: 65 64 20 62 79 20 4f 50 5f 53 65 74 43 6f 75 6e  ed by OP_SetCoun
3a30: 74 73 2e 20 20 49 74 20 6b 65 65 70 73 20 61 0a  ts.  It keeps a.
3a40: 2a 2a 20 63 6f 6e 74 65 78 74 20 73 74 61 63 6b  ** context stack
3a50: 20 6a 75 73 74 20 6c 69 6b 65 20 6c 61 73 74 52   just like lastR
3a60: 6f 77 69 64 20 73 6f 20 74 68 61 74 20 74 68 65  owid so that the
3a70: 20 63 6f 75 6e 74 20 6f 66 20 63 68 61 6e 67 65   count of change
3a80: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 74 72  s.** within a tr
3a90: 69 67 67 65 72 20 69 73 20 6e 6f 74 20 73 65 65  igger is not see
3aa0: 6e 20 6f 75 74 73 69 64 65 20 74 68 65 20 74 72  n outside the tr
3ab0: 69 67 67 65 72 2e 20 20 43 68 61 6e 67 65 73 20  igger.  Changes 
3ac0: 74 6f 20 76 69 65 77 73 20 64 6f 20 6e 6f 74 0a  to views do not.
3ad0: 2a 2a 20 61 66 66 65 63 74 20 74 68 65 20 76 61  ** affect the va
3ae0: 6c 75 65 20 6f 66 20 6c 73 43 68 61 6e 67 65 2e  lue of lsChange.
3af0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 63  .** The sqlite.c
3b00: 73 43 68 61 6e 67 65 20 6b 65 65 70 73 20 74 72  sChange keeps tr
3b10: 61 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  ack of the numbe
3b20: 72 20 6f 66 20 63 75 72 72 65 6e 74 20 63 68 61  r of current cha
3b30: 6e 67 65 73 20 28 73 69 6e 63 65 0a 2a 2a 20 74  nges (since.** t
3b40: 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  he last statemen
3b50: 74 29 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  t) and is used t
3b60: 6f 20 75 70 64 61 74 65 20 73 71 6c 69 74 65 5f  o update sqlite_
3b70: 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 0a 2a 2a 20  lsChange..**.** 
3b80: 54 68 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  The member varia
3b90: 62 6c 65 73 20 73 71 6c 69 74 65 2e 65 72 72 43  bles sqlite.errC
3ba0: 6f 64 65 2c 20 73 71 6c 69 74 65 2e 7a 45 72 72  ode, sqlite.zErr
3bb0: 4d 73 67 20 61 6e 64 20 73 71 6c 69 74 65 2e 7a  Msg and sqlite.z
3bc0: 45 72 72 4d 73 67 31 36 0a 2a 2a 20 73 74 6f 72  ErrMsg16.** stor
3bd0: 65 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  e the most recen
3be0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  t error code and
3bf0: 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2c  , if applicable,
3c00: 20 73 74 72 69 6e 67 2e 20 54 68 65 0a 2a 2a 20   string. The.** 
3c10: 69 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  internal functio
3c20: 6e 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 29  n sqlite3Error()
3c30: 20 69 73 20 75 73 65 64 20 74 6f 20 73 65 74 20   is used to set 
3c40: 74 68 65 73 65 20 76 61 72 69 61 62 6c 65 73 0a  these variables.
3c50: 2a 2a 20 63 6f 6e 73 69 73 74 65 6e 74 6c 79 2e  ** consistently.
3c60: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
3c70: 65 33 20 7b 0a 20 20 69 6e 74 20 6e 44 62 3b 20  e3 {.  int nDb; 
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3ca0: 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65  f backends curre
3cb0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20  ntly in use */. 
3cc0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3ce0: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
3cf0: 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20  /.  int flags;  
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 6f 75    /* Miscellanou
3d20: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
3d30: 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  ow */.  int errC
3d40: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
3d50: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
3d60: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
3d70: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
3d80: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3da0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
3db0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
3dc0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
3dd0: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3df0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
3e00: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
3e10: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
3e20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
3e30: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
3e40: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 69  : default */.  i
3e50: 6e 74 20 6e 54 61 62 6c 65 3b 20 20 20 20 20 20  nt nTable;      
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3e70: 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
3e80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
3e90: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
3ea0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
3eb0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
3ec0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
3ed0: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
3ee0: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
3ef0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
3f00: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
3f10: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
3f20: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
3f30: 20 20 69 36 34 20 70 72 69 6f 72 4e 65 77 52 6f    i64 priorNewRo
3f40: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
3f50: 2f 2a 20 4c 61 73 74 20 72 61 6e 64 6f 6d 6c 79  /* Last randomly
3f60: 20 67 65 6e 65 72 61 74 65 64 20 52 4f 57 49 44   generated ROWID
3f70: 20 2a 2f 0a 20 20 69 6e 74 20 6d 61 67 69 63 3b   */.  int magic;
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f90: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
3fa0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
3fb0: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
3fc0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fe0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
3ff0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
4000: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
4010: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
4020: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
4030: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
4040: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
4050: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 73 74 72  anges() */.  str
4060: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
4070: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
4080: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
4090: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
40a0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
40b0: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
40c0: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
40d0: 62 61 63 6b 20 69 73 20 62 65 69 6e 67 20 69 6e  back is being in
40e0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
40f0: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4110: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
4120: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
4130: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
4140: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
4150: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
4160: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
4170: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 7d 20  ializing */.  } 
4180: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 45 78 74  init;.  int nExt
4190: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
41a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
41b0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
41c0: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
41d0: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
41e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
41f0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
4200: 72 61 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20  ray handles */. 
4210: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
4220: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
4230: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
4240: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
4250: 73 20 2a 2f 0a 20 20 69 6e 74 20 61 63 74 69 76  s */.  int activ
4260: 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20  eVdbeCnt;       
4270: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4280: 66 20 76 64 62 65 73 20 63 75 72 72 65 6e 74 6c  f vdbes currentl
4290: 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20  y executing */. 
42a0: 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28   void (*xTrace)(
42b0: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
42c0: 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72  *);        /* Tr
42d0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
42e0: 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72    void *pTraceAr
42f0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
4300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
4310: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74  rgument to the t
4320: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
4330: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
4340: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
4350: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
4360: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
4370: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
4380: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43a0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
43b0: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
43c0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f  n */.  void *pCo
43d0: 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20  mmitArg;        
43e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
43f0: 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43  ment to xCommitC
4400: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
4410: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
4420: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
4430: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
4440: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
4450: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
4460: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
4470: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
4480: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
4490: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
44a0: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
44b0: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
44c0: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
44d0: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
44e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
44f0: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
4500: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
4510: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
4520: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
4530: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
4540: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
4550: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
4560: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
4570: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
4580: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
4590: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
45a0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
45b0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
45c0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
45d0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
45e0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
45f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
4600: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
4610: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61  message */.  cha
4620: 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
4630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
4640: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
4650: 6d 65 73 73 61 67 65 20 28 55 54 46 2d 38 20 65  message (UTF-8 e
4660: 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61  ncoded) */.  cha
4670: 72 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20  r *zErrMsg16;   
4680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
4690: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
46a0: 6d 65 73 73 61 67 65 20 28 55 54 46 2d 31 36 20  message (UTF-16 
46b0: 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e  encoded) */.  un
46c0: 69 6f 6e 20 7b 0a 20 20 20 20 69 6e 74 20 69 73  ion {.    int is
46d0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 20 20 20  Interrupted;    
46e0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
46f0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4700: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
4710: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
4720: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
4730: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
4740: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 23 69 66 6e 64  */.  } u1;.#ifnd
4750: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
4760: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
4770: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
4780: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
4790: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
47a0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
47b0: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
47e0: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
47f0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
4800: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
4810: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
4820: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
4830: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
4840: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
4850: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
4860: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4870: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
4880: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
4890: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
48a0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
48b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
48c0: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
48d0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
48e0: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
48f0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
4900: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
4910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
4920: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
4930: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
4940: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
4950: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4960: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
4970: 45 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  E.  Hash aModule
4980: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4990: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
49a0: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
49b0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 54  _module() */.  T
49c0: 61 62 6c 65 20 2a 70 56 54 61 62 3b 20 20 20 20  able *pVTab;    
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
49e0: 76 74 61 62 20 77 69 74 68 20 61 63 74 69 76 65  vtab with active
49f0: 20 43 6f 6e 6e 65 63 74 2f 43 72 65 61 74 65 20   Connect/Create 
4a00: 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 73 71 6c 69  method */.  sqli
4a10: 74 65 33 5f 76 74 61 62 20 2a 2a 61 56 54 72 61  te3_vtab **aVTra
4a20: 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 56 69 72  ns;       /* Vir
4a30: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
4a40: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
4a50: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 54 72  ns */.  int nVTr
4a60: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
4a70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
4a80: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
4a90: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  ns */.#endif.  H
4aa0: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4ac0: 41 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  All functions th
4ad0: 61 74 20 63 61 6e 20 62 65 20 69 6e 20 53 51 4c  at can be in SQL
4ae0: 20 65 78 70 72 73 20 2a 2f 0a 20 20 48 61 73 68   exprs */.  Hash
4af0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
4b00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
4b10: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
4b20: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
4b30: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
4b40: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
4b50: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
4b60: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
4b80: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
4b90: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
4ba0: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
4bb0: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
4bc0: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
4bd0: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
4be0: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 23 69  t backends */.#i
4bf0: 66 64 65 66 20 53 51 4c 49 54 45 5f 53 53 45 0a  fdef SQLITE_SSE.
4c00: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
4c10: 70 46 65 74 63 68 3b 20 20 20 20 20 20 20 20 20  pFetch;         
4c20: 2f 2a 20 55 73 65 64 20 62 79 20 53 53 45 20 74  /* Used by SSE t
4c30: 6f 20 66 65 74 63 68 20 73 74 6f 72 65 64 20 73  o fetch stored s
4c40: 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 23 65 6e  tatements */.#en
4c50: 64 69 66 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63  dif.  u8 dfltLoc
4c60: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
4c70: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
4c80: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
4c90: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
4ca0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
4cb0: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
4cc0: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
4cd0: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
4ce0: 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28 28 64  fine ENC(db) ((d
4cf0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
4d00: 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  ma->enc)../*.** 
4d10: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
4d20: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 66  for the sqlite.f
4d30: 6c 61 67 73 20 61 6e 64 20 6f 72 20 44 62 2e 66  lags and or Db.f
4d40: 6c 61 67 73 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  lags fields..**.
4d50: 2a 2a 20 4f 6e 20 73 71 6c 69 74 65 2e 66 6c 61  ** On sqlite.fla
4d60: 67 73 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49  gs, the SQLITE_I
4d70: 6e 54 72 61 6e 73 20 76 61 6c 75 65 20 6d 65 61  nTrans value mea
4d80: 6e 73 20 74 68 61 74 20 77 65 20 68 61 76 65 0a  ns that we have.
4d90: 2a 2a 20 65 78 65 63 75 74 65 64 20 61 20 42 45  ** executed a BE
4da0: 47 49 4e 2e 20 20 4f 6e 20 44 62 2e 66 6c 61 67  GIN.  On Db.flag
4db0: 73 2c 20 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e  s, SQLITE_InTran
4dc0: 73 20 6d 65 61 6e 73 20 61 20 73 74 61 74 65 6d  s means a statem
4dd0: 65 6e 74 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ent.** transacti
4de0: 6f 6e 20 69 73 20 61 63 74 69 76 65 20 6f 6e 20  on is active on 
4df0: 74 68 61 74 20 70 61 72 74 69 63 75 6c 61 72 20  that particular 
4e00: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
4e10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4e20: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
4e30: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
4e40: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
4e50: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
4e60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
4e70: 54 72 61 6e 73 20 20 20 20 20 20 20 20 30 78 30  Trans        0x0
4e80: 30 30 30 30 30 30 38 20 20 2f 2a 20 54 72 75 65  0000008  /* True
4e90: 20 69 66 20 69 6e 20 61 20 74 72 61 6e 73 61 63   if in a transac
4ea0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
4eb0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
4ec0: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 31 30  nges  0x00000010
4ed0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
4ee0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
4ef0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
4f00: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
4f10: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
4f20: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
4f30: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
4f40: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
4f50: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
4f60: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
4f70: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
4f80: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
4f90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
4fa0: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
4fb0: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
4fc0: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
4fd0: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
5010: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
5020: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5050: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
5060: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
5070: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
5080: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
5090: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
50a0: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
50b0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
50c0: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50f0: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
5100: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
5110: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5120: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
5130: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
5140: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
5150: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
5160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5170: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
5180: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
5190: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
51a0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
51b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
51c0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
51d0: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
51e0: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
51f0: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
5200: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61  ine SQLITE_NoRea
5210: 64 6c 6f 63 6b 20 20 20 20 20 30 78 30 30 30 30  dlock     0x0000
5220: 31 30 30 30 20 20 2f 2a 20 52 65 61 64 6c 6f 63  1000  /* Readloc
5230: 6b 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 77  ks are omitted w
5240: 68 65 6e 20 0a 20 20 20 20 20 20 20 20 20 20 20  hen .           
5250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
5270: 2a 20 61 63 63 65 73 73 69 6e 67 20 72 65 61 64  * accessing read
5280: 2d 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 73 20  -only databases 
5290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
52a0: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
52b0: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
52c0: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
52d0: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
52e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
52f0: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
5300: 65 64 20 30 78 30 30 30 30 34 30 30 30 20 2f 2a  ed 0x00004000 /*
5310: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
5320: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
5330: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
5340: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
5350: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
5360: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
5370: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
5380: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
5390: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 31 30  ync      0x00010
53a0: 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  000  /* Use full
53b0: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
53c0: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
53d0: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
53e0: 6e 73 69 6f 6e 20 20 30 78 30 30 30 32 30 30 30  nsion  0x0002000
53f0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
5400: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 0a  d_extension */..
5410: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
5420: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
5430: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 49 67 6e  00040000  /* Ign
5440: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
5450: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  s */../*.** Poss
5460: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
5470: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
5480: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
5490: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
54a0: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
54b0: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
54c0: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
54d0: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
54e0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
54f0: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
5500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
5510: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
5520: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
5530: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
5540: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
5550: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
5560: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
5570: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
5580: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5590: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
55a0: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
55b0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
55c0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
55d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
55e0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
55f0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
5600: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
5610: 63 63 75 72 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ccurred */../*.*
5620: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
5630: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
5640: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
5650: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
5660: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
5670: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
5680: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
5690: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
56a0: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
56b0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
56c0: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
56d0: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
56e0: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
56f0: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
5700: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
5710: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
5720: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
5730: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
5740: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
5750: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
5760: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
5770: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
5780: 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20  8 iPrefEnc;     
5790: 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64      /* Preferred
57a0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28   text encoding (
57b0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c  SQLITE_UTF8, 16L
57c0: 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38  E, 16BE) */.  u8
57d0: 20 6e 65 65 64 43 6f 6c 6c 53 65 71 3b 20 20 20   needCollSeq;   
57e0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71     /* True if sq
57f0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
5800: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
5810: 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 38 20 66 6c  alled */.  u8 fl
5820: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
5830: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
5840: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
5850: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
5860: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
5870: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
5880: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
5890: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
58a0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
58b0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
58c0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
58d0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
58e0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
58f0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
5900: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
5910: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
5920: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
5930: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
5940: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
5950: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
5960: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
5970: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
5980: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
5990: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
59a0: 66 69 6e 69 61 6c 69 7a 65 72 20 2a 2f 0a 20 20  finializer */.  
59b0: 63 68 61 72 20 7a 4e 61 6d 65 5b 31 5d 3b 20 20  char zName[1];  
59c0: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
59d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
59e0: 2e 20 20 4d 55 53 54 20 42 45 20 4c 41 53 54 20  .  MUST BE LAST 
59f0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
5a00: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
5a10: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
5a20: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
5a30: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
5a40: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
5a50: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
5a60: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
5a70: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
5a80: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
5a90: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
5aa0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
5ab0: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
5ac0: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
5ad0: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
5ae0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
5af0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
5b00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
5b10: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
5b20: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
5b30: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b50: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
5b60: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
5b70: 6f 64 75 6c 65 28 29 20 2a 2f 0a 7d 3b 0a 0a 2f  odule() */.};../
5b80: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
5b90: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
5ba0: 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  .flags.*/.#defin
5bb0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
5bc0: 4b 45 20 20 20 30 78 30 31 20 20 2f 2a 20 43 61  KE   0x01  /* Ca
5bd0: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
5be0: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
5bf0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
5c00: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
5c10: 30 78 30 32 20 20 2f 2a 20 43 61 73 65 2d 73 65  0x02  /* Case-se
5c20: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
5c30: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
5c40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
5c50: 43 5f 45 50 48 45 4d 20 20 30 78 30 34 20 20 2f  C_EPHEM  0x04  /
5c60: 2a 20 45 70 68 65 72 6d 65 72 61 6c 2e 20 20 44  * Ephermeral.  D
5c70: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
5c80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  */../*.** inform
5c90: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
5ca0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
5cb0: 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
5cc0: 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
5cd0: 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
5ce0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
5cf0: 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
5d00: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
5d10: 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
5d20: 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  n */.  Expr *pDf
5d30: 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
5d40: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
5d50: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
5d60: 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a  r *zType;     /*
5d70: 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74   Data type for t
5d80: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
5d90: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
5da0: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
5db0: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
5dc0: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
5dd0: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
5de0: 6c 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  l;      /* True 
5df0: 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
5e00: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
5e10: 74 20 2a 2f 0a 20 20 75 38 20 69 73 50 72 69 6d  t */.  u8 isPrim
5e20: 4b 65 79 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  Key;    /* True 
5e30: 69 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69  if this column i
5e40: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52  s part of the PR
5e50: 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 63  IMARY KEY */.  c
5e60: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
5e70: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
5e80: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
5e90: 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ues */.};../*.**
5ea0: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
5eb0: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
5ec0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
5ed0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
5ee0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
5ef0: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
5f00: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
5f10: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
5f20: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
5f30: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
5f40: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
5f50: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
5f60: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
5f70: 2a 20 54 68 65 72 65 20 6d 61 79 20 74 77 6f 20  * There may two 
5f80: 73 65 70 65 72 61 74 65 20 69 6d 70 6c 65 6d 65  seperate impleme
5f90: 6e 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  ntations of the 
5fa0: 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69  collation functi
5fb0: 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20 74 68 61 74 20  on, one.** that 
5fc0: 70 72 6f 63 65 73 73 65 73 20 74 65 78 74 20 69  processes text i
5fd0: 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  n UTF-8 encoding
5fe0: 20 28 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 29 20   (CollSeq.xCmp) 
5ff0: 61 6e 64 20 61 6e 6f 74 68 65 72 20 74 68 61 74  and another that
6000: 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 74 65  .** processes te
6010: 78 74 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  xt encoded in UT
6020: 46 2d 31 36 20 28 43 6f 6c 6c 53 65 71 2e 78 43  F-16 (CollSeq.xC
6030: 6d 70 31 36 29 2c 20 75 73 69 6e 67 20 74 68 65  mp16), using the
6040: 20 6d 61 63 68 69 6e 65 0a 2a 2a 20 6e 61 74 69   machine.** nati
6050: 76 65 20 62 79 74 65 20 6f 72 64 65 72 2e 20 57  ve byte order. W
6060: 68 65 6e 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  hen a collation 
6070: 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 76 6f  sequence is invo
6080: 6b 65 64 2c 20 53 51 4c 69 74 65 20 73 65 6c 65  ked, SQLite sele
6090: 63 74 73 0a 2a 2a 20 74 68 65 20 76 65 72 73 69  cts.** the versi
60a0: 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 72 65 71  on that will req
60b0: 75 69 72 65 20 74 68 65 20 6c 65 61 73 74 20 65  uire the least e
60c0: 78 70 65 6e 73 69 76 65 20 65 6e 63 6f 64 69 6e  xpensive encodin
60d0: 67 0a 2a 2a 20 74 72 61 6e 73 6c 61 74 69 6f 6e  g.** translation
60e0: 73 2c 20 69 66 20 61 6e 79 2e 0a 2a 2a 0a 2a 2a  s, if any..**.**
60f0: 20 54 68 65 20 43 6f 6c 6c 53 65 71 2e 70 55 73   The CollSeq.pUs
6100: 65 72 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  er member variab
6110: 6c 65 20 69 73 20 61 6e 20 65 78 74 72 61 20 70  le is an extra p
6120: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 70 61  arameter that pa
6130: 73 73 65 64 20 69 6e 0a 2a 2a 20 61 73 20 74 68  ssed in.** as th
6140: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
6150: 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 63 6f   to the UTF-8 co
6160: 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
6170: 6e 2c 20 78 43 6d 70 2e 0a 2a 2a 20 43 6f 6c 6c  n, xCmp..** Coll
6180: 53 65 71 2e 70 55 73 65 72 31 36 20 69 73 20 74  Seq.pUser16 is t
6190: 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 66 6f  he equivalent fo
61a0: 72 20 74 68 65 20 55 54 46 2d 31 36 20 63 6f 6d  r the UTF-16 com
61b0: 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
61c0: 2c 0a 2a 2a 20 78 43 6d 70 31 36 2e 0a 2a 2a 0a  ,.** xCmp16..**.
61d0: 2a 2a 20 49 66 20 62 6f 74 68 20 43 6f 6c 6c 53  ** If both CollS
61e0: 65 71 2e 78 43 6d 70 20 61 6e 64 20 43 6f 6c 6c  eq.xCmp and Coll
61f0: 53 65 71 2e 78 43 6d 70 31 36 20 61 72 65 20 4e  Seq.xCmp16 are N
6200: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
6210: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
6220: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
6230: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
6240: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
6250: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
6260: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
6270: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
6280: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
6290: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
62a0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
62b0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
62c0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
62d0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
62e0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
62f0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
6300: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
6310: 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
6320: 6d 70 28 29 20 2a 2f 0a 20 20 75 38 20 74 79 70  mp() */.  u8 typ
6330: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
6340: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
6350: 49 54 45 5f 43 4f 4c 4c 5f 2e 2e 2e 20 76 61 6c  ITE_COLL_... val
6360: 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 76  ues below */.  v
6370: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
6380: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
6390: 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
63a0: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
63b0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
63c0: 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
63d0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 7d 3b 0a 0a  nst void*);.};..
63e0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
63f0: 6c 75 65 73 20 6f 66 20 43 6f 6c 6c 53 65 71 20  lues of CollSeq 
6400: 66 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  flags:.*/.#defin
6410: 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 42 49  e SQLITE_COLL_BI
6420: 4e 41 52 59 20 20 31 20 20 2f 2a 20 54 68 65 20  NARY  1  /* The 
6430: 64 65 66 61 75 6c 74 20 6d 65 6d 63 6d 70 28 29  default memcmp()
6440: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
6450: 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nce */.#define S
6460: 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53  QLITE_COLL_NOCAS
6470: 45 20 20 32 20 20 2f 2a 20 54 68 65 20 62 75 69  E  2  /* The bui
6480: 6c 74 2d 69 6e 20 4e 4f 43 41 53 45 20 63 6f 6c  lt-in NOCASE col
6490: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
64a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
64b0: 45 5f 43 4f 4c 4c 5f 52 45 56 45 52 53 45 20 33  E_COLL_REVERSE 3
64c0: 20 20 2f 2a 20 54 68 65 20 62 75 69 6c 74 2d 69    /* The built-i
64d0: 6e 20 52 45 56 45 52 53 45 20 63 6f 6c 6c 61 74  n REVERSE collat
64e0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a  ing sequence */.
64f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
6500: 4f 4c 4c 5f 55 53 45 52 20 20 20 20 30 20 20 2f  OLL_USER    0  /
6510: 2a 20 41 6e 79 20 6f 74 68 65 72 20 75 73 65 72  * Any other user
6520: 2d 64 65 66 69 6e 65 64 20 63 6f 6c 6c 61 74 69  -defined collati
6530: 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 0a  ng sequence */..
6540: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
6550: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
6560: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
6570: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
6580: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
6590: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
65a0: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
65b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
65c0: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
65d0: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
65e0: 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  g order */../*.*
65f0: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
6600: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
6610: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
6620: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
6630: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
6640: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
6650: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
6660: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
6670: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
6680: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
6690: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
66a0: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
66b0: 65 20 62 79 20 6e 75 6d 62 65 72 20 74 68 65 20  e by number the 
66c0: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
66d0: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
66e0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
66f0: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
6700: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
6710: 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  a'.  That way,.*
6720: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
6730: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
6740: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
6750: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
6760: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
6770: 20 50 33 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P3 operand, the
6780: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
6790: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
67a0: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
67b0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
67c0: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
67d0: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
67e0: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
67f0: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
6800: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
6810: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n..*/.#define SQ
6820: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
6830: 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51    'a'.#define SQ
6840: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20  LITE_AFF_NONE   
6850: 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51    'b'.#define SQ
6860: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
6870: 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51    'c'.#define SQ
6880: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
6890: 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51    'd'.#define SQ
68a0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
68b0: 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73    'e'..#define s
68c0: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
68d0: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
68e0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
68f0: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  ERIC)../*.** Eac
6900: 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72  h SQL table is r
6910: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
6920: 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61  mory by an insta
6930: 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f  nce of the.** fo
6940: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
6950: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a  e..**.** Table.z
6960: 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  Name is the name
6970: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
6980: 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20  The case of the 
6990: 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41  original.** CREA
69a0: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
69b0: 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75  nt is stored, bu
69c0: 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69  t case is not si
69d0: 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a  gnificant for.**
69e0: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a   comparisons..**
69f0: 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69  .** Table.nCol i
6a00: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
6a10: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
6a20: 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43  table.  Table.aC
6a30: 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  ol is a.** point
6a40: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
6a50: 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75  f Column structu
6a60: 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63  res, one for eac
6a70: 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20  h column..**.** 
6a80: 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  If the table has
6a90: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
6aa0: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61  ARY KEY, then Ta
6ab0: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65  ble.iPKey is the
6ac0: 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65   index of.** the
6ad0: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
6ae0: 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65  that key.   Othe
6af0: 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65  rwise Table.iPKe
6b00: 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20  y is negative.  
6b10: 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  Note.** that the
6b20: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
6b30: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73   PRIMARY KEY mus
6b40: 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72  t be INTEGER for
6b50: 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a   this field to.*
6b60: 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e  * be set.  An IN
6b70: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6b80: 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  Y is used as the
6b90: 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20   rowid for each 
6ba0: 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61  row of.** the ta
6bb0: 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65  ble.  If a table
6bc0: 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20   has no INTEGER 
6bd0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
6be0: 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  n a random rowid
6bf0: 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64  .** is generated
6c00: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
6c10: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 61 62   the table.  Tab
6c20: 6c 65 2e 68 61 73 50 72 69 6d 4b 65 79 20 69 73  le.hasPrimKey is
6c30: 20 74 72 75 65 20 69 66 0a 2a 2a 20 74 68 65 20   true if.** the 
6c40: 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52  table has any PR
6c50: 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47  IMARY KEY, INTEG
6c60: 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e  ER or otherwise.
6c70: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75  .**.** Table.tnu
6c80: 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  m is the page nu
6c90: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f  mber for the roo
6ca0: 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20  t BTree page of 
6cb0: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  the table in the
6cc0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
6cd0: 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62  e.  If Table.iDb
6ce0: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
6cf0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
6d00: 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69  ble backend.** i
6d10: 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20  n sqlite.aDb[]. 
6d20: 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61   0 is for the ma
6d30: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
6d40: 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c  1 is for the fil
6d50: 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20  e that.** holds 
6d60: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
6d70: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49   and indices.  I
6d80: 66 20 54 61 62 6c 65 2e 69 73 45 70 68 65 6d 0a  f Table.isEphem.
6d90: 2a 2a 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  ** is true, then
6da0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74   the table is st
6db0: 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74  ored in a file t
6dc0: 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63  hat is automatic
6dd0: 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20  ally deleted.** 
6de0: 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75  when the VDBE cu
6df0: 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c  rsor to the tabl
6e00: 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e  e is closed.  In
6e10: 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65   this case Table
6e20: 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73  .tnum .** refers
6e30: 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
6e40: 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ber that holds t
6e50: 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e  he table open, n
6e60: 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a  ot to the root.*
6e70: 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  * page number.  
6e80: 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73  Transient tables
6e90: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c   are used to hol
6ea0: 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  d the results of
6eb0: 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20   a.** sub-query 
6ec0: 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73  that appears ins
6ed0: 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74  tead of a real t
6ee0: 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
6ef0: 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a   FROM clause .**
6f00: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
6f10: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
6f20: 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
6f30: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
6f40: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
6f50: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  e */.  int nCol;
6f60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6f70: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
6f80: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
6f90: 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
6fa0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
6fb0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
6fc0: 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 50 4b 65 79  n */.  int iPKey
6fd0: 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f  ;       /* If no
6fe0: 74 20 6c 65 73 73 20 74 68 65 6e 20 30 2c 20 75  t less then 0, u
6ff0: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
7000: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
7010: 79 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  y */.  Index *pI
7020: 6e 64 65 78 3b 20 20 20 2f 2a 20 4c 69 73 74 20  ndex;   /* List 
7030: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
7040: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
7050: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
7060: 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
7070: 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20  e node for this 
7080: 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20  table (see note 
7090: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 53 65 6c 65  above) */.  Sele
70a0: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 2f 2a 20  ct *pSelect; /* 
70b0: 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
70c0: 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
70d0: 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
70e0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  . */.  int nRef;
70f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7100: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
7110: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
7120: 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
7130: 67 67 65 72 3b 20 2f 2a 20 4c 69 73 74 20 6f 66  gger; /* List of
7140: 20 53 51 4c 20 74 72 69 67 67 65 72 73 20 6f 6e   SQL triggers on
7150: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
7160: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
7170: 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
7180: 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
7190: 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
71a0: 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
71b0: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 2f 2a 20  zColAff;     /* 
71c0: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
71d0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
71e0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23  each column */.#
71f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7200: 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 20  IT_CHECK.  Expr 
7210: 2a 70 43 68 65 63 6b 3b 20 20 20 20 20 20 2f 2a  *pCheck;      /*
7220: 20 54 68 65 20 41 4e 44 20 6f 66 20 61 6c 6c 20   The AND of all 
7230: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
7240: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  s */.#endif.#ifn
7250: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7260: 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
7270: 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
7280: 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
7290: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
72a0: 65 6e 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  ent to add a new
72b0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
72c0: 66 0a 20 20 75 38 20 72 65 61 64 4f 6e 6c 79 3b  f.  u8 readOnly;
72d0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
72e0: 74 68 69 73 20 74 61 62 6c 65 20 73 68 6f 75 6c  this table shoul
72f0: 64 20 6e 6f 74 20 62 65 20 77 72 69 74 74 65 6e  d not be written
7300: 20 62 79 20 74 68 65 20 75 73 65 72 20 2a 2f 0a   by the user */.
7310: 20 20 75 38 20 69 73 45 70 68 65 6d 3b 20 20 20    u8 isEphem;   
7320: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 72     /* True if cr
7330: 65 61 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 4f  eated using OP_O
7340: 70 65 6e 45 70 68 65 72 6d 65 72 61 6c 20 2a 2f  penEphermeral */
7350: 0a 20 20 75 38 20 68 61 73 50 72 69 6d 4b 65 79  .  u8 hasPrimKey
7360: 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
7370: 68 65 72 65 20 65 78 69 73 74 73 20 61 20 70 72  here exists a pr
7380: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 75  imary key */.  u
7390: 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
73a0: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
73b0: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
73c0: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
73d0: 69 50 4b 65 79 20 2a 2f 0a 20 20 75 38 20 61 75  iPKey */.  u8 au
73e0: 74 6f 49 6e 63 3b 20 20 20 20 20 20 2f 2a 20 54  toInc;      /* T
73f0: 72 75 65 20 69 66 20 74 68 65 20 69 6e 74 65 67  rue if the integ
7400: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
7410: 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
7420: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
7430: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
7440: 42 4c 45 0a 20 20 75 38 20 69 73 56 69 72 74 75  BLE.  u8 isVirtu
7450: 61 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  al;             
7460: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
7470: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
7480: 6c 65 20 2a 2f 0a 20 20 75 38 20 69 73 43 6f 6d  le */.  u8 isCom
7490: 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  mit;            
74a0: 20 20 2f 2a 20 54 72 75 65 20 6f 6e 63 65 20 74    /* True once t
74b0: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
74c0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74  has been committ
74d0: 65 64 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  ed */.  Module *
74e0: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
74f0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
7500: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
7510: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  on of the module
7520: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
7530: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
7540: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
7550: 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6e 63  e module instanc
7560: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  e */.  int nModu
7570: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7580: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
7590: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
75a0: 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
75b0: 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
75c0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
75d0: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
75e0: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
75f0: 61 6d 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ame */.#endif.  
7600: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
7610: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  .};../*.** Test 
7620: 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
7630: 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
7640: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
7650: 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
7660: 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
7670: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
7680: 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
7690: 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
76a0: 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
76b0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
76c0: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
76d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
76e0: 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
76f0: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
7700: 58 29 20 28 28 58 29 2d 3e 69 73 56 69 72 74 75  X) ((X)->isVirtu
7710: 61 6c 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  al).#else.#  def
7720: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
7730: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
7740: 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
7750: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
7760: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
7770: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7780: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
7790: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
77a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
77b0: 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
77c0: 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
77d0: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
77e0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
77f0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
7800: 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
7810: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
7820: 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
7830: 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
7840: 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
7850: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
7860: 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
7870: 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
7880: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
7890: 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
78a0: 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
78b0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
78c0: 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
78d0: 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
78e0: 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
78f0: 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
7900: 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
7910: 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
7920: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
7930: 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
7940: 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a   is "ex2"..**.**
7950: 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
7960: 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
7970: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
7980: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7990: 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
79a0: 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
79b0: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
79c0: 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
79d0: 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
79e0: 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
79f0: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
7a00: 20 20 54 68 65 20 65 78 69 73 74 61 6e 63 65 20    The existance 
7a10: 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
7a20: 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 0a 2a  is not checked.*
7a30: 2a 20 75 6e 74 69 6c 20 61 6e 20 61 74 74 65 6d  * until an attem
7a40: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
7a50: 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f 20 74  sert data into t
7a60: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 0a 2a  he from-table..*
7a70: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
7a80: 61 46 4b 65 79 20 68 61 73 68 20 74 61 62 6c 65  aFKey hash table
7a90: 20 73 74 6f 72 65 73 20 70 6f 69 6e 74 65 72 73   stores pointers
7aa0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
7ab0: 72 65 0a 2a 2a 20 67 69 76 65 6e 20 74 68 65 20  re.** given the 
7ac0: 6e 61 6d 65 20 6f 66 20 61 20 74 6f 2d 74 61 62  name of a to-tab
7ad0: 6c 65 2e 20 20 46 6f 72 20 65 61 63 68 20 74 6f  le.  For each to
7ae0: 2d 74 61 62 6c 65 2c 20 61 6c 6c 20 66 6f 72 65  -table, all fore
7af0: 69 67 6e 20 6b 65 79 73 0a 2a 2a 20 61 73 73 6f  ign keys.** asso
7b00: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
7b10: 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 20 61 20   table are on a 
7b20: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 75 73 69 6e  linked list usin
7b30: 67 20 74 68 65 20 46 4b 65 79 2e 70 4e 65 78 74  g the FKey.pNext
7b40: 54 6f 0a 2a 2a 20 66 69 65 6c 64 2e 0a 2a 2f 0a  To.** field..*/.
7b50: 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
7b60: 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
7b70: 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 74    /* The table t
7b80: 68 61 74 20 63 6f 6e 73 74 61 69 6e 73 20 74 68  hat constains th
7b90: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
7ba0: 75 73 65 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  use */.  FKey *p
7bb0: 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
7bc0: 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69  xt foreign key i
7bd0: 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  n pFrom */.  cha
7be0: 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
7bf0: 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
7c00: 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
7c10: 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 46 4b 65 79  nts to */.  FKey
7c20: 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
7c30: 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65   Next foreign ke
7c40: 79 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  y that points to
7c50: 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
7c60: 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
7c70: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
7c80: 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
7c90: 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
7ca0: 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f   {  /* Mapping o
7cb0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
7cc0: 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
7cd0: 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
7ce0: 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f  iFrom;         /
7cf0: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
7d00: 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
7d10: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
7d20: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
7d30: 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
7d40: 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59  If 0 use PRIMARY
7d50: 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f   KEY */.  } *aCo
7d60: 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  l;          /* O
7d70: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
7d80: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
7d90: 20 73 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66   s */.  u8 isDef
7da0: 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75  erred;    /* Tru
7db0: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
7dc0: 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
7dd0: 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
7de0: 20 2a 2f 0a 20 20 75 38 20 75 70 64 61 74 65 43   */.  u8 updateC
7df0: 6f 6e 66 3b 20 20 20 20 2f 2a 20 48 6f 77 20 74  onf;    /* How t
7e00: 6f 20 72 65 73 6f 6c 76 65 20 63 6f 6e 66 6c 69  o resolve confli
7e10: 63 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 6f  cts that occur o
7e20: 6e 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 75 38  n UPDATE */.  u8
7e30: 20 64 65 6c 65 74 65 43 6f 6e 66 3b 20 20 20 20   deleteConf;    
7e40: 2f 2a 20 48 6f 77 20 74 6f 20 72 65 73 6f 6c 76  /* How to resolv
7e50: 65 20 63 6f 6e 66 6c 69 63 74 73 20 74 68 61 74  e conflicts that
7e60: 20 6f 63 63 75 72 20 6f 6e 20 44 45 4c 45 54 45   occur on DELETE
7e70: 20 2a 2f 0a 20 20 75 38 20 69 6e 73 65 72 74 43   */.  u8 insertC
7e80: 6f 6e 66 3b 20 20 20 20 2f 2a 20 48 6f 77 20 74  onf;    /* How t
7e90: 6f 20 72 65 73 6f 6c 76 65 20 63 6f 6e 66 6c 69  o resolve confli
7ea0: 63 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 6f  cts that occur o
7eb0: 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 7d 3b 0a 0a  n INSERT */.};..
7ec0: 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
7ed0: 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
7ee0: 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
7ef0: 6f 6c 76 65 20 61 20 63 6f 6e 74 72 61 69 6e 74  olve a contraint
7f00: 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
7f10: 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
7f20: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
7f30: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
7f40: 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
7f50: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
7f60: 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
7f70: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
7f80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
7f90: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
7fa0: 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
7fb0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
7fc0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
7fd0: 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
7fe0: 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
7ff0: 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
8000: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
8010: 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
8020: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
8030: 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
8040: 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
8050: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
8060: 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
8070: 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
8080: 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
8090: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
80a0: 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
80b0: 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
80c0: 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
80d0: 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
80e0: 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
80f0: 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
8100: 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
8110: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
8120: 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
8130: 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
8140: 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
8150: 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
8160: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
8170: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
8180: 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
8190: 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
81a0: 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
81b0: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
81c0: 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
81d0: 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
81e0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
81f0: 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
8200: 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
8210: 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
8220: 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
8230: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
8240: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
8250: 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
8260: 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
8270: 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
8280: 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
8290: 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
82a0: 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
82b0: 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
82c0: 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
82d0: 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
82e0: 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
82f0: 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
8300: 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
8310: 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
8320: 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
8330: 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
8340: 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
8350: 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
8360: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
8370: 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
8380: 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
8390: 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
83a0: 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
83b0: 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
83c0: 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
83d0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
83e0: 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
83f0: 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
8400: 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
8410: 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
8420: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
8430: 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
8440: 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
8450: 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
8460: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
8470: 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
8480: 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
8490: 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
84a0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
84b0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
84c0: 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
84d0: 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
84e0: 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
84f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
8500: 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
8510: 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
8520: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
8530: 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
8540: 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
8550: 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
8560: 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
8570: 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
8580: 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
8590: 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
85a0: 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
85b0: 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
85c0: 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
85d0: 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
85e0: 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
85f0: 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
8600: 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
8610: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
8620: 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
8630: 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
8640: 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
8650: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
8660: 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
8670: 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
8680: 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
8690: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
86a0: 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
86b0: 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
86c0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
86d0: 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
86e0: 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
86f0: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
8700: 44 65 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20  Default  99  /* 
8710: 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
8720: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
8730: 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
8740: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
8750: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
8760: 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
8770: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
8780: 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
8790: 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
87a0: 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
87b0: 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
87c0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
87d0: 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
87e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4b 65  .**.** If the Ke
87f0: 79 49 6e 66 6f 2e 69 6e 63 72 4b 65 79 20 76 61  yInfo.incrKey va
8800: 6c 75 65 20 69 73 20 74 72 75 65 20 61 6e 64 20  lue is true and 
8810: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 77  the comparison w
8820: 6f 75 6c 64 0a 2a 2a 20 6f 74 68 65 72 77 69 73  ould.** otherwis
8830: 65 20 62 65 20 65 71 75 61 6c 2c 20 74 68 65 6e  e be equal, then
8840: 20 72 65 74 75 72 6e 20 61 20 72 65 73 75 6c 74   return a result
8850: 20 61 73 20 69 66 20 74 68 65 20 73 65 63 6f 6e   as if the secon
8860: 64 20 6b 65 79 0a 2a 2a 20 77 65 72 65 20 6c 61  d key.** were la
8870: 72 67 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  rger..*/.struct 
8880: 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 38 20 65  KeyInfo {.  u8 e
8890: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
88a0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
88b0: 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 54 45   - one of the TE
88c0: 58 54 5f 55 74 66 2a 20 76 61 6c 75 65 73 20 2a  XT_Utf* values *
88d0: 2f 0a 20 20 75 38 20 69 6e 63 72 4b 65 79 3b 20  /.  u8 incrKey; 
88e0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65          /* Incre
88f0: 61 73 65 20 32 6e 64 20 6b 65 79 20 62 79 20 65  ase 2nd key by e
8900: 70 73 69 6c 6f 6e 20 62 65 66 6f 72 65 20 63 6f  psilon before co
8910: 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 69 6e  mparison */.  in
8920: 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
8930: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
8940: 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b  ntries in aColl[
8950: 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  ] */.  u8 *aSort
8960: 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 49 66  Order;     /* If
8970: 20 64 65 66 69 6e 65 64 20 61 6e 20 61 53 6f 72   defined an aSor
8980: 74 4f 72 64 65 72 5b 69 5d 20 69 73 20 74 72 75  tOrder[i] is tru
8990: 65 2c 20 73 6f 72 74 20 44 45 53 43 20 2a 2f 0a  e, sort DESC */.
89a0: 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
89b0: 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
89c0: 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
89d0: 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
89e0: 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
89f0: 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
8a00: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
8a10: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
8a20: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
8a30: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
8a40: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
8a50: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
8a60: 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
8a70: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
8a80: 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
8a90: 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
8aa0: 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
8ab0: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
8ac0: 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
8ad0: 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
8ae0: 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
8af0: 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
8b00: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
8b10: 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
8b20: 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
8b30: 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
8b40: 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
8b50: 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
8b60: 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
8b70: 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
8b80: 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
8b90: 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
8ba0: 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
8bb0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
8bc0: 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
8bd0: 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
8be0: 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
8bf0: 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
8c00: 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
8c10: 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
8c20: 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
8c30: 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
8c40: 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
8c50: 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a  =2 because the .
8c60: 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
8c70: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
8c80: 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
8c90: 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
8ca0: 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
8cb0: 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
8cc0: 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
8cd0: 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
8ce0: 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
8cf0: 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
8d00: 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
8d10: 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
8d20: 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
8d30: 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
8d40: 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
8d50: 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
8d60: 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
8d70: 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
8d80: 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
8d90: 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
8da0: 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
8db0: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
8dc0: 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
8dd0: 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
8de0: 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
8df0: 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
8e00: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
8e10: 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
8e20: 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
8e30: 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69  ution .** algori
8e40: 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
8e50: 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
8e60: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
8e70: 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
8e80: 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a  .** element..*/.
8e90: 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
8ea0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
8eb0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
8ec0: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
8ed0: 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a   nColumn;     /*
8ee0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
8ef0: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
8f00: 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
8f10: 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43  ex */.  int *aiC
8f20: 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 69 63  olumn;   /* Whic
8f30: 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
8f40: 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
8f50: 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
8f60: 20 75 6e 73 69 67 6e 65 64 20 2a 61 69 52 6f 77   unsigned *aiRow
8f70: 45 73 74 3b 20 2f 2a 20 52 65 73 75 6c 74 20 6f  Est; /* Result o
8f80: 66 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  f ANALYZE: Est. 
8f90: 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
8fa0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
8fb0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
8fc0: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
8fd0: 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
8fe0: 64 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  d */.  int tnum;
8ff0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
9000: 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
9010: 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 69 6e  of this index in
9020: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
9030: 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
9040: 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
9050: 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
9060: 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
9070: 6f 6e 65 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  one */.  u8 auto
9080: 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 54 72 75  Index;    /* Tru
9090: 65 20 69 66 20 69 73 20 61 75 74 6f 6d 61 74 69  e if is automati
90a0: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 28 65  cally created (e
90b0: 78 3a 20 62 79 20 55 4e 49 51 55 45 29 20 2a 2f  x: by UNIQUE) */
90c0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
90d0: 3b 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65  ;   /* String de
90e0: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
90f0: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
9100: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
9110: 4e 65 78 74 3b 20 20 20 20 2f 2a 20 54 68 65 20  Next;    /* The 
9120: 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
9130: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
9140: 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
9150: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
9160: 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
9170: 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
9180: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
9190: 64 65 72 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f  der;  /* Array o
91a0: 66 20 73 69 7a 65 20 49 6e 64 65 78 2e 6e 43 6f  f size Index.nCo
91b0: 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d 44 45 53 43  lumn. True==DESC
91c0: 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
91d0: 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
91e0: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
91f0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
9200: 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
9210: 78 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  x */.};../*.** E
9220: 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
9230: 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
9240: 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
9250: 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
9260: 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
9270: 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
9280: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
9290: 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
92a0: 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
92b0: 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
92c0: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
92d0: 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
92e0: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
92f0: 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
9300: 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
9310: 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
9320: 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
9330: 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
9340: 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
9350: 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
9360: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
9370: 7a 3b 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68  z; /* Text of th
9380: 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
9390: 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
93a0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 64 79 6e  /.  unsigned dyn
93b0: 20 20 3a 20 31 3b 20 20 20 20 20 20 2f 2a 20 54    : 1;      /* T
93c0: 72 75 65 20 66 6f 72 20 6d 61 6c 6c 6f 63 65 64  rue for malloced
93d0: 20 6d 65 6d 6f 72 79 2c 20 66 61 6c 73 65 20 66   memory, false f
93e0: 6f 72 20 73 74 61 74 69 63 20 2a 2f 0a 20 20 75  or static */.  u
93f0: 6e 73 69 67 6e 65 64 20 6e 20 20 20 20 3a 20 33  nsigned n    : 3
9400: 31 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  1;     /* Number
9410: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
9420: 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
9430: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
9440: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
9450: 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
9460: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
9470: 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
9480: 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
9490: 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
94a0: 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
94b0: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
94c0: 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
94d0: 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
94e0: 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
94f0: 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
9500: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
9510: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
9520: 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
9530: 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
9540: 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
9550: 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
9560: 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
9570: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
9580: 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
9590: 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
95a0: 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
95b0: 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
95c0: 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
95d0: 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
95e0: 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
95f0: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
9600: 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
9610: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
9620: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
9630: 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
9640: 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
9650: 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
9660: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
9670: 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
9680: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
9690: 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
96a0: 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
96b0: 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
96c0: 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
96d0: 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
96e0: 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
9700: 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
9710: 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
9720: 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
9730: 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
9740: 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
9750: 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
9760: 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
9770: 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
9780: 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97a0: 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
97b0: 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
97c0: 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
97d0: 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
97e0: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
97f0: 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
9800: 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
9810: 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
9820: 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
9830: 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
9840: 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
9850: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
9860: 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
9870: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 73 74 72 75   index */.  stru
9880: 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
9890: 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
98a0: 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
98b0: 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
98c0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
98e0: 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
98f0: 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9910: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
9920: 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
9930: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
9940: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
9950: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
9960: 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
9970: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
9980: 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
9990: 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
99a0: 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
99b0: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
99c0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
99d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
99e0: 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
99f0: 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
9a00: 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
9a10: 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a30: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
9a40: 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
9a50: 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
9a60: 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
9a70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
9a80: 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
9a90: 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  l[] */.  int nCo
9aa0: 6c 75 6d 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  lumnAlloc;      
9ab0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
9ac0: 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
9ad0: 72 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  r aCol[] */.  in
9ae0: 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
9af0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9b00: 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
9b10: 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
9b20: 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
9b50: 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
9b60: 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
9b70: 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
9ba0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
9bb0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
9bc0: 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
9bd0: 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
9be0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
9bf0: 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
9c00: 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
9c10: 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
9c20: 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
9c30: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
9c40: 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
9c50: 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
9c60: 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
9c70: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
9c80: 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
9c90: 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
9ca0: 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
9cb0: 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
9cc0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
9cd0: 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
9ce0: 20 2f 2a 20 45 70 68 65 72 6d 65 72 61 6c 20 74   /* Ephermeral t
9cf0: 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
9d00: 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
9d10: 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
9d20: 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
9d30: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9d40: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
9d50: 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Func[] */.  int 
9d60: 6e 46 75 6e 63 41 6c 6c 6f 63 3b 20 20 20 20 20  nFuncAlloc;     
9d70: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9d80: 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
9d90: 20 66 6f 72 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a   for aFunc[] */.
9da0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  };../*.** Each n
9db0: 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
9dc0: 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
9dd0: 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
9de0: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
9df0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
9e00: 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
9e10: 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 69 6e   opcode.  The in
9e20: 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
9e30: 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
9e40: 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
9e50: 73 20 68 65 72 65 2e 20 20 46 6f 72 20 65 78 61  s here.  For exa
9e60: 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
9e70: 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
9e80: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
9e90: 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
9ea0: 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
9eb0: 65 72 61 74 6f 72 2e 20 20 54 68 69 73 20 73 61  erator.  This sa
9ec0: 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
9ed0: 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
9ee0: 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
9ef0: 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
9f00: 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
9f10: 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
9f20: 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
9f30: 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
9f40: 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
9f50: 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  subexpressions. 
9f60: 20 45 78 70 72 2e 70 4c 69 73 74 20 69 73 20 61   Expr.pList is a
9f70: 20 6c 69 73 74 0a 2a 2a 20 6f 66 20 61 72 67 75   list.** of argu
9f80: 6d 65 6e 74 20 69 66 20 74 68 65 20 65 78 70 72  ment if the expr
9f90: 65 73 73 69 6f 6e 20 69 73 20 61 20 66 75 6e 63  ession is a func
9fa0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
9fb0: 2e 74 6f 6b 65 6e 20 69 73 20 74 68 65 20 6f 70  .token is the op
9fc0: 65 72 61 74 6f 72 20 74 6f 6b 65 6e 20 66 6f 72  erator token for
9fd0: 20 74 68 69 73 20 6e 6f 64 65 2e 20 20 46 6f 72   this node.  For
9fe0: 20 73 6f 6d 65 20 65 78 70 72 65 73 73 69 6f 6e   some expression
9ff0: 73 0a 2a 2a 20 74 68 61 74 20 68 61 76 65 20 73  s.** that have s
a000: 75 62 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  ubexpressions, E
a010: 78 70 72 2e 74 6f 6b 65 6e 20 63 61 6e 20 62 65  xpr.token can be
a020: 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65   the complete te
a030: 78 74 20 74 68 61 74 20 67 61 76 65 0a 2a 2a 20  xt that gave.** 
a040: 72 69 73 65 20 74 6f 20 74 68 65 20 45 78 70 72  rise to the Expr
a050: 2e 20 20 49 6e 20 74 68 65 20 6c 61 74 74 65 72  .  In the latter
a060: 20 63 61 73 65 2c 20 74 68 65 20 74 6f 6b 65 6e   case, the token
a070: 20 69 73 20 6d 61 72 6b 65 64 20 61 73 20 62 65   is marked as be
a080: 69 6e 67 0a 2a 2a 20 61 20 63 6f 6d 70 6f 75 6e  ing.** a compoun
a090: 64 20 74 6f 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 41  d token..**.** A
a0a0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
a0b0: 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
a0c0: 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
a0d0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
a0e0: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
a0f0: 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
a100: 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
a110: 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
a120: 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
a130: 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
a140: 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
a150: 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
a160: 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
a170: 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
a180: 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
a190: 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
a1a0: 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
a1b0: 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
a1c0: 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
a1d0: 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
a1e0: 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
a1f0: 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
a200: 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
a210: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
a220: 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
a230: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
a240: 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
a250: 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
a260: 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
a270: 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
a280: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
a290: 72 65 73 73 69 6f 6e 20 69 73 20 61 20 66 75 6e  ression is a fun
a2a0: 63 74 69 6f 6e 2c 20 74 68 65 20 45 78 70 72 2e  ction, the Expr.
a2b0: 69 54 61 62 6c 65 20 69 73 20 61 6e 20 69 6e 74  iTable is an int
a2c0: 65 67 65 72 20 63 6f 64 65 0a 2a 2a 20 72 65 70  eger code.** rep
a2d0: 72 65 73 65 6e 74 69 6e 67 20 77 68 69 63 68 20  resenting which 
a2e0: 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  function.  If th
a2f0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
a300: 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
a310: 62 6c 65 0a 2a 2a 20 6d 61 72 6b 65 72 20 28 61  ble.** marker (a
a320: 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 63   question mark c
a330: 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
a340: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
a350: 29 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 45 78  ) then the.** Ex
a360: 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
a370: 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
a380: 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
a390: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
a3a0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
a3b0: 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
a3c0: 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
a3d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
a3e0: 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
a3f0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
a400: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
a410: 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
a420: 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
a430: 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
a440: 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
a450: 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
a460: 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
a470: 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
a480: 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
a490: 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
a4a0: 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
a4b0: 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
a4c0: 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
a4d0: 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
a4e0: 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
a4f0: 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
a500: 2a 2a 20 54 68 65 20 45 78 70 72 2e 70 53 65 6c  ** The Expr.pSel
a510: 65 63 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ect field points
a520: 20 74 6f 20 61 20 53 45 4c 45 43 54 20 73 74 61   to a SELECT sta
a530: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 53 45 4c  tement.  The SEL
a540: 45 43 54 20 6d 69 67 68 74 0a 2a 2a 20 62 65 20  ECT might.** be 
a550: 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
a560: 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61  d of an IN opera
a570: 74 6f 72 2e 20 20 4f 72 2c 20 69 66 20 61 20 73  tor.  Or, if a s
a580: 63 61 6c 61 72 20 53 45 4c 45 43 54 20 61 70 70  calar SELECT app
a590: 65 61 72 73 0a 2a 2a 20 69 6e 20 61 6e 20 65 78  ears.** in an ex
a5a0: 70 72 65 73 73 69 6f 6e 20 74 68 65 20 6f 70 63  pression the opc
a5b0: 6f 64 65 20 69 73 20 54 4b 5f 53 45 4c 45 43 54  ode is TK_SELECT
a5c0: 20 61 6e 64 20 45 78 70 72 2e 70 53 65 6c 65 63   and Expr.pSelec
a5d0: 74 20 69 73 20 74 68 65 20 6f 6e 6c 79 0a 2a 2a  t is the only.**
a5e0: 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20   operand..**.** 
a5f0: 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
a600: 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
a610: 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
a620: 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
a630: 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
a640: 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
a650: 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
a660: 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
a670: 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
a680: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
a690: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
a6a0: 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
a6b0: 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
a6c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
a6d0: 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
a6e0: 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
a6f0: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
a700: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
a710: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
a720: 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
a730: 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
a740: 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
a750: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
a760: 6f 75 73 20 66 6c 61 67 73 2e 20 20 53 65 65 20  ous flags.  See 
a770: 62 65 6c 6f 77 20 2a 2f 0a 20 20 43 6f 6c 6c 53  below */.  CollS
a780: 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20  eq *pColl;      
a790: 20 20 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69    /* The collati
a7a0: 6f 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 63  on type of the c
a7b0: 6f 6c 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 20 20  olumn or 0 */.  
a7c0: 45 78 70 72 20 2a 70 4c 65 66 74 2c 20 2a 70 52  Expr *pLeft, *pR
a7d0: 69 67 68 74 3b 20 20 2f 2a 20 4c 65 66 74 20 61  ight;  /* Left a
a7e0: 6e 64 20 72 69 67 68 74 20 73 75 62 6e 6f 64 65  nd right subnode
a7f0: 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
a800: 2a 70 4c 69 73 74 3b 20 20 20 20 20 20 20 2f 2a  *pList;       /*
a810: 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
a820: 73 73 69 6f 6e 73 20 75 73 65 64 20 61 73 20 66  ssions used as f
a830: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
a840: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
a850: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72             ** or
a860: 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e 20 28   in "<expr> IN (
a870: 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a  <expr-list)" */.
a880: 20 20 54 6f 6b 65 6e 20 74 6f 6b 65 6e 3b 20 20    Token token;  
a890: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f           /* An o
a8a0: 70 65 72 61 6e 64 20 74 6f 6b 65 6e 20 2a 2f 0a  perand token */.
a8b0: 20 20 54 6f 6b 65 6e 20 73 70 61 6e 3b 20 20 20    Token span;   
a8c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
a8d0: 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65  lete text of the
a8e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
a8f0: 20 69 6e 74 20 69 54 61 62 6c 65 2c 20 69 43 6f   int iTable, iCo
a900: 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 65 6e 20  lumn;   /* When 
a910: 6f 70 3d 3d 54 4b 5f 43 4f 4c 55 4d 4e 2c 20 74  op==TK_COLUMN, t
a920: 68 65 6e 20 74 68 69 73 20 65 78 70 72 20 6e 6f  hen this expr no
a930: 64 65 20 6d 65 61 6e 73 20 74 68 65 0a 20 20 20  de means the.   
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a950: 20 20 20 20 20 20 2a 2a 20 69 43 6f 6c 75 6d 6e        ** iColumn
a960: 2d 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68 65  -th field of the
a970: 20 69 54 61 62 6c 65 2d 74 68 20 74 61 62 6c 65   iTable-th table
a980: 2e 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  . */.  AggInfo *
a990: 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
a9a0: 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
a9b0: 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
a9c0: 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
a9d0: 69 6e 74 20 69 41 67 67 3b 20 20 20 20 20 20 20  int iAgg;       
a9e0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
a9f0: 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
aa00: 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
aa10: 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Func[] */.  int 
aa20: 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
aa30: 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
aa40: 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
aa50: 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
aa60: 6e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  n */.  Select *p
aa70: 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 2f 2a  Select;       /*
aa80: 20 57 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   When the expres
aa90: 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
aaa0: 6c 65 63 74 2e 20 20 41 6c 73 6f 20 74 68 65 0a  lect.  Also the.
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aac0: 20 20 20 20 20 20 20 20 20 2a 2a 20 72 69 67 68           ** righ
aad0: 74 20 73 69 64 65 20 6f 66 20 22 3c 65 78 70 72  t side of "<expr
aae0: 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22  > IN (<select>)"
aaf0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
ab00: 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
ab10: 54 61 62 6c 65 20 66 6f 72 20 4f 50 5f 43 6f 6c  Table for OP_Col
ab20: 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  umn expressions.
ab30: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
ab40: 63 68 65 6d 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  chema;.};../*.**
ab50: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
ab60: 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
ab70: 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
ab80: 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
ab90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
aba0: 72 6f 6d 4a 6f 69 6e 20 20 20 20 20 30 78 30 31  romJoin     0x01
abb0: 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20    /* Originated 
abc0: 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  in ON or USING c
abd0: 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
abe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
abf0: 67 20 20 20 20 20 20 20 20 20 20 30 78 30 32 20  g          0x02 
ac00: 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
ac10: 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
ac20: 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
ac30: 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
ac40: 76 65 64 20 20 20 20 20 30 78 30 34 20 20 2f 2a  ved     0x04  /*
ac50: 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
ac60: 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
ac70: 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
ac80: 5f 45 72 72 6f 72 20 20 20 20 20 20 20 20 30 78  _Error        0x
ac90: 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  08  /* Expressio
aca0: 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
acb0: 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
acc0: 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
acd0: 69 6e 63 74 20 20 20 20 20 30 78 31 30 20 20 2f  inct     0x10  /
ace0: 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
acf0: 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
ad00: 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
ad10: 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
ad20: 63 74 20 20 20 20 30 78 32 30 20 20 2f 2a 20 70  ct    0x20  /* p
ad30: 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
ad40: 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
ad50: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
ad60: 5f 44 65 71 75 6f 74 65 64 20 20 20 20 20 30 78  _Dequoted     0x
ad70: 34 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  40  /* True if t
ad80: 68 65 20 73 74 72 69 6e 67 20 68 61 73 20 62 65  he string has be
ad90: 65 6e 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 23  en dequoted */.#
ada0: 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
adb0: 75 6e 63 20 20 20 20 30 78 38 30 20 20 2f 2a 20  unc    0x80  /* 
adc0: 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
add0: 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
ade0: 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
adf0: 64 65 66 69 6e 65 20 45 50 5f 45 78 70 43 6f 6c  define EP_ExpCol
ae00: 6c 61 74 65 20 20 30 78 31 30 30 20 20 2f 2a 20  late  0x100  /* 
ae10: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
ae20: 63 65 20 73 70 65 63 69 66 69 65 64 20 65 78 70  ce specified exp
ae30: 6c 69 63 69 74 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a  licitly */../*.*
ae40: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
ae50: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
ae60: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
ae70: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
ae80: 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
ae90: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
aea0: 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
aeb0: 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
aec0: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
aed0: 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
aee0: 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  nyProperty(E,P) 
aef0: 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
af00: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
af10: 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
af20: 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
af30: 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
af40: 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
af50: 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
af60: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
af70: 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
af80: 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
af90: 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
afa0: 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
afb0: 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
afc0: 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
afd0: 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
afe0: 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
aff0: 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
b000: 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
b010: 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
b020: 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
b030: 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
b040: 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
b050: 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
b060: 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
b070: 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
b080: 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
b090: 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
b0a0: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
b0b0: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
b0c0: 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
b0d0: 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2f   is not used..*/
b0e0: 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
b0f0: 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
b100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b110: 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
b120: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
b130: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63   */.  int nAlloc
b140: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b150: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
b160: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 65 6c 6f  s allocated belo
b170: 77 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72  w */.  int iECur
b180: 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  sor;          /*
b190: 20 56 44 42 45 20 43 75 72 73 6f 72 20 61 73 73   VDBE Cursor ass
b1a0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
b1b0: 73 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20  s ExprList */.  
b1c0: 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
b1d0: 69 74 65 6d 20 7b 0a 20 20 20 20 45 78 70 72 20  item {.    Expr 
b1e0: 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
b1f0: 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
b200: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
b210: 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
b220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
b230: 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
b240: 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
b250: 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
b260: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
b270: 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
b280: 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
b290: 20 20 20 20 75 38 20 69 73 41 67 67 3b 20 20 20      u8 isAgg;   
b2a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
b2b0: 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 6e  ue if this is an
b2c0: 20 61 67 67 72 65 67 61 74 65 20 6c 69 6b 65 20   aggregate like 
b2d0: 63 6f 75 6e 74 28 2a 29 20 2a 2f 0a 20 20 20 20  count(*) */.    
b2e0: 75 38 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20  u8 done;        
b2f0: 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
b300: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
b310: 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
b320: 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 7d 20  finished */.  } 
b330: 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *a;             
b340: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
b350: 79 20 66 6f 72 20 65 61 63 68 20 65 78 70 72 65  y for each expre
b360: 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ssion */.};../*.
b370: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
b380: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
b390: 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
b3a0: 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
b3b0: 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
b3c0: 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
b3d0: 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
b3e0: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
b3f0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
b400: 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
b410: 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
b420: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
b430: 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
b440: 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
b450: 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
b460: 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
b470: 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
b480: 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
b490: 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
b4a0: 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
b4b0: 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
b4c0: 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
b4d0: 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
b4e0: 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
b4f0: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
b500: 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
b510: 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
b520: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
b530: 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
b540: 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
b550: 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
b560: 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
b570: 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
b580: 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
b590: 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
b5a0: 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
b5b0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
b5c0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
b5d0: 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
b5e0: 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
b5f0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
b600: 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
b610: 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
b620: 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
b630: 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
b640: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
b650: 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
b660: 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
b670: 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
b680: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b690: 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
b6a0: 64 20 66 6f 72 20 61 5b 5d 20 62 65 6c 6f 77 20  d for a[] below 
b6b0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
b6c0: 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
b6d0: 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
b6e0: 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
b6f0: 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
b700: 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
b710: 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
b720: 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
b730: 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
b740: 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
b750: 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
b760: 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
b770: 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
b780: 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
b790: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
b7a0: 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
b7b0: 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
b7c0: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
b7d0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
b7e0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
b7f0: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
b800: 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
b810: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
b820: 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
b830: 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
b840: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
b850: 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
b860: 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
b870: 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
b880: 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
b890: 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
b8a0: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
b8b0: 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
b8c0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
b8d0: 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
b8e0: 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
b8f0: 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
b900: 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
b910: 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
b920: 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
b930: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
b940: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
b950: 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
b960: 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
b970: 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
b980: 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
b990: 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
b9a0: 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
b9b0: 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
b9c0: 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
b9d0: 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
b9e0: 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
b9f0: 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
ba00: 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
ba10: 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
ba20: 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
ba30: 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
ba40: 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
ba50: 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
ba60: 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
ba70: 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
ba80: 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
ba90: 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
baa0: 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
bab0: 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
bac0: 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
bad0: 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
bae0: 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
baf0: 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
bb00: 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
bb10: 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
bb20: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
bb30: 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31  t SrcList {.  i1
bb40: 36 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  6 nSrc;        /
bb50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
bb60: 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
bb70: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
bb80: 75 73 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c  use */.  i16 nAl
bb90: 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
bba0: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
bbb0: 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
bbc0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
bbd0: 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
bbe0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
bbf0: 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
bc00: 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
bc10: 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
bc20: 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
bc30: 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
bc40: 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
bc50: 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
bc60: 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
bc70: 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
bc80: 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
bc90: 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
bca0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
bcb0: 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
bcc0: 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
bcd0: 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
bce0: 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
bcf0: 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
bd00: 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
bd10: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
bd20: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
bd30: 20 75 38 20 69 73 50 6f 70 75 6c 61 74 65 64 3b   u8 isPopulated;
bd40: 20 20 20 2f 2a 20 54 65 6d 70 6f 72 61 72 79 20     /* Temporary 
bd50: 74 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64  table associated
bd60: 20 77 69 74 68 20 53 45 4c 45 43 54 20 69 73 20   with SELECT is 
bd70: 70 6f 70 75 6c 61 74 65 64 20 2a 2f 0a 20 20 20  populated */.   
bd80: 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
bd90: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
bda0: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
bdb0: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
bdc0: 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 69 6e 74  vious */.    int
bdd0: 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
bde0: 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
bdf0: 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
be00: 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
be10: 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
be20: 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
be30: 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
be40: 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
be50: 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
be60: 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
be70: 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
be80: 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
be90: 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
bea0: 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
beb0: 6c 75 6d 6e 20 4e 20 6f 72 20 70 54 61 62 20 69  lumn N or pTab i
bec0: 73 20 75 73 65 64 20 2a 2f 0a 20 20 7d 20 61 5b  s used */.  } a[
bed0: 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
bee0: 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
bef0: 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
bf00: 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
bf10: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
bf20: 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
bf30: 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
bf40: 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
bf50: 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
bf60: 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
bf70: 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
bf80: 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
bf90: 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
bfa0: 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
bfb0: 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
bfc0: 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
bfd0: 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
bfe0: 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
bff0: 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
c000: 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
c010: 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
c020: 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
c030: 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
c040: 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
c050: 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
c060: 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
c070: 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
c080: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
c090: 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
c0a0: 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
c0b0: 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
c0c0: 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
c0d0: 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
c0e0: 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
c0f0: 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
c100: 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 2f   join type */../
c110: 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e 65  *.** For each ne
c120: 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20 57  sted loop in a W
c130: 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70 6c  HERE clause impl
c140: 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
c150: 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74 72  WhereInfo.** str
c160: 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
c170: 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
c180: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
c190: 75 72 65 2e 20 20 54 68 69 73 20 73 74 72 75 63  ure.  This struc
c1a0: 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65 6e  ture.** is inten
c1b0: 64 65 64 20 74 6f 20 62 65 20 70 72 69 76 61 74  ded to be privat
c1c0: 65 20 74 68 65 20 74 68 65 20 77 68 65 72 65 2e  e the the where.
c1d0: 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f  c module and sho
c1e0: 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63  uld not be.** ac
c1f0: 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64  cess or modified
c200: 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65   by other module
c210: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64  s..**.** The pId
c220: 78 49 6e 66 6f 20 61 6e 64 20 70 42 65 73 74 49  xInfo and pBestI
c230: 64 78 20 66 69 65 6c 64 73 20 61 72 65 20 75 73  dx fields are us
c240: 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b 20  ed to help pick 
c250: 74 68 65 20 62 65 73 74 0a 2a 2a 20 69 6e 64 65  the best.** inde
c260: 78 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 20 74  x on a virtual t
c270: 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78 49  able.  The pIdxI
c280: 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e 74  nfo pointer cont
c290: 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a 2a  ains indexing.**
c2a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
c2b0: 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65 20   the i-th table 
c2c0: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
c2d0: 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64 65  se before reorde
c2e0: 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68 65  ring..** All the
c2f0: 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65   pIdxInfo pointe
c300: 72 73 20 61 72 65 20 66 72 65 65 64 20 62 79 20  rs are freed by 
c310: 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29 20  whereInfoFree() 
c320: 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20 54  in where.c..** T
c330: 68 65 20 70 42 65 73 74 49 64 78 20 70 6f 69 6e  he pBestIdx poin
c340: 74 65 72 20 69 73 20 61 20 63 6f 70 79 20 6f 66  ter is a copy of
c350: 20 70 49 64 78 49 6e 66 6f 20 66 6f 72 20 74 68   pIdxInfo for th
c360: 65 20 69 2d 74 68 20 74 61 62 6c 65 20 61 66 74  e i-th table aft
c370: 65 72 0a 2a 2a 20 46 52 4f 4d 20 63 6c 61 75 73  er.** FROM claus
c380: 65 20 6f 72 64 65 72 69 6e 67 2e 20 20 54 68 69  e ordering.  Thi
c390: 73 20 69 73 20 61 20 6c 69 74 74 6c 65 20 63 6f  s is a little co
c3a0: 6e 66 75 73 69 6e 67 20 73 6f 20 49 20 77 69 6c  nfusing so I wil
c3b0: 6c 20 72 65 70 65 61 74 0a 2a 2a 20 69 74 20 69  l repeat.** it i
c3c0: 6e 20 64 69 66 66 65 72 65 6e 74 20 77 6f 72 64  n different word
c3d0: 73 2e 20 20 57 68 65 72 65 49 6e 66 6f 2e 61 5b  s.  WhereInfo.a[
c3e0: 69 5d 2e 70 49 64 78 49 6e 66 6f 20 69 73 20 69  i].pIdxInfo is i
c3f0: 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ndex information
c400: 20 0a 2a 2a 20 66 6f 72 20 57 68 65 72 65 49 6e   .** for WhereIn
c410: 66 6f 2e 70 54 61 62 4c 69 73 74 2e 61 5b 69 5d  fo.pTabList.a[i]
c420: 2e 20 20 57 68 65 72 65 49 6e 66 6f 2e 61 5b 69  .  WhereInfo.a[i
c430: 5d 2e 70 42 65 73 74 49 6e 66 6f 20 69 73 20 74  ].pBestInfo is t
c440: 68 65 0a 2a 2a 20 69 6e 64 65 78 20 69 6e 66 6f  he.** index info
c450: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  rmation for the 
c460: 69 2d 74 68 20 6c 6f 6f 70 20 6f 66 20 74 68 65  i-th loop of the
c470: 20 6a 6f 69 6e 2e 20 20 70 42 65 73 74 49 6e 66   join.  pBestInf
c480: 6f 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20 65  o is always.** e
c490: 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
c4a0: 63 6f 70 79 20 6f 66 20 73 6f 6d 65 20 70 49 64  copy of some pId
c4b0: 78 49 6e 66 6f 2e 20 20 53 6f 20 66 6f 72 20 63  xInfo.  So for c
c4c0: 6c 65 61 6e 75 70 20 69 74 20 69 73 20 0a 2a 2a  leanup it is .**
c4d0: 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 66   sufficient to f
c4e0: 72 65 65 20 61 6c 6c 20 6f 66 20 74 68 65 20 70  ree all of the p
c4f0: 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 73  IdxInfo pointers
c500: 2e 0a 2a 2a 20 0a 2a 2f 0a 73 74 72 75 63 74 20  ..** .*/.struct 
c510: 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 69  WhereLevel {.  i
c520: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
c530: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
c540: 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  try in the FROM 
c550: 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  clause */.  int 
c560: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
c570: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
c580: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
c590: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  level */.  int i
c5a0: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
c5b0: 20 2f 2a 20 46 69 72 73 74 20 6d 65 6d 6f 72 79   /* First memory
c5c0: 20 63 65 6c 6c 20 75 73 65 64 20 62 79 20 74 68   cell used by th
c5d0: 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  is level */.  in
c5e0: 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20  t iLeftJoin;    
c5f0: 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65      /* Memory ce
c600: 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  ll used to imple
c610: 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20  ment LEFT OUTER 
c620: 4a 4f 49 4e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  JOIN */.  Index 
c630: 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  *pIdx;          
c640: 2f 2a 20 49 6e 64 65 78 20 75 73 65 64 2e 20 20  /* Index used.  
c650: 4e 55 4c 4c 20 69 66 20 6e 6f 20 69 6e 64 65 78  NULL if no index
c660: 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62 43 75   */.  int iTabCu
c670: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
c680: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75  he VDBE cursor u
c690: 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
c6a0: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
c6b0: 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20   iIdxCur;       
c6c0: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
c6d0: 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63  ursor used to ac
c6e0: 65 73 73 73 20 70 49 64 78 20 2a 2f 0a 20 20 69  esss pIdx */.  i
c6f0: 6e 74 20 62 72 6b 3b 20 20 20 20 20 20 20 20 20  nt brk;         
c700: 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
c710: 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f  e to break out o
c720: 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20  f the loop */.  
c730: 69 6e 74 20 6e 78 74 3b 20 20 20 20 20 20 20 20  int nxt;        
c740: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
c750: 72 65 20 74 6f 20 73 74 61 72 74 20 74 68 65 20  re to start the 
c760: 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e 61 74  next IN combinat
c770: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6e  ion */.  int con
c780: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
c790: 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63  * Jump here to c
c7a0: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68 65  ontinue with the
c7b0: 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63 6c 65   next loop cycle
c7c0: 20 2a 2f 0a 20 20 69 6e 74 20 74 6f 70 3b 20 20   */.  int top;  
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
c7e0: 69 72 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  irst instruction
c7f0: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f 66 20   of interior of 
c800: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
c810: 74 20 6f 70 2c 20 70 31 2c 20 70 32 3b 20 20 20  t op, p1, p2;   
c820: 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 75 73      /* Opcode us
c830: 65 64 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 20  ed to terminate 
c840: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
c850: 74 20 6e 45 71 3b 20 20 20 20 20 20 20 20 20 20  t nEq;          
c860: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c870: 20 3d 3d 20 6f 72 20 49 4e 20 63 6f 6e 73 74 72   == or IN constr
c880: 61 69 6e 74 73 20 6f 6e 20 74 68 69 73 20 6c 6f  aints on this lo
c890: 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 49 6e 3b  op */.  int nIn;
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c8b0: 20 4e 75 6d 62 65 72 20 6f 66 20 49 4e 20 6f 70   Number of IN op
c8c0: 65 72 61 74 6f 72 73 20 63 6f 6e 73 74 72 61 69  erators constrai
c8d0: 6e 69 6e 67 20 74 68 69 73 20 6c 6f 6f 70 20 2a  ning this loop *
c8e0: 2f 0a 20 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f  /.  struct InLoo
c8f0: 70 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 75 72  p {.    int iCur
c900: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c910: 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
c920: 72 20 75 73 65 64 20 62 79 20 74 68 69 73 20 49  r used by this I
c930: 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20  N operator */.  
c940: 20 20 69 6e 74 20 74 6f 70 41 64 64 72 3b 20 20    int topAddr;  
c950: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20           /* Top 
c960: 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70 20 2a  of the IN loop *
c970: 2f 0a 20 20 7d 20 2a 61 49 6e 4c 6f 6f 70 3b 20  /.  } *aInLoop; 
c980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66            /* Inf
c990: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
c9a0: 61 63 68 20 6e 65 73 74 65 64 20 49 4e 20 6f 70  ach nested IN op
c9b0: 65 72 61 74 6f 72 20 2a 2f 0a 20 20 73 71 6c 69  erator */.  sqli
c9c0: 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
c9d0: 70 42 65 73 74 49 64 78 3b 20 20 2f 2a 20 49 6e  pBestIdx;  /* In
c9e0: 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  dex information 
c9f0: 66 6f 72 20 74 68 69 73 20 6c 65 76 65 6c 20 2a  for this level *
ca00: 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  /..  /* The foll
ca10: 6f 77 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72  owing field is r
ca20: 65 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f  eally not part o
ca30: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65  f the current le
ca40: 76 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77  vel.  But.  ** w
ca50: 65 20 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74  e need a place t
ca60: 6f 20 63 61 63 68 65 20 69 6e 64 65 78 20 69 6e  o cache index in
ca70: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61  formation for ea
ca80: 63 68 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a  ch table in the.
ca90: 20 20 2a 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    ** FROM clause
caa0: 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 4c 65   and the WhereLe
cab0: 76 65 6c 20 73 74 72 75 63 74 75 72 65 20 69 73  vel structure is
cac0: 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
cad0: 61 63 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  ace..  */.  sqli
cae0: 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
caf0: 70 49 64 78 49 6e 66 6f 3b 20 20 2f 2a 20 49 6e  pIdxInfo;  /* In
cb00: 64 65 78 20 69 6e 66 6f 20 66 6f 72 20 6e 2d 74  dex info for n-t
cb10: 68 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  h source table *
cb20: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
cb30: 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f  WHERE clause pro
cb40: 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20  cessing routine 
cb50: 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20  has two halves. 
cb60: 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61   The.** first pa
cb70: 72 74 20 64 6f 65 73 20 74 68 65 20 73 74 61 72  rt does the star
cb80: 74 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c  t of the WHERE l
cb90: 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f  oop and the seco
cba0: 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20  nd.** half does 
cbb0: 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20  the tail of the 
cbc0: 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20  WHERE loop.  An 
cbd0: 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
cbe0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
cbf0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
cc00: 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20   first half and 
cc10: 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74  passed.** into t
cc20: 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74  he second half t
cc30: 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74  o give some cont
cc40: 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63  inuity..*/.struc
cc50: 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20  t WhereInfo {.  
cc60: 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 0a 20  Parse *pParse;. 
cc70: 20 53 72 63 4c 69 73 74 20 2a 70 54 61 62 4c 69   SrcList *pTabLi
cc80: 73 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  st;   /* List of
cc90: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a   tables in the j
cca0: 6f 69 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f  oin */.  int iTo
ccb0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  p;            /*
ccc0: 20 54 68 65 20 76 65 72 79 20 62 65 67 69 6e 6e   The very beginn
ccd0: 69 6e 67 20 6f 66 20 74 68 65 20 57 48 45 52 45  ing of the WHERE
cce0: 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 69   loop */.  int i
ccf0: 43 6f 6e 74 69 6e 75 65 3b 20 20 20 20 20 20 20  Continue;       
cd00: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
cd10: 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65  continue with ne
cd20: 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  xt record */.  i
cd30: 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20  nt iBreak;      
cd40: 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
cd50: 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66   to break out of
cd60: 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69   the loop */.  i
cd70: 6e 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt nLevel;      
cd80: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cd90: 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f 0a   nested loop */.
cda0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f    sqlite3_index_
cdb0: 69 6e 66 6f 20 2a 2a 61 70 49 6e 66 6f 3b 20 20  info **apInfo;  
cdc0: 2f 2a 20 41 72 72 61 79 20 6f 66 20 70 6f 69 6e  /* Array of poin
cdd0: 74 65 72 73 20 74 6f 20 69 6e 64 65 78 20 69 6e  ters to index in
cde0: 66 6f 20 73 74 72 75 63 74 75 72 65 73 20 2a 2f  fo structures */
cdf0: 0a 20 20 57 68 65 72 65 4c 65 76 65 6c 20 61 5b  .  WhereLevel a[
ce00: 31 5d 3b 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72  1];     /* Infor
ce10: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
ce20: 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 74  h nest loop in t
ce30: 68 65 20 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a  he WHERE */.};..
ce40: 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
ce50: 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
ce60: 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
ce70: 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
ce80: 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
ce90: 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
cea0: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
ceb0: 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
cec0: 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
ced0: 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
cee0: 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
cef0: 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
cf00: 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
cf10: 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
cf20: 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
cf30: 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
cf40: 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
cf50: 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
cf60: 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
cf70: 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
cf80: 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
cf90: 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
cfa0: 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
cfb0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
cfc0: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
cfd0: 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
cfe0: 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
cff0: 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
d000: 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
d010: 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
d020: 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
d030: 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
d040: 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
d050: 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
d060: 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
d070: 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
d080: 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
d090: 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
d0a0: 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
d0b0: 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
d0c0: 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
d0d0: 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
d0e0: 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
d0f0: 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
d100: 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
d110: 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
d120: 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
d130: 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
d140: 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
d150: 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
d160: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
d170: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
d180: 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
d190: 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
d1a0: 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
d1b0: 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
d1c0: 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
d1d0: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
d1e0: 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
d1f0: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
d200: 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
d210: 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
d220: 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
d230: 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
d240: 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
d250: 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
d260: 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
d270: 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
d280: 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
d290: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
d2a0: 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
d2b0: 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
d2c0: 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
d2d0: 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
d2e0: 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
d2f0: 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
d300: 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
d310: 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
d320: 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
d330: 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
d340: 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
d350: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ions */.  int nR
d360: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
d370: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
d380: 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
d390: 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
d3a0: 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
d3b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d3c0: 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
d3d0: 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
d3e0: 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
d3f0: 75 38 20 61 6c 6c 6f 77 41 67 67 3b 20 20 20 20  u8 allowAgg;    
d400: 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74       /* Aggregat
d410: 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 6c 6f  e functions allo
d420: 77 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 38  wed here */.  u8
d430: 20 68 61 73 41 67 67 3b 20 20 20 20 20 20 20 20   hasAgg;        
d440: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 67     /* True if ag
d450: 67 72 65 67 61 74 65 73 20 61 72 65 20 73 65 65  gregates are see
d460: 6e 20 2a 2f 0a 20 20 75 38 20 69 73 43 68 65 63  n */.  u8 isChec
d470: 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  k;          /* T
d480: 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
d490: 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
d4a0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
d4b0: 20 20 69 6e 74 20 6e 44 65 70 74 68 3b 20 20 20    int nDepth;   
d4c0: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
d4d0: 6f 66 20 73 75 62 71 75 65 72 79 20 72 65 63 75  of subquery recu
d4e0: 72 73 69 6f 6e 2e 20 31 20 66 6f 72 20 6e 6f 20  rsion. 1 for no 
d4f0: 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 20 20 41  recursion */.  A
d500: 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
d510: 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
d520: 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
d530: 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
d540: 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
d550: 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
d560: 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
d570: 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
d580: 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 7d  r outermost */.}
d590: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
d5a0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
d5b0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
d5c0: 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
d5d0: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
d5e0: 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
d5f0: 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
d600: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
d610: 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
d620: 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
d630: 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
d640: 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
d650: 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
d660: 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
d670: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
d680: 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
d690: 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
d6a0: 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
d6b0: 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
d6c0: 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
d6d0: 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
d6e0: 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
d6f0: 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
d700: 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
d710: 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
d720: 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
d730: 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
d740: 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
d750: 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
d760: 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
d770: 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
d780: 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
d790: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
d7a0: 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
d7b0: 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
d7c0: 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
d7d0: 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
d7e0: 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
d7f0: 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
d800: 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 33  ill in.** the P3
d810: 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
d820: 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
d830: 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
d840: 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
d850: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
d860: 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
d870: 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
d880: 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
d890: 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
d8a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
d8b0: 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
d8c0: 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
d8d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
d8e0: 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
d8f0: 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
d900: 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
d910: 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
d920: 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
d930: 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
d940: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
d950: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
d960: 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
d970: 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
d980: 6e 54 72 61 6e 5b 32 5d 20 63 6f 6e 74 61 69 6e  nTran[2] contain
d990: 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
d9a0: 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
d9b0: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
d9c0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
d9d0: 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
d9e0: 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
d9f0: 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
da00: 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
da10: 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
da20: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
da30: 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
da40: 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
da50: 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 38 20  _EXCEPT */.  u8 
da60: 69 73 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20  isDistinct;     
da70: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
da80: 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  he DISTINCT keyw
da90: 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
daa0: 2f 0a 20 20 75 38 20 69 73 52 65 73 6f 6c 76 65  /.  u8 isResolve
dab0: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  d;         /* Tr
dac0: 75 65 20 6f 6e 63 65 20 73 71 6c 69 74 65 33 53  ue once sqlite3S
dad0: 65 6c 65 63 74 52 65 73 6f 6c 76 65 28 29 20 68  electResolve() h
dae0: 61 73 20 72 75 6e 2e 20 2a 2f 0a 20 20 75 38 20  as run. */.  u8 
daf0: 69 73 41 67 67 3b 20 20 20 20 20 20 20 20 20 20  isAgg;          
db00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
db10: 68 69 73 20 69 73 20 61 6e 20 61 67 67 72 65 67  his is an aggreg
db20: 61 74 65 20 71 75 65 72 79 20 2a 2f 0a 20 20 75  ate query */.  u
db30: 38 20 75 73 65 73 45 70 68 6d 3b 20 20 20 20 20  8 usesEphm;     
db40: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
db50: 20 75 73 65 73 20 61 6e 20 4f 70 65 6e 45 70 68   uses an OpenEph
db60: 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
db70: 0a 20 20 75 38 20 64 69 73 61 6c 6c 6f 77 4f 72  .  u8 disallowOr
db80: 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 44 6f 20  derBy;    /* Do 
db90: 6e 6f 74 20 61 6c 6c 6f 77 20 61 6e 20 4f 52 44  not allow an ORD
dba0: 45 52 20 42 59 20 74 6f 20 62 65 20 61 74 74 61  ER BY to be atta
dbb0: 63 68 65 64 20 69 66 20 54 52 55 45 20 2a 2f 0a  ched if TRUE */.
dbc0: 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
dbd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
dbe0: 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
dbf0: 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
dc00: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
dc10: 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
dc20: 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
dc30: 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
dc40: 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
dc50: 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
dc60: 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
dc70: 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
dc80: 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
dc90: 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
dca0: 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
dcb0: 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
dcc0: 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
dcd0: 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
dce0: 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
dcf0: 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
dd00: 0a 20 20 53 65 6c 65 63 74 20 2a 70 52 69 67 68  .  Select *pRigh
dd10: 74 6d 6f 73 74 3b 20 20 20 20 2f 2a 20 52 69 67  tmost;    /* Rig
dd20: 68 74 2d 6d 6f 73 74 20 73 65 6c 65 63 74 20 69  ht-most select i
dd30: 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
dd40: 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
dd50: 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
dd60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
dd70: 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
dd80: 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
dd90: 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ed. */.  Expr *p
dda0: 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20  Offset;         
ddb0: 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  /* OFFSET expres
ddc0: 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
ddd0: 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
dde0: 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
ddf0: 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
de00: 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
de10: 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
de20: 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
de30: 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
de40: 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [3];   /* OP_Ope
de50: 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
de60: 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
de70: 65 6c 65 63 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  elect */.};../*.
de80: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
de90: 66 20 61 20 73 65 6c 65 63 74 20 63 61 6e 20 62  f a select can b
dea0: 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
deb0: 20 73 65 76 65 72 61 6c 20 77 61 79 73 2e 0a 2a   several ways..*
dec0: 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
ded0: 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
dee0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
def0: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
df00: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
df10: 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
df20: 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
df30: 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
df40: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
df50: 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
df60: 20 33 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   3  /* Do not sa
df70: 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
df80: 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54  nywhere */../* T
df90: 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
dfa0: 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
dfb0: 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
dfc0: 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
dfd0: 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
dfe0: 29 20 28 58 3c 3d 53 52 54 5f 44 69 73 63 61 72  ) (X<=SRT_Discar
dff0: 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  d)..#define SRT_
e000: 43 61 6c 6c 62 61 63 6b 20 20 20 20 20 34 20 20  Callback     4  
e010: 2f 2a 20 49 6e 76 6f 6b 65 20 61 20 63 61 6c 6c  /* Invoke a call
e020: 62 61 63 6b 20 77 69 74 68 20 65 61 63 68 20 72  back with each r
e030: 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
e040: 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
e050: 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53           5  /* S
e060: 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
e070: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
e080: 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
e090: 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a 20 53           6  /* S
e0a0: 74 6f 72 65 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 65  tore non-null re
e0b0: 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
e0c0: 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
e0d0: 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
e0e0: 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
e0f0: 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
e100: 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
e110: 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
e120: 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
e130: 20 20 20 20 20 38 20 20 2f 2a 20 43 72 65 61 74       8  /* Creat
e140: 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
e150: 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
e160: 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
e170: 69 6e 65 20 53 52 54 5f 53 75 62 72 6f 75 74 69  ine SRT_Subrouti
e180: 6e 65 20 20 20 39 20 20 2f 2a 20 43 61 6c 6c 20  ne   9  /* Call 
e190: 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  a subroutine to 
e1a0: 68 61 6e 64 6c 65 20 72 65 73 75 6c 74 73 20 2a  handle results *
e1b0: 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
e1c0: 69 73 74 73 20 20 20 20 20 20 31 30 20 20 2f 2a  ists      10  /*
e1d0: 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
e1e0: 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
e1f0: 70 74 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  pty */../*.** An
e200: 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
e210: 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
e220: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
e230: 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
e240: 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
e250: 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
e260: 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
e270: 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
e280: 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
e290: 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
e2a0: 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
e2b0: 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
e2c0: 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
e2d0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
e2e0: 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
e2f0: 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
e300: 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
e310: 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
e320: 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
e330: 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
e340: 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
e350: 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
e360: 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
e370: 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
e380: 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
e390: 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
e3a0: 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
e3b0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
e3c0: 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
e3d0: 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
e3e0: 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
e3f0: 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
e400: 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20  che .** feature 
e410: 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
e420: 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
e430: 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
e440: 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
e450: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
e460: 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
e470: 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
e480: 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
e490: 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
e4a0: 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
e4b0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
e4c0: 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
e4d0: 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
e4e0: 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
e4f0: 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
e500: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
e510: 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
e520: 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
e530: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
e540: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
e550: 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
e560: 75 74 69 6f 6e 20 2a 2f 0a 20 20 63 68 61 72 20  ution */.  char 
e570: 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
e580: 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
e590: 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
e5a0: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
e5b0: 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
e5c0: 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
e5d0: 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
e5e0: 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
e5f0: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
e600: 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
e610: 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
e620: 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
e630: 38 20 6e 61 6d 65 43 6c 61 73 68 3b 20 20 20 20  8 nameClash;    
e640: 20 20 20 20 2f 2a 20 41 20 70 65 72 6d 61 6e 65      /* A permane
e650: 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65 20 63 6c  nt table name cl
e660: 61 73 68 65 73 20 77 69 74 68 20 74 65 6d 70 20  ashes with temp 
e670: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
e680: 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
e690: 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
e6a0: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
e6b0: 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
e6c0: 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
e6d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
e6e0: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
e6f0: 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
e700: 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
e710: 6f 72 20 2a 2f 0a 20 20 75 38 20 70 61 72 73 65  or */.  u8 parse
e720: 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
e730: 54 72 75 65 20 69 66 20 61 20 70 61 72 73 69 6e  True if a parsin
e740: 67 20 65 72 72 6f 72 20 68 61 73 20 62 65 65 6e  g error has been
e750: 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
e760: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
e770: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
e780: 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
e790: 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
e7a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e7b0: 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
e7c0: 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
e7d0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e7f0: 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
e800: 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
e810: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
e820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e830: 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
e840: 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
e850: 6e 74 20 63 6b 4f 66 66 73 65 74 3b 20 20 20 20  nt ckOffset;    
e860: 20 20 20 20 2f 2a 20 53 74 61 63 6b 20 6f 66 66      /* Stack off
e870: 73 65 74 20 74 6f 20 64 61 74 61 20 75 73 65 64  set to data used
e880: 20 62 79 20 43 48 45 43 4b 20 63 6f 6e 73 74 72   by CHECK constr
e890: 61 69 6e 74 73 20 2a 2f 0a 20 20 75 33 32 20 77  aints */.  u32 w
e8a0: 72 69 74 65 4d 61 73 6b 3b 20 20 20 20 20 20 20  riteMask;       
e8b0: 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
e8c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
e8d0: 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
e8e0: 2a 2f 0a 20 20 75 33 32 20 63 6f 6f 6b 69 65 4d  */.  u32 cookieM
e8f0: 61 73 6b 3b 20 20 20 20 20 20 2f 2a 20 42 69 74  ask;      /* Bit
e900: 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
e910: 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
e920: 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
e930: 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41  eGoto;      /* A
e940: 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74  ddress of OP_Got
e950: 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69  o to cookie veri
e960: 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20  fier subroutine 
e970: 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
e980: 61 6c 75 65 5b 4d 41 58 5f 41 54 54 41 43 48 45  alue[MAX_ATTACHE
e990: 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73  D+2];  /* Values
e9a0: 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76   of cookies to v
e9b0: 65 72 69 66 79 20 2a 2f 0a 23 69 66 6e 64 65 66  erify */.#ifndef
e9c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
e9d0: 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
e9e0: 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
e9f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ea00: 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
ea10: 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
ea20: 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
ea30: 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
ea40: 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
ea50: 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
ea60: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 41 62  .#endif..  /* Ab
ea70: 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
ea80: 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
ea90: 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
eaa0: 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
eab0: 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
eac0: 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69  ecursion */..  i
ead0: 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
eae0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
eaf0: 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
eb00: 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
eb10: 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
eb20: 56 61 72 45 78 70 72 3b 20 20 20 20 20 20 20 20  VarExpr;        
eb30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
eb40: 64 20 73 6c 6f 74 73 20 69 6e 20 61 70 56 61 72  d slots in apVar
eb50: 45 78 70 72 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Expr[] */.  int 
eb60: 6e 56 61 72 45 78 70 72 41 6c 6c 6f 63 3b 20 20  nVarExprAlloc;  
eb70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
eb80: 6c 6f 63 61 74 65 64 20 73 6c 6f 74 73 20 69 6e  located slots in
eb90: 20 61 70 56 61 72 45 78 70 72 5b 5d 20 2a 2f 0a   apVarExpr[] */.
eba0: 20 20 45 78 70 72 20 2a 2a 61 70 56 61 72 45 78    Expr **apVarEx
ebb0: 70 72 3b 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  pr;    /* Pointe
ebc0: 72 73 20 74 6f 20 3a 61 61 61 20 61 6e 64 20 24  rs to :aaa and $
ebd0: 61 61 61 61 20 77 69 6c 64 63 61 72 64 20 65 78  aaaa wildcard ex
ebe0: 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 75  pressions */.  u
ebf0: 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
ec00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
ec10: 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
ec20: 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
ec30: 71 75 65 72 79 20 2a 2f 0a 20 20 54 6f 6b 65 6e  query */.  Token
ec40: 20 73 45 72 72 54 6f 6b 65 6e 3b 20 20 20 20 20   sErrToken;     
ec50: 2f 2a 20 54 68 65 20 74 6f 6b 65 6e 20 61 74 20  /* The token at 
ec60: 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
ec70: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 20 20 54 6f  occurred */.  To
ec80: 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
ec90: 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
eca0: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
ecb0: 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
ecc0: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
ecd0: 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 68 65  Token;    /* The
ece0: 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
ecf0: 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ed */.  const ch
ed00: 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 2f 2a 20  ar *zSql;    /* 
ed10: 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 2a 2f 0a  All SQL text */.
ed20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
ed30: 61 69 6c 3b 20 20 20 2f 2a 20 41 6c 6c 20 53 51  ail;   /* All SQ
ed40: 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
ed50: 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
ed60: 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
ed70: 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
ed80: 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
ed90: 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
eda0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
edb0: 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
edc0: 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
edd0: 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
ede0: 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
edf0: 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
ee00: 54 72 69 67 67 65 72 53 74 61 63 6b 20 2a 74 72  TriggerStack *tr
ee10: 69 67 53 74 61 63 6b 3b 20 20 2f 2a 20 54 72 69  igStack;  /* Tri
ee20: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 62 65 69  gger actions bei
ee30: 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f  ng coded */.  co
ee40: 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
ee50: 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
ee60: 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
ee70: 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
ee80: 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
ee90: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
eea0: 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
eeb0: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
eec0: 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
eed0: 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
eee0: 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
eef0: 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
ef00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
ef10: 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
ef20: 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
ef30: 62 28 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  b() */.  Table *
ef40: 70 56 69 72 74 75 61 6c 4c 6f 63 6b 3b 20 20 20  pVirtualLock;   
ef50: 20 20 20 20 2f 2a 20 52 65 71 75 69 72 65 20 76      /* Require v
ef60: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6c 6f 63  irtual table loc
ef70: 6b 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 20  k on this table 
ef80: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 69  */.#endif.};..#i
ef90: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
efa0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
efb0: 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
efc0: 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
efd0: 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
efe0: 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
eff0: 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
f000: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
f010: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f020: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
f030: 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
f040: 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
f050: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
f060: 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
f070: 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
f080: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
f090: 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
f0a0: 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
f0b0: 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
f0c0: 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
f0d0: 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
f0e0: 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
f0f0: 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
f100: 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
f110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f120: 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
f130: 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
f140: 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
f150: 73 20 66 6f 72 20 50 32 20 76 61 6c 75 65 20 69  s for P2 value i
f160: 6e 20 4f 50 5f 49 6e 73 65 72 74 20 61 6e 64 20  n OP_Insert and 
f170: 4f 50 5f 44 65 6c 65 74 65 0a 2a 2f 0a 23 64 65  OP_Delete.*/.#de
f180: 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
f190: 4e 47 45 20 20 20 31 20 20 20 20 2f 2a 20 53 65  NGE   1    /* Se
f1a0: 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
f1b0: 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69  nChange */.#defi
f1c0: 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
f1d0: 57 49 44 20 32 20 20 20 20 2f 2a 20 53 65 74 20  WID 2    /* Set 
f1e0: 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
f1f0: 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
f200: 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
f210: 54 45 20 20 34 20 20 20 20 2f 2a 20 54 68 69 73  TE  4    /* This
f220: 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
f230: 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
f240: 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
f250: 50 45 4e 44 20 20 20 20 38 20 20 20 20 2f 2a 20  PEND    8    /* 
f260: 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
f270: 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
f280: 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
f290: 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
f2a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
f2b0: 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
f2c0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
f2d0: 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
f2e0: 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  er. . *. * Point
f2f0: 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
f300: 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
f310: 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
f320: 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
f330: 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
f340: 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
f350: 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
f360: 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
f370: 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64  nts the . *    d
f380: 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
f390: 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
f3a0: 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
f3b0: 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
f3c0: 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
f3d0: 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
f3e0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
f3f0: 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
f400: 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
f410: 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
f420: 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
f430: 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
f440: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
f450: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
f460: 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
f470: 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
f480: 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
f490: 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
f4a0: 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
f4b0: 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
f4c0: 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
f4d0: 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
f4e0: 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
f4f0: 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
f500: 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
f510: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
f520: 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
f530: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
f540: 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
f550: 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
f560: 72 20 2a 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  r *name;        
f570: 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
f580: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5a0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
f5b0: 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
f5c0: 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
f5d0: 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
f5e0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
f5f0: 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
f600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f610: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
f620: 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
f630: 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
f640: 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
f650: 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
f660: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
f670: 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
f680: 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
f690: 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
f6a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
f6b0: 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
f6c0: 20 65 78 70 72 65 73 69 6f 6e 20 28 6d 61 79 20   expresion (may 
f6d0: 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
f6e0: 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
f6f0: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
f700: 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
f710: 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
f720: 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f740: 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
f750: 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
f760: 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 66   here */.  int f
f770: 6f 72 65 61 63 68 3b 20 20 20 20 20 20 20 20 20  oreach;         
f780: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
f790: 52 4f 57 20 6f 72 20 54 4b 5f 53 54 41 54 45 4d  ROW or TK_STATEM
f7a0: 45 4e 54 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 6e  ENT */.  Token n
f7b0: 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
f7c0: 20 2f 2a 20 54 6f 6b 65 6e 20 63 6f 6e 74 61 69   /* Token contai
f7d0: 6e 69 6e 67 20 7a 4e 61 6d 65 2e 20 55 73 65 20  ning zName. Use 
f7e0: 64 75 72 69 6e 67 20 70 61 72 73 69 6e 67 20 6f  during parsing o
f7f0: 6e 6c 79 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  nly */.  Schema 
f800: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
f810: 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
f820: 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
f830: 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
f840: 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
f850: 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
f860: 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
f870: 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
f880: 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
f890: 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
f8a0: 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
f8c0: 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
f8d0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
f8e0: 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
f8f0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
f900: 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
f910: 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
f920: 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
f930: 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
f940: 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
f950: 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
f960: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20  etermine which. 
f970: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
f980: 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
f990: 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
f9a0: 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
f9b0: 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
f9c0: 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
f9d0: 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
f9e0: 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
f9f0: 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
fa00: 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
fa10: 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
fa20: 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
fa30: 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
fa40: 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
fa50: 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
fa60: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
fa70: 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
fa80: 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
fa90: 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
faa0: 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a  er-program. . *.
fab0: 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
fac0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
fad0: 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
fae0: 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
faf0: 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
fb00: 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
fb10: 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
fb20: 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
fb30: 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
fb40: 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63  of the . * assoc
fb50: 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
fb60: 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
fb70: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
fb80: 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
fb90: 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
fba0: 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
fbb0: 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
fbc0: 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22  . * . * The "op"
fbd0: 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
fbe0: 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
fbf0: 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
fc00: 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
fc10: 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
fc20: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
fc30: 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
fc40: 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
fc50: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
fc60: 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  e . * value of "
fc70: 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
fc80: 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
fc90: 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
fca0: 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
fcb0: 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
fcc0: 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
fcd0: 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
fce0: 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
fcf0: 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
fd00: 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
fd10: 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
fd20: 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
fd30: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
fd40: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
fd50: 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
fd60: 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
fd70: 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
fd80: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
fd90: 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
fda0: 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
fdb0: 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
fdc0: 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
fdd0: 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
fde0: 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
fdf0: 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
fe00: 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
fe10: 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
fe20: 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
fe30: 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
fe40: 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
fe50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
fe60: 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
fe70: 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
fe90: 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
fea0: 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
feb0: 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
fec0: 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
fed0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
fee0: 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
fef0: 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65  DELETE). * targe
ff00: 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
ff10: 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 61 6d 65  holding the name
ff20: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
ff30: 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
ff40: 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
ff50: 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
ff60: 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
ff70: 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
ff80: 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
ffa0: 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a  rwise NULL.. * .
ffb0: 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
ffc0: 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ATE). * target  
ffd0: 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
ffe0: 64 69 6e 67 20 74 68 65 20 6e 61 6d 65 20 6f 66  ding the name of
fff0: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
10000 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a  date rows of.. *
10010 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
10020 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
10030 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
10040 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
10050 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
10060 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
10070 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
10080 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
10090 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
100a0 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
100b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
100c0 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
100d0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
100e0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
100f0 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
10100 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
10110 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
10120 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20     argument.. * 
10130 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
10140 67 65 72 53 74 65 70 20 7b 0a 20 20 69 6e 74 20  gerStep {.  int 
10150 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
10160 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
10170 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
10180 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
10190 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20 6f  ELECT */.  int o
101a0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
101b0 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
101c0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
101d0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
101e0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
101f0 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
10200 20 70 61 72 74 20 6f 66 20 2a 2f 0a 0a 20 20 53   part of */..  S
10210 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
10220 20 20 20 20 2f 2a 20 56 61 6c 69 64 20 66 6f 72      /* Valid for
10230 20 53 45 4c 45 43 54 20 61 6e 64 20 73 6f 6d 65   SELECT and some
10240 74 69 6d 65 73 20 0a 09 09 09 20 20 49 4e 53 45  times ....  INSE
10250 52 54 20 73 74 65 70 73 20 28 77 68 65 6e 20 70  RT steps (when p
10260 45 78 70 72 4c 69 73 74 20 3d 3d 20 30 29 20 2a  ExprList == 0) *
10270 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74  /.  Token target
10280 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69  ;        /* Vali
10290 64 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  d for DELETE, UP
102a0 44 41 54 45 2c 20 49 4e 53 45 52 54 20 73 74 65  DATE, INSERT ste
102b0 70 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ps */.  Expr *pW
102c0 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
102d0 56 61 6c 69 64 20 66 6f 72 20 44 45 4c 45 54 45  Valid for DELETE
102e0 2c 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  , UPDATE steps *
102f0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
10300 78 70 72 4c 69 73 74 3b 20 2f 2a 20 56 61 6c 69  xprList; /* Vali
10310 64 20 66 6f 72 20 55 50 44 41 54 45 20 73 74 61  d for UPDATE sta
10320 74 65 6d 65 6e 74 73 20 61 6e 64 20 73 6f 6d 65  tements and some
10330 74 69 6d 65 73 20 0a 09 09 09 20 20 20 49 4e 53  times ....   INS
10340 45 52 54 20 73 74 65 70 73 20 28 77 68 65 6e 20  ERT steps (when 
10350 70 53 65 6c 65 63 74 20 3d 3d 20 30 29 20 20 20  pSelect == 0)   
10360 20 20 20 20 20 20 2a 2f 0a 20 20 49 64 4c 69 73        */.  IdLis
10370 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
10380 2f 2a 20 56 61 6c 69 64 20 66 6f 72 20 49 4e 53  /* Valid for INS
10390 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
103a0 6e 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  nly */.  Trigger
103b0 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
103c0 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
103d0 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
103e0 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
103f0 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
10400 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
10410 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
10420 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
10430 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
10440 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
10450 72 53 74 61 63 6b 20 73 74 6f 72 65 73 20 69 6e  rStack stores in
10460 66 6f 72 6d 61 74 69 6f 6e 20 72 65 71 75 69 72  formation requir
10470 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 0a 20  ed during code. 
10480 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  * generation of 
10490 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
104a0 20 70 72 6f 67 72 61 6d 2e 20 57 68 69 6c 65 20   program. While 
104b0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
104c0 72 61 6d 20 69 73 20 62 65 69 6e 67 0a 20 2a 20  ram is being. * 
104d0 63 6f 64 65 64 2c 20 69 74 73 20 61 73 73 6f 63  coded, its assoc
104e0 69 61 74 65 64 20 54 72 69 67 67 65 72 53 74 61  iated TriggerSta
104f0 63 6b 20 69 6e 73 74 61 6e 63 65 20 69 73 20 70  ck instance is p
10500 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 74 68 65  ointed to by the
10510 0a 20 2a 20 22 70 54 72 69 67 67 65 72 53 74 61  . * "pTriggerSta
10520 63 6b 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ck" member of th
10530 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
10540 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 70 54 61  e.. *. * The pTa
10550 62 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  b member points 
10560 74 6f 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  to the table tha
10570 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  t triggers are b
10580 65 69 6e 67 20 63 6f 64 65 64 20 6f 6e 2e 20 54  eing coded on. T
10590 68 65 20 0a 20 2a 20 6e 65 77 49 64 78 20 6d 65  he . * newIdx me
105a0 6d 62 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 68  mber contains th
105b0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 76  e index of the v
105c0 64 62 65 20 63 75 72 73 6f 72 20 74 68 61 74 20  dbe cursor that 
105d0 70 6f 69 6e 74 73 20 61 74 20 74 68 65 20 74 65  points at the te
105e0 6d 70 0a 20 2a 20 74 61 62 6c 65 20 74 68 61 74  mp. * table that
105f0 20 73 74 6f 72 65 73 20 74 68 65 20 6e 65 77 2e   stores the new.
10600 2a 20 72 65 66 65 72 65 6e 63 65 73 2e 20 49 66  * references. If
10610 20 6e 65 77 2e 2a 20 72 65 66 65 72 65 6e 63 65   new.* reference
10620 73 20 61 72 65 20 6e 6f 74 20 76 61 6c 69 64 0a  s are not valid.
10630 20 2a 20 66 6f 72 20 74 68 65 20 74 72 69 67 67   * for the trigg
10640 65 72 20 62 65 69 6e 67 20 63 6f 64 65 64 20 28  er being coded (
10650 66 6f 72 20 65 78 61 6d 70 6c 65 20 61 6e 20 4f  for example an O
10660 4e 20 44 45 4c 45 54 45 20 74 72 69 67 67 65 72  N DELETE trigger
10670 29 2c 20 74 68 65 6e 20 6e 65 77 49 64 78 0a 20  ), then newIdx. 
10680 2a 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20  * is set to -1. 
10690 54 68 65 20 6f 6c 64 49 64 78 20 6d 65 6d 62 65  The oldIdx membe
106a0 72 20 69 73 20 61 6e 61 6c 6f 67 6f 75 73 20 74  r is analogous t
106b0 6f 20 6e 65 77 49 64 78 2c 20 66 6f 72 20 6f 6c  o newIdx, for ol
106c0 64 2e 2a 20 72 65 66 65 72 65 6e 63 65 73 2e 0a  d.* references..
106d0 20 2a 0a 20 2a 20 54 68 65 20 4f 4e 20 43 4f 4e   *. * The ON CON
106e0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 74 6f 20  FLICT policy to 
106f0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
10700 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
10710 73 74 65 70 73 20 69 73 20 73 74 6f 72 65 64 20  steps is stored 
10720 0a 20 2a 20 61 73 20 74 68 65 20 6f 72 63 6f 6e  . * as the orcon
10730 66 20 6d 65 6d 62 65 72 2e 20 49 66 20 74 68 69  f member. If thi
10740 73 20 69 73 20 4f 45 5f 44 65 66 61 75 6c 74 2c  s is OE_Default,
10750 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 43 4f 4e   then the ON CON
10760 46 4c 49 43 54 20 63 6c 61 75 73 65 20 0a 20 2a  FLICT clause . *
10770 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 69   specified for i
10780 6e 64 69 76 69 64 75 61 6c 20 74 72 69 67 67 65  ndividual trigge
10790 72 73 20 73 74 65 70 73 20 69 73 20 75 73 65 64  rs steps is used
107a0 2e 0a 20 2a 0a 20 2a 20 73 74 72 75 63 74 20 54  .. *. * struct T
107b0 72 69 67 67 65 72 53 74 61 63 6b 20 68 61 73 20  riggerStack has 
107c0 61 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  a "pNext" member
107d0 2c 20 74 6f 20 61 6c 6c 6f 77 20 6c 69 6e 6b 65  , to allow linke
107e0 64 20 6c 69 73 74 73 20 74 6f 20 62 65 0a 20 2a  d lists to be. *
107f0 20 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 57 68   constructed. Wh
10800 65 6e 20 63 6f 64 69 6e 67 20 6e 65 73 74 65 64  en coding nested
10810 20 74 72 69 67 67 65 72 73 20 28 74 72 69 67 67   triggers (trigg
10820 65 72 73 20 66 69 72 65 64 20 62 79 20 6f 74 68  ers fired by oth
10830 65 72 20 74 72 69 67 67 65 72 73 29 0a 20 2a 20  er triggers). * 
10840 65 61 63 68 20 6e 65 73 74 65 64 20 74 72 69 67  each nested trig
10850 67 65 72 20 73 74 6f 72 65 73 20 69 74 73 20 70  ger stores its p
10860 61 72 65 6e 74 20 74 72 69 67 67 65 72 27 73 20  arent trigger's 
10870 54 72 69 67 67 65 72 53 74 61 63 6b 20 61 73 20  TriggerStack as 
10880 74 68 65 20 22 70 4e 65 78 74 22 20 0a 20 2a 20  the "pNext" . * 
10890 70 6f 69 6e 74 65 72 2e 20 4f 6e 63 65 20 74 68  pointer. Once th
108a0 65 20 6e 65 73 74 65 64 20 74 72 69 67 67 65 72  e nested trigger
108b0 20 68 61 73 20 62 65 65 6e 20 63 6f 64 65 64 2c   has been coded,
108c0 20 74 68 65 20 70 4e 65 78 74 20 76 61 6c 75 65   the pNext value
108d0 20 69 73 20 72 65 73 74 6f 72 65 64 0a 20 2a 20   is restored. * 
108e0 74 6f 20 74 68 65 20 70 54 72 69 67 67 65 72 53  to the pTriggerS
108f0 74 61 63 6b 20 6d 65 6d 62 65 72 20 6f 66 20 74  tack member of t
10900 68 65 20 50 61 72 73 65 20 73 74 75 63 74 75 72  he Parse stuctur
10910 65 20 61 6e 64 20 63 6f 64 69 6e 67 20 6f 66 20  e and coding of 
10920 74 68 65 20 70 61 72 65 6e 74 0a 20 2a 20 74 72  the parent. * tr
10930 69 67 67 65 72 20 63 6f 6e 74 69 6e 75 65 73 2e  igger continues.
10940 0a 20 2a 0a 20 2a 20 42 65 66 6f 72 65 20 61 20  . *. * Before a 
10950 6e 65 73 74 65 64 20 74 72 69 67 67 65 72 20 69  nested trigger i
10960 73 20 63 6f 64 65 64 2c 20 74 68 65 20 6c 69 6e  s coded, the lin
10970 6b 65 64 20 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked list pointed
10980 20 74 6f 20 62 79 20 74 68 65 20 0a 20 2a 20 70   to by the . * p
10990 54 72 69 67 67 65 72 53 74 61 63 6b 20 69 73 20  TriggerStack is 
109a0 73 63 61 6e 6e 65 64 20 74 6f 20 65 6e 73 75 72  scanned to ensur
109b0 65 20 74 68 61 74 20 74 68 65 20 74 72 69 67 67  e that the trigg
109c0 65 72 20 69 73 20 6e 6f 74 20 61 62 6f 75 74 20  er is not about 
109d0 74 6f 20 62 65 20 63 6f 64 65 64 0a 20 2a 20 72  to be coded. * r
109e0 65 63 75 72 73 69 76 65 6c 79 2e 20 49 66 20 74  ecursively. If t
109f0 68 69 73 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73  his condition is
10a00 20 64 65 74 65 63 74 65 64 2c 20 74 68 65 20 6e   detected, the n
10a10 65 73 74 65 64 20 74 72 69 67 67 65 72 20 69 73  ested trigger is
10a20 20 6e 6f 74 20 63 6f 64 65 64 2e 0a 20 2a 2f 0a   not coded.. */.
10a30 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
10a40 61 63 6b 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  ack {.  Table *p
10a50 54 61 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Tab;         /* 
10a60 54 61 62 6c 65 20 74 68 61 74 20 74 72 69 67 67  Table that trigg
10a70 65 72 73 20 61 72 65 20 63 75 72 72 65 6e 74 6c  ers are currentl
10a80 79 20 62 65 69 6e 67 20 63 6f 64 65 64 20 6f 6e  y being coded on
10a90 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 77 49 64 78   */.  int newIdx
10aa0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
10ab0 64 65 78 20 6f 66 20 76 64 62 65 20 63 75 72 73  dex of vdbe curs
10ac0 6f 72 20 74 6f 20 22 6e 65 77 22 20 74 65 6d 70  or to "new" temp
10ad0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
10ae0 6f 6c 64 49 64 78 3b 20 20 20 20 20 20 20 20 20  oldIdx;         
10af0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 76 64 62   /* Index of vdb
10b00 65 20 63 75 72 73 6f 72 20 74 6f 20 22 6f 6c 64  e cursor to "old
10b10 22 20 74 65 6d 70 20 74 61 62 6c 65 20 2a 2f 0a  " temp table */.
10b20 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
10b30 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
10b40 74 20 6f 72 63 6f 6e 66 20 70 6f 6c 69 63 79 20  t orconf policy 
10b50 2a 2f 0a 20 20 69 6e 74 20 69 67 6e 6f 72 65 4a  */.  int ignoreJ
10b60 75 6d 70 3b 20 20 20 20 20 20 2f 2a 20 77 68 65  ump;      /* whe
10b70 72 65 20 74 6f 20 6a 75 6d 70 20 74 6f 20 66 6f  re to jump to fo
10b80 72 20 61 20 52 41 49 53 45 28 49 47 4e 4f 52 45  r a RAISE(IGNORE
10b90 29 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  ) */.  Trigger *
10ba0 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 54  pTrigger;   /* T
10bb0 68 65 20 74 72 69 67 67 65 72 20 63 75 72 72 65  he trigger curre
10bc0 6e 74 6c 79 20 62 65 69 6e 67 20 63 6f 64 65 64  ntly being coded
10bd0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 61   */.  TriggerSta
10be0 63 6b 20 2a 70 4e 65 78 74 3b 20 2f 2a 20 4e 65  ck *pNext; /* Ne
10bf0 78 74 20 74 72 69 67 67 65 72 20 64 6f 77 6e 20  xt trigger down 
10c00 6f 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 73  on the trigger s
10c10 74 61 63 6b 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tack */.};../*.*
10c20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
10c30 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
10c40 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
10c50 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
10c60 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
10c70 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
10c80 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
10c90 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
10ca0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
10cb0 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79  xplicit.  .*/.ty
10cc0 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
10cd0 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
10ce0 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
10cf0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
10d00 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
10d10 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
10d20 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
10d30 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 63  tten here */.  c
10d40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
10d50 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
10d60 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20  all objects are 
10d70 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
10d80 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
10d90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
10da0 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74  e;  /* Type of t
10db0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
10dc0 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
10dd0 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ssages */.  cons
10de0 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20  t Token *pName; 
10df0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
10e00 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
10e10 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
10e20 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
10e30 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
10e40 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
10e50 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
10e60 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
10e70 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
10e80 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
10e90 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
10ea0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
10eb0 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
10ec0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
10ed0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
10ee0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
10ef0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
10f00 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
10f10 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
10f20 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
10f30 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
10f40 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
10f50 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
10f60 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
10f70 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
10f80 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  here */.  int rc
10f90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10fa0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
10fb0 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
10fc0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 20 2a 20 54  itData;../*. * T
10fd0 68 69 73 20 67 6c 6f 62 61 6c 20 66 6c 61 67 20  his global flag 
10fe0 69 73 20 73 65 74 20 66 6f 72 20 70 65 72 66 6f  is set for perfo
10ff0 72 6d 61 6e 63 65 20 74 65 73 74 69 6e 67 20 6f  rmance testing o
11000 66 20 74 72 69 67 67 65 72 73 2e 20 57 68 65 6e  f triggers. When
11010 20 69 74 20 69 73 20 73 65 74 0a 20 2a 20 53 51   it is set. * SQ
11020 4c 69 74 65 20 77 69 6c 6c 20 70 65 72 66 6f 72  Lite will perfor
11030 6d 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f  m the overhead o
11040 66 20 62 75 69 6c 64 69 6e 67 20 6e 65 77 20 61  f building new a
11050 6e 64 20 6f 6c 64 20 74 72 69 67 67 65 72 20 72  nd old trigger r
11060 65 66 65 72 65 6e 63 65 73 20 0a 20 2a 20 65 76  eferences . * ev
11070 65 6e 20 77 68 65 6e 20 6e 6f 20 74 72 69 67 67  en when no trigg
11080 65 72 73 20 65 78 69 73 74 0a 20 2a 2f 0a 65 78  ers exist. */.ex
11090 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
110a0 5f 61 6c 77 61 79 73 5f 63 6f 64 65 5f 74 72 69  _always_code_tri
110b0 67 67 65 72 5f 73 65 74 75 70 3b 0a 0a 2f 2a 0a  gger_setup;../*.
110c0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f  ** The SQLITE_CO
110d0 52 52 55 50 54 5f 42 4b 50 54 20 6d 61 63 72 6f  RRUPT_BKPT macro
110e0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
110f0 20 63 6f 6e 73 74 61 6e 74 20 28 66 6f 72 20 70   constant (for p
11100 72 6f 64 75 63 74 69 6f 6e 0a 2a 2a 20 62 75 69  roduction.** bui
11110 6c 64 73 29 20 6f 72 20 61 20 66 75 6e 63 74 69  lds) or a functi
11120 6f 6e 20 63 61 6c 6c 20 28 66 6f 72 20 64 65 62  on call (for deb
11130 75 67 67 69 6e 67 29 2e 20 20 49 66 20 69 74 20  ugging).  If it 
11140 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61  is a function ca
11150 6c 6c 2c 0a 2a 2a 20 69 74 20 61 6c 6c 6f 77 73  ll,.** it allows
11160 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 74 6f   the operator to
11170 20 73 65 74 20 61 20 62 72 65 61 6b 70 6f 69 6e   set a breakpoin
11180 74 20 61 74 20 74 68 65 20 73 70 6f 74 20 77 68  t at the spot wh
11190 65 72 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ere database.** 
111a0 63 6f 72 72 75 70 74 69 6f 6e 20 69 73 20 66 69  corruption is fi
111b0 72 73 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2f  rst detected..*/
111c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
111d0 45 42 55 47 0a 20 20 65 78 74 65 72 6e 20 69 6e  EBUG.  extern in
111e0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
111f0 28 76 6f 69 64 29 3b 0a 23 20 64 65 66 69 6e 65  (void);.# define
11200 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
11210 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
11220 75 70 74 28 29 0a 23 65 6c 73 65 0a 23 20 64 65  upt().#else.# de
11230 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
11240 55 50 54 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  UPT_BKPT SQLITE_
11250 43 4f 52 52 55 50 54 0a 23 65 6e 64 69 66 0a 0a  CORRUPT.#endif..
11260 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
11270 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
11280 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
11290 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
112a0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
112b0 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
112c0 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74 20  3StrNICmp(const 
112d0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
112e0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ar *, int);.int 
112f0 73 71 6c 69 74 65 33 48 61 73 68 4e 6f 43 61 73  sqlite3HashNoCas
11300 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  e(const char *, 
11310 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
11320 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20  3IsNumber(const 
11330 63 68 61 72 2a 2c 20 69 6e 74 2a 2c 20 75 38 29  char*, int*, u8)
11340 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6d  ;.int sqlite3Com
11350 70 61 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20  pare(const char 
11360 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
11370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 6f 72  ;.int sqlite3Sor
11380 74 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 63  tCompare(const c
11390 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
113a0 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
113b0 65 33 52 65 61 6c 54 6f 53 6f 72 74 61 62 6c 65  e3RealToSortable
113c0 28 64 6f 75 62 6c 65 20 72 2c 20 63 68 61 72 20  (double r, char 
113d0 2a 29 3b 0a 0a 76 6f 69 64 20 2a 73 71 6c 69 74  *);..void *sqlit
113e0 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 2c 69 6e 74  e3Malloc(int,int
113f0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
11400 4d 61 6c 6c 6f 63 52 61 77 28 69 6e 74 2c 69 6e  MallocRaw(int,in
11410 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
11420 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
11430 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
11440 63 28 76 6f 69 64 2a 2c 69 6e 74 29 3b 0a 63 68  c(void*,int);.ch
11450 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 44 75  ar *sqlite3StrDu
11460 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p(const char*);.
11470 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
11480 4e 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  NDup(const char*
11490 2c 20 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  , int);.# define
114a0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4d 65 6d   sqlite3CheckMem
114b0 6f 72 79 28 61 2c 62 29 0a 76 6f 69 64 20 2a 73  ory(a,b).void *s
114c0 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46  qlite3ReallocOrF
114d0 72 65 65 28 76 6f 69 64 2a 2c 69 6e 74 29 3b 0a  ree(void*,int);.
114e0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65  void sqlite3Free
114f0 58 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  X(void*);.void *
11500 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 58 28 69  sqlite3MallocX(i
11510 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
11520 41 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 20 2a  AllocSize(void *
11530 29 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  );..char *sqlite
11540 33 4d 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  3MPrintf(const c
11550 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
11560 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
11570 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  f(const char*, v
11580 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71  a_list);.void sq
11590 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
115a0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
115b0 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .);.void *sqlite
115c0 33 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  3TextToPtr(const
115d0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
115e0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
115f0 68 61 72 20 2a 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f  har **, ...);.vo
11600 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
11610 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
11620 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
11630 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 43  id sqlite3ErrorC
11640 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f  lear(Parse*);.vo
11650 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
11660 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
11670 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78 70  qlite3DequoteExp
11680 72 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  r(Expr*);.int sq
11690 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
116a0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
116b0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
116c0 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
116d0 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
116e0 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
116f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
11700 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
11710 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
11720 45 78 70 72 28 69 6e 74 2c 20 45 78 70 72 2a 2c  Expr(int, Expr*,
11730 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
11740 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
11750 69 74 65 33 45 78 70 72 4f 72 46 72 65 65 28 69  ite3ExprOrFree(i
11760 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
11770 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
11780 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 52 65  .Expr *sqlite3Re
11790 67 69 73 74 65 72 45 78 70 72 28 50 61 72 73 65  gisterExpr(Parse
117a0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  *,Token*);.Expr 
117b0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
117c0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
117d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
117e0 70 61 6e 28 45 78 70 72 2a 2c 54 6f 6b 65 6e 2a  pan(Expr*,Token*
117f0 2c 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a  ,Token*);.Expr *
11800 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
11810 69 6f 6e 28 45 78 70 72 4c 69 73 74 2a 2c 20 54  ion(ExprList*, T
11820 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
11830 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
11840 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
11850 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
11860 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 45  ite3ExprDelete(E
11870 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
11880 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
11890 41 70 70 65 6e 64 28 45 78 70 72 4c 69 73 74 2a  Append(ExprList*
118a0 2c 45 78 70 72 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  ,Expr*,Token*);.
118b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
118c0 4c 69 73 74 44 65 6c 65 74 65 28 45 78 70 72 4c  ListDelete(ExprL
118d0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
118e0 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
118f0 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
11900 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
11910 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
11920 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
11930 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
11940 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
11950 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
11960 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
11970 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
11980 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ema(sqlite3*, in
11990 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
119a0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
119b0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
119c0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 49 6e 74 65  ite3RollbackInte
119d0 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
119e0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
119f0 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
11a00 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
11a10 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
11a20 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
11a30 65 63 74 28 50 61 72 73 65 2a 2c 63 68 61 72 2a  ect(Parse*,char*
11a40 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
11a50 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
11a60 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
11a70 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
11a80 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
11a90 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
11aa0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
11ab0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
11ac0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
11ad0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
11ae0 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
11af0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
11b00 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
11b10 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
11b20 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
11b30 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
11b40 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
11b50 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
11b60 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
11b70 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
11b80 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Type(Parse*,Toke
11b90 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
11ba0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
11bb0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 29 3b 0a  (Parse*,Expr*);.
11bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
11bd0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
11be0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
11bf0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
11c00 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
11c10 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
11c20 53 65 6c 65 63 74 2a 29 3b 0a 0a 76 6f 69 64 20  Select*);..void 
11c30 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
11c40 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
11c50 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
11c60 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
11c70 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
11c80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
11c90 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
11ca0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11cb0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
11cc0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
11cd0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
11ce0 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
11cf0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
11d00 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
11d10 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
11d20 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
11d30 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
11d40 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
11d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
11d60 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
11d70 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  *, Table*);.void
11d80 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
11d90 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
11da0 20 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65   ExprList*, Sele
11db0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
11dc0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
11dd0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 76  3ArrayAllocate(v
11de0 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  oid*,int,int,int
11df0 2a 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  *,int*,int*);.Id
11e00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
11e10 69 73 74 41 70 70 65 6e 64 28 49 64 4c 69 73 74  istAppend(IdList
11e20 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
11e30 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
11e40 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
11e50 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
11e60 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
11e70 41 70 70 65 6e 64 28 53 72 63 4c 69 73 74 2a 2c  Append(SrcList*,
11e80 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
11e90 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
11ea0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
11eb0 72 6f 6d 54 65 72 6d 28 53 72 63 4c 69 73 74 2a  romTerm(SrcList*
11ec0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
11ed0 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
11f10 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
11f20 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
11f30 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
11f40 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
11f50 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
11f60 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
11f70 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
11f80 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
11f90 74 65 28 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  te(IdList*);.voi
11fa0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
11fb0 44 65 6c 65 74 65 28 53 72 63 4c 69 73 74 2a 29  Delete(SrcList*)
11fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
11fd0 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
11fe0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
11ff0 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
12000 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e        Token*, in
12030 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
12040 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
12050 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
12060 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
12070 74 65 33 41 64 64 4b 65 79 54 79 70 65 28 56 64  te3AddKeyType(Vd
12080 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  be*, ExprList*);
12090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
120a0 49 64 78 4b 65 79 54 79 70 65 28 56 64 62 65 2a  IdxKeyType(Vdbe*
120b0 2c 20 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73  , Index*);.int s
120c0 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
120d0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 69 6e  se*, Select*, in
120e0 74 2c 20 69 6e 74 2c 20 53 65 6c 65 63 74 2a 2c  t, int, Select*,
120f0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 63 68 61 72   int, int*, char
12100 20 2a 61 66 66 29 3b 0a 53 65 6c 65 63 74 20 2a   *aff);.Select *
12110 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
12120 28 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  (ExprList*,SrcLi
12130 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
12140 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
12150 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
12170 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76  ,Expr*,Expr*);.v
12180 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
12190 74 44 65 6c 65 74 65 28 53 65 6c 65 63 74 2a 29  tDelete(Select*)
121a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
121b0 6c 65 63 74 55 6e 62 69 6e 64 28 53 65 6c 65 63  lectUnbind(Selec
121c0 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
121d0 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
121e0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
121f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
12200 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
12210 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
12220 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
12230 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
12240 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
12250 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
12260 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
12270 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
12280 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
12290 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
122a0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
122b0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
122c0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
122d0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
122e0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
122f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
12300 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2a 29 3b 0a  *, ExprList**);.
12310 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
12320 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
12330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
12340 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
12350 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
12360 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
12370 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
12380 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
12390 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
123a0 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
123b0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  e*, Expr*);.int 
123c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
123d0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
123e0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
123f0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
12400 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
12410 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
12420 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
12430 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
12440 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
12450 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 78 74 65  oid sqlite3Nexte
12460 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
12470 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
12480 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
12490 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
124a0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
124b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
124c0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
124d0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 63  teTable(Parse*,c
124e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
124f0 74 20 63 68 61 72 2a 29 3b 0a 49 6e 64 65 78 20  t char*);.Index 
12500 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
12510 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
12520 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
12530 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
12540 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
12550 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
12560 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
12570 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
12580 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
12590 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
125a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
125b0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
125c0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
125d0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
125e0 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
125f0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
12600 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 54 6f 6b  ameFromToken(Tok
12610 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
12620 33 45 78 70 72 43 68 65 63 6b 28 50 61 72 73 65  3ExprCheck(Parse
12630 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
12640 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
12650 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70  3ExprCompare(Exp
12660 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
12670 73 71 6c 69 74 65 46 75 6e 63 49 64 28 54 6f 6b  sqliteFuncId(Tok
12680 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
12690 33 45 78 70 72 52 65 73 6f 6c 76 65 4e 61 6d 65  3ExprResolveName
126a0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 2c  s(NameContext *,
126b0 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
126c0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
126d0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
126e0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
126f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
12700 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
12710 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
12720 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
12730 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
12740 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  se*);.Expr *sqli
12750 74 65 33 43 72 65 61 74 65 49 64 45 78 70 72 28  te3CreateIdExpr(
12760 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
12770 69 64 20 73 71 6c 69 74 65 33 52 61 6e 64 6f 6d  id sqlite3Random
12780 6e 65 73 73 28 69 6e 74 2c 20 76 6f 69 64 2a 29  ness(int, void*)
12790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
127a0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
127b0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
127c0 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
127d0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
127e0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
127f0 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
12800 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
12810 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
12820 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
12830 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
12840 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
12850 6e 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  n(Parse*);.int s
12860 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
12870 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
12880 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
12890 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
128a0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
128b0 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
128c0 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
128d0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
128e0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
128f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
12900 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 73  erateRowDelete(s
12910 71 6c 69 74 65 33 2a 2c 20 56 64 62 65 2a 2c 20  qlite3*, Vdbe*, 
12920 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
12930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
12940 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
12950 65 6c 65 74 65 28 56 64 62 65 2a 2c 20 54 61 62  elete(Vdbe*, Tab
12960 6c 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 29  le*, int, char*)
12970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
12980 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 56  nerateIndexKey(V
12990 64 62 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  dbe*, Index*, in
129a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
129b0 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
129c0 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
129d0 54 61 62 6c 65 2a 2c 69 6e 74 2c 63 68 61 72 2a  Table*,int,char*
129e0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
129f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
12a00 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
12a10 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
12a20 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74   int, char*, int
12a30 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
12a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
12a50 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
12a60 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
12a70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
12a80 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
12a90 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
12aa0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
12ab0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
12ac0 72 44 75 70 28 45 78 70 72 2a 29 3b 0a 76 6f 69  rDup(Expr*);.voi
12ad0 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 43 6f  d sqlite3TokenCo
12ae0 70 79 28 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  py(Token*, Token
12af0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
12b00 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
12b10 28 45 78 70 72 4c 69 73 74 2a 29 3b 0a 53 72 63  (ExprList*);.Src
12b20 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
12b30 4c 69 73 74 44 75 70 28 53 72 63 4c 69 73 74 2a  ListDup(SrcList*
12b40 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
12b50 65 33 49 64 4c 69 73 74 44 75 70 28 49 64 4c 69  e3IdListDup(IdLi
12b60 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
12b70 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 53  lite3SelectDup(S
12b80 65 6c 65 63 74 2a 29 3b 0a 46 75 6e 63 44 65 66  elect*);.FuncDef
12b90 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
12ba0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
12bb0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
12bc0 6e 74 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  nt,u8,int);.void
12bd0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
12be0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
12bf0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
12c00 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
12c10 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
12c20 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
12c30 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
12c40 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
12c50 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
12c60 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
12c70 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
12c80 63 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ck(sqlite3*);.vo
12c90 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
12ca0 43 6f 6f 6b 69 65 28 73 71 6c 69 74 65 33 2a 2c  Cookie(sqlite3*,
12cb0 20 56 64 62 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23   Vdbe*, int);..#
12cc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12cd0 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
12ce0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
12cf0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
12d00 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
12d10 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
12d20 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 69 6e 74 2c 45 78 70 72 2a 2c 69 6e 74 2c 20   int,Expr*,int, 
12d50 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
12d60 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
12d70 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
12d80 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
12d90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
12da0 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
12db0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
12dc0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
12dd0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
12de0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
12df0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
12e00 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
12e10 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
12e20 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
12e30 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65   int sqlite3Code
12e40 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
12e50 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
12e60 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
12e70 20 69 6e 74 2c 20 69 6e 74 2c 20 0a 20 20 20 20   int, int, .    
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 29         int, int)
12ea0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56  ;.  void sqliteV
12eb0 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
12ec0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
12ed0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
12ee0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
12ef0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53  e3DeleteTriggerS
12f00 74 65 70 28 54 72 69 67 67 65 72 53 74 65 70 2a  tep(TriggerStep*
12f10 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
12f20 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
12f30 53 65 6c 65 63 74 53 74 65 70 28 53 65 6c 65 63  SelectStep(Selec
12f40 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
12f50 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
12f60 65 72 49 6e 73 65 72 74 53 74 65 70 28 54 6f 6b  erInsertStep(Tok
12f70 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 45 78  en*, IdList*, Ex
12f80 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
12f90 69 6e 74 29 3b 0a 20 20 54 72 69 67 67 65 72 53  int);.  TriggerS
12fa0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
12fb0 67 65 72 55 70 64 61 74 65 53 74 65 70 28 54 6f  gerUpdateStep(To
12fc0 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
12fd0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   Expr*, int);.  
12fe0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
12ff0 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
13000 65 53 74 65 70 28 54 6f 6b 65 6e 2a 2c 20 45 78  eStep(Token*, Ex
13010 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
13020 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
13030 72 28 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  r(Trigger*);.  v
13040 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
13050 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
13060 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
13070 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
13080 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
13090 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
130a0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  (A,B,C,D,E,F) 0.
130b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
130c0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 29  DeleteTrigger(A)
130d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
130e0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
130f0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
13100 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
13110 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
13120 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
13130 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
13140 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
13150 48 2c 49 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  H,I) 0.#endif..i
13160 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
13170 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
13180 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
13190 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
131a0 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
131b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
131c0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
131d0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
131e0 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
131f0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
13200 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
13210 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
13220 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
13230 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
13240 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 72 63  Parse*,Expr*,Src
13250 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
13260 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
13270 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
13280 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
13290 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
132a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
132b0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
132c0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
132d0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
132e0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
132f0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
13300 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
13310 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
13320 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
13330 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
13340 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
13350 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
13360 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
13370 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
13380 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
13390 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
133a0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
133b0 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
133c0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
133d0 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
133e0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
133f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
13400 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
13410 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
13420 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72  lite3BtreeFactor
13430 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 20  y(const sqlite3 
13440 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
13450 2a 7a 46 69 6c 65 6e 61 6d 65 2c 0a 20 20 20 20  *zFilename,.    
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e     int omitJourn
13480 61 6c 2c 20 69 6e 74 20 6e 43 61 63 68 65 2c 20  al, int nCache, 
13490 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65 29  Btree **ppBtree)
134a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
134b0 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
134c0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
134d0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
134e0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
134f0 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
13500 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
13510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
13520 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
13530 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
13540 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
13550 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
13560 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
13570 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
13580 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
13590 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
135a0 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
135b0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
135c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
135d0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
135e0 64 6f 75 62 6c 65 2a 29 3b 0a 63 68 61 72 20 2a  double*);.char *
135f0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
13600 28 69 6e 74 2c 63 68 61 72 2a 2c 63 6f 6e 73 74  (int,char*,const
13610 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 69 6e 74   char*,...);.int
13620 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
13630 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
13640 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
13650 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 63 6f  3FitsIn64Bits(co
13660 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
13670 20 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74   sqlite3utf16Byt
13680 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
13690 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
136a0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 75  r);.int sqlite3u
136b0 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
136c0 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
136d0 74 20 6e 42 79 74 65 29 3b 0a 69 6e 74 20 73 71  t nByte);.int sq
136e0 6c 69 74 65 33 52 65 61 64 55 74 66 38 28 63 6f  lite3ReadUtf8(co
136f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
13700 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
13710 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
13720 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 29  ned char *, u64)
13730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
13740 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
13750 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
13760 34 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  4 *);.int sqlite
13770 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
13780 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
13790 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
137a0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
137b0 28 75 36 34 20 76 29 3b 0a 76 6f 69 64 20 73 71  (u64 v);.void sq
137c0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
137d0 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e  tyStr(Vdbe *, In
137e0 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dex *);.void sql
137f0 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
13800 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62  yStr(Vdbe *, Tab
13810 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  le *);.char sqli
13820 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
13830 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
13840 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
13850 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
13860 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
13870 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
13880 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
13890 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
138a0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
138b0 6e 74 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34  nt sqlite3atoi64
138c0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
138d0 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
138e0 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
138f0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
13900 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71  *,...);.void *sq
13910 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 63  lite3HexToBlob(c
13920 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 3b 0a 69  onst char *z);.i
13930 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
13940 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
13950 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
13960 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73   Token **);.cons
13970 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
13980 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
13990 73 71 6c 69 74 65 33 52 65 61 64 55 6e 69 43 68  sqlite3ReadUniCh
139a0 61 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ar(const char *z
139b0 53 74 72 2c 20 69 6e 74 20 2a 70 4f 66 66 73 65  Str, int *pOffse
139c0 74 2c 20 75 38 20 2a 70 45 6e 63 2c 20 69 6e 74  t, u8 *pEnc, int
139d0 20 66 6f 6c 64 29 3b 0a 69 6e 74 20 73 71 6c 69   fold);.int sqli
139e0 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
139f0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
13a00 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
13a10 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
13a20 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
13a30 20 63 68 61 72 20 2a 2c 69 6e 74 2c 69 6e 74 29   char *,int,int)
13a40 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
13a50 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
13a60 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
13a70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
13a80 2c 20 69 6e 74 20 6e 4e 61 6d 65 29 3b 0a 43 6f  , int nName);.Co
13a90 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
13aa0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
13ab0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
13ac0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
13ad0 69 74 65 33 45 78 70 72 53 65 74 43 6f 6c 6c 28  ite3ExprSetColl(
13ae0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
13af0 78 70 72 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  xpr *, Token *);
13b00 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
13b10 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
13b20 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
13b30 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 49 6e  t sqlite3CheckIn
13b40 64 65 78 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  dexCollSeq(Parse
13b50 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e   *, Index *);.in
13b60 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
13b70 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
13b80 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
13b90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
13ba0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
13bb0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  te3 *, int);.voi
13bc0 64 20 73 71 6c 69 74 65 33 75 74 66 31 36 53 75  d sqlite3utf16Su
13bd0 62 73 74 72 28 73 71 6c 69 74 65 33 5f 63 6f 6e  bstr(sqlite3_con
13be0 74 65 78 74 20 2a 2c 69 6e 74 2c 73 71 6c 69 74  text *,int,sqlit
13bf0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 0a 63  e3_value **);..c
13c00 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
13c10 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
13c20 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
13c30 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
13c40 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
13c50 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
13c60 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
13c70 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
13c80 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
13c90 6f 69 64 20 2a 2c 75 38 2c 20 76 6f 69 64 28 2a  oid *,u8, void(*
13ca0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
13cb0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
13cc0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
13cd0 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
13ce0 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
13cf0 28 76 6f 69 64 29 3b 0a 63 68 61 72 20 2a 73 71  (void);.char *sq
13d00 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 63 6f  lite3utf16to8(co
13d10 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 29 3b  nst void*, int);
13d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
13d30 65 46 72 6f 6d 45 78 70 72 28 45 78 70 72 20 2a  eFromExpr(Expr *
13d40 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
13d50 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
13d60 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
13d70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
13d80 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
13d90 20 75 38 29 3b 0a 65 78 74 65 72 6e 20 63 6f 6e   u8);.extern con
13da0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
13db0 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
13dc0 6f 77 65 72 5b 5d 3b 0a 76 6f 69 64 20 73 71 6c  ower[];.void sql
13dd0 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
13de0 64 28 44 62 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  d(Db*, int, int)
13df0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
13e00 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
13e10 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
13e20 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
13e30 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
13e40 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
13e50 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
13e60 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
13e70 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
13e80 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
13e90 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
13ea0 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
13eb0 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
13ec0 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
13ed0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
13ee0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
13ef0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
13f00 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
13f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
13f20 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
13f30 73 65 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  se *, Expr *);.i
13f40 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
13f50 52 65 73 6f 6c 76 65 28 50 61 72 73 65 20 2a 2c  Resolve(Parse *,
13f60 20 53 65 6c 65 63 74 20 2a 2c 20 4e 61 6d 65 43   Select *, NameC
13f70 6f 6e 74 65 78 74 20 2a 29 3b 0a 76 6f 69 64 20  ontext *);.void 
13f80 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
13f90 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
13fa0 6c 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  le *, int);.void
13fb0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
13fc0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
13fd0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
13fe0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
13ff0 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
14000 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
14010 20 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20   *);.const char 
14020 2a 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f  *sqlite3TestErro
14030 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 43 6f 6c 6c  rName(int);.Coll
14040 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
14050 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
14060 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
14070 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
14080 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
14090 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 54  nityType(const T
140a0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
140b0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
140c0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
140d0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
140e0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
140f0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
14100 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
14110 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
14120 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
14130 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
14140 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
14150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
14160 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
14170 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
14180 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
14190 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
141a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
141b0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
141c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
141d0 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 54 68 72  int*,char*);.Thr
141e0 65 61 64 44 61 74 61 20 2a 73 71 6c 69 74 65 33  eadData *sqlite3
141f0 54 68 72 65 61 64 44 61 74 61 28 76 6f 69 64 29  ThreadData(void)
14200 3b 0a 63 6f 6e 73 74 20 54 68 72 65 61 64 44 61  ;.const ThreadDa
14210 74 61 20 2a 73 71 6c 69 74 65 33 54 68 72 65 61  ta *sqlite3Threa
14220 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 76 6f  dDataReadOnly(vo
14230 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
14240 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44 61  3ReleaseThreadDa
14250 74 61 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ta(void);.void s
14260 71 6c 69 74 65 33 41 74 74 61 63 68 46 75 6e 63  qlite3AttachFunc
14270 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 20 2a 29  tions(sqlite3 *)
14280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
14290 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
142a0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
142b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
142c0 63 68 65 6d 61 46 72 65 65 28 76 6f 69 64 20 2a  chemaFree(void *
142d0 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
142e0 65 33 53 63 68 65 6d 61 47 65 74 28 42 74 72 65  e3SchemaGet(Btre
142f0 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
14300 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
14310 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
14320 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
14330 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69  sqlite3IndexKeyi
14340 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64  nfo(Parse *, Ind
14350 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ex *);.int sqlit
14360 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
14370 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
14380 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
14390 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20  void *, .  void 
143a0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
143b0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
143c0 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
143d0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
143e0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
143f0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76  te3_value **), v
14400 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
14410 63 6f 6e 74 65 78 74 2a 29 29 3b 0a 69 6e 74 20  context*));.int 
14420 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73  sqlite3ApiExit(s
14430 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29  qlite3 *db, int)
14440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
14450 6c 6f 63 46 61 69 6c 65 64 28 76 6f 69 64 29 3b  locFailed(void);
14460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 61 69  .void sqlite3Fai
14470 6c 65 64 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ledMalloc(void);
14480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 62 6f  .void sqlite3Abo
14490 72 74 4f 74 68 65 72 41 63 74 69 76 65 56 64 62  rtOtherActiveVdb
144a0 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 64  es(sqlite3 *, Vd
144b0 62 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  be *);.int sqlit
144c0 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
144d0 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69  se(Parse *);..#i
144e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
144f0 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
14500 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
14510 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
14520 71 6c 69 74 65 33 2a 29 3b 0a 20 20 69 6e 74 20  qlite3*);.  int 
14530 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
14540 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
14550 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
14560 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
14570 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 20  Extensions(X).# 
14580 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
14590 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
145a0 28 58 29 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  (X)  SQLITE_OK.#
145b0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
145c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
145d0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
145e0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
145f0 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
14600 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
14610 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
14620 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
14630 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
14640 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
14650 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
14660 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
14670 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77 28 76 6f  allocDisallow(vo
14680 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
14690 74 65 33 4d 61 6c 6c 6f 63 41 6c 6c 6f 77 28 76  te3MallocAllow(v
146a0 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
146b0 74 65 33 54 65 73 74 4d 61 6c 6c 6f 63 46 61 69  te3TestMallocFai
146c0 6c 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  l(void);.#else. 
146d0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
146e0 54 65 73 74 4d 61 6c 6c 6f 63 46 61 69 6c 28 29  TestMallocFail()
146f0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
14700 69 74 65 33 4d 61 6c 6c 6f 63 44 69 73 61 6c 6c  ite3MallocDisall
14710 6f 77 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ow().  #define s
14720 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41 6c 6c 6f  qlite3MallocAllo
14730 77 28 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  w().#endif..#ifd
14740 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
14750 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
14760 4e 54 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  NT.  void *sqlit
14770 65 33 54 68 72 65 61 64 53 61 66 65 4d 61 6c 6c  e3ThreadSafeMall
14780 6f 63 28 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  oc(int);.  void 
14790 73 71 6c 69 74 65 33 54 68 72 65 61 64 53 61 66  sqlite3ThreadSaf
147a0 65 46 72 65 65 28 76 6f 69 64 20 2a 29 3b 0a 23  eFree(void *);.#
147b0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
147c0 71 6c 69 74 65 33 54 68 72 65 61 64 53 61 66 65  qlite3ThreadSafe
147d0 4d 61 6c 6c 6f 63 20 73 71 6c 69 74 65 33 4d 61  Malloc sqlite3Ma
147e0 6c 6c 6f 63 58 0a 20 20 23 64 65 66 69 6e 65 20  llocX.  #define 
147f0 73 71 6c 69 74 65 33 54 68 72 65 61 64 53 61 66  sqlite3ThreadSaf
14800 65 46 72 65 65 20 73 71 6c 69 74 65 33 46 72 65  eFree sqlite3Fre
14810 65 58 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  eX.#endif..#ifde
14820 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
14830 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
14840 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
14850 43 6c 65 61 72 28 58 29 0a 23 20 20 64 65 66 69  Clear(X).#  defi
14860 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
14870 6e 63 28 58 2c 59 29 20 28 59 29 0a 23 20 20 64  nc(X,Y) (Y).#  d
14880 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
14890 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
148a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
148b0 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 65 6c 73  abCommit(X).#els
148c0 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
148d0 33 56 74 61 62 43 6c 65 61 72 28 54 61 62 6c 65  3VtabClear(Table
148e0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
148f0 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
14900 65 33 20 2a 64 62 2c 20 69 6e 74 20 72 63 29 3b  e3 *db, int rc);
14910 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
14920 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
14930 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
14940 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
14950 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
14960 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
14970 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 73 71 6c  ite3VtabLock(sql
14980 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 76 6f 69  ite3_vtab*);.voi
14990 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
149a0 6f 63 6b 28 73 71 6c 69 74 65 33 5f 76 74 61 62  ock(sqlite3_vtab
149b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
149c0 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
149d0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
149e0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
149f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
14a00 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
14a10 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
14a20 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
14a30 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
14a40 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
14a50 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
14a60 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
14a70 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
14a80 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
14a90 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
14aa0 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
14ab0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
14ac0 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
14ad0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
14ae0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
14af0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
14b00 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
14b10 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
14b20 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  gin(sqlite3 *, s
14b30 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 3b 0a  qlite3_vtab *);.
14b40 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
14b50 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
14b60 74 69 6f 6e 28 46 75 6e 63 44 65 66 2a 2c 20 69  tion(FuncDef*, i
14b70 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
14b80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76  .void sqlite3Inv
14b90 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  alidFunction(sql
14ba0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
14bb0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
14bc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
14bd0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
14be0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14bf0 53 53 45 0a 23 69 6e 63 6c 75 64 65 20 22 73 73  SSE.#include "ss
14c00 65 49 6e 74 2e 68 22 0a 23 65 6e 64 69 66 0a 0a  eInt.h".#endif..
14c10 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
14c20 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
14c30 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
14c40 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
14c50 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6f  le.** sqlite3_io
14c60 5f 74 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  _trace is a poin
14c70 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
14c80 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
14c90 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
14ca0 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
14cb0 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53  es. .*/.#ifdef S
14cc0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
14cd0 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
14ce0 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
14cf0 6c 69 74 65 33 5f 69 6f 5f 74 72 61 63 65 20 29  lite3_io_trace )
14d00 7b 20 73 71 6c 69 74 65 33 5f 69 6f 5f 74 72 61  { sqlite3_io_tra
14d10 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
14d20 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
14d30 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 23 65 6c  eSql(Vdbe*);.#el
14d40 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
14d50 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
14d60 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
14d70 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
14d80 65 78 74 65 72 6e 20 76 6f 69 64 20 28 2a 73 71  extern void (*sq
14d90 6c 69 74 65 33 5f 69 6f 5f 74 72 61 63 65 29 28  lite3_io_trace)(
14da0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
14db0 3b 0a 0a 23 65 6e 64 69 66 0a                    ;..#endif.