/ Hex Artifact Content
Login

Artifact 09384eb30d6740e3e9d0c9379432e254fdb390d9:


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 38 20 32 30 30 37 2f 30 33  ,v 1.548 2007/03
01d0: 2f 33 31 20 31 35 3a 32 38 3a 30 30 20 64 72 68  /31 15:28:00 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 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36  #if defined(i386
1990: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69  ) || defined(__i
19a0: 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  386__) || define
19b0: 64 28 5f 4d 5f 49 58 38 36 29 0a 23 20 64 65 66  d(_M_IX86).# def
19c0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
19d0: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
19e0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
19f0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
1a00: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
1a10: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
1a20: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 64 65 66  16LE.#else.# def
1a30: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
1a40: 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20  DIAN    (*(char 
1a50: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
1a60: 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =0).# define SQL
1a70: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
1a80: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
1a90: 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64  ite3one)==1).# d
1aa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
1ab0: 31 36 4e 41 54 49 56 45 20 28 53 51 4c 49 54 45  16NATIVE (SQLITE
1ac0: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
1ad0: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
1ae0: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
1af0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1b00: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1b10: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1b20: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1b30: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
1b40: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
1b50: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
1b60: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
1b70: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
1b80: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
1b90: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
1ba0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
1bb0: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
1bc0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1bd0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
1be0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
1bf0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
1c00: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
1c10: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
1c20: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
1c30: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
1c40: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
1c50: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
1c60: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
1c70: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
1c80: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
1c90: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
1ca0: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
1cb0: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
1cc0: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
1cd0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
1ce0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
1cf0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d10: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
1d20: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
1d30: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
1d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1d50: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
1d60: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
1d70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  .};../*.** Defer
1d80: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
1d90: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
1da0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
1db0: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
1dc0: 61 6e 64 6c 65 72 20 74 79 70 65 64 65 66 73 2e  andler typedefs.
1dd0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .*/.#include "vd
1de0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
1df0: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
1e00: 65 20 22 70 61 67 65 72 2e 68 22 0a 0a 23 69 66  e "pager.h"..#if
1e10: 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
1e20: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  BUG./*.** The fo
1e30: 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76  llowing global v
1e40: 61 72 69 61 62 6c 65 73 20 61 72 65 20 75 73 65  ariables are use
1e50: 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  d for testing an
1e60: 64 20 64 65 62 75 67 67 69 6e 67 0a 2a 2a 20 6f  d debugging.** o
1e70: 6e 6c 79 2e 20 20 54 68 65 79 20 6f 6e 6c 79 20  nly.  They only 
1e80: 77 6f 72 6b 20 69 66 20 53 51 4c 49 54 45 5f 4d  work if SQLITE_M
1e90: 45 4d 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  EMDEBUG is defin
1ea0: 65 64 2e 0a 2a 2f 0a 65 78 74 65 72 6e 20 69 6e  ed..*/.extern in
1eb0: 74 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f  t sqlite3_nMallo
1ec0: 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
1ed0: 72 20 6f 66 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  r of sqliteMallo
1ee0: 63 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 65 78 74  c() calls */.ext
1ef0: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1f00: 6e 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a  nFree;        /*
1f10: 20 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74   Number of sqlit
1f20: 65 46 72 65 65 28 29 20 63 61 6c 6c 73 20 2a 2f  eFree() calls */
1f30: 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
1f40: 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3b  te3_iMallocFail;
1f50: 20 20 2f 2a 20 46 61 69 6c 20 73 71 6c 69 74 65    /* Fail sqlite
1f60: 4d 61 6c 6c 6f 63 28 29 20 61 66 74 65 72 20 74  Malloc() after t
1f70: 68 69 73 20 6d 61 6e 79 20 63 61 6c 6c 73 20 2a  his many calls *
1f80: 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  /.extern int sql
1f90: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65  ite3_iMallocRese
1fa0: 74 3b 20 2f 2a 20 53 65 74 20 69 4d 61 6c 6c 6f  t; /* Set iMallo
1fb0: 63 46 61 69 6c 20 74 6f 20 74 68 69 73 20 77 68  cFail to this wh
1fc0: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 20  en it reaches 0 
1fd0: 2a 2f 0a 0a 65 78 74 65 72 6e 20 76 6f 69 64 20  */..extern void 
1fe0: 2a 73 71 6c 69 74 65 33 5f 70 46 69 72 73 74 3b  *sqlite3_pFirst;
1ff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
2000: 74 65 72 20 74 6f 20 6c 69 6e 6b 65 64 20 6c 69  ter to linked li
2010: 73 74 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6f 6e  st of allocation
2020: 73 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20  s */.extern int 
2030: 73 71 6c 69 74 65 33 5f 6e 4d 61 78 41 6c 6c 6f  sqlite3_nMaxAllo
2040: 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67  c;        /* Hig
2050: 68 20 77 61 74 65 72 20 6d 61 72 6b 20 6f 66 20  h water mark of 
2060: 54 68 72 65 61 64 44 61 74 61 2e 6e 41 6c 6c 6f  ThreadData.nAllo
2070: 63 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20  c */.extern int 
2080: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 44 69  sqlite3_mallocDi
2090: 73 61 6c 6c 6f 77 65 64 3b 20 2f 2a 20 61 73 73  sallowed; /* ass
20a0: 65 72 74 28 29 20 69 6e 20 73 71 6c 69 74 65 33  ert() in sqlite3
20b0: 4d 61 6c 6c 6f 63 28 29 20 69 66 20 73 65 74 20  Malloc() if set 
20c0: 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  */.extern int sq
20d0: 6c 69 74 65 33 5f 69 73 46 61 69 6c 3b 20 20 20  lite3_isFail;   
20e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20f0: 69 66 20 61 6c 6c 20 6d 61 6c 6c 6f 63 20 63 61  if all malloc ca
2100: 6c 6c 73 20 73 68 6f 75 6c 64 20 66 61 69 6c 20  lls should fail 
2110: 2a 2f 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  */.extern const 
2120: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 7a 46  char *sqlite3_zF
2130: 69 6c 65 3b 20 20 20 20 2f 2a 20 46 69 6c 65 6e  ile;    /* Filen
2140: 61 6d 65 20 74 6f 20 61 73 73 6f 63 69 61 74 65  ame to associate
2150: 20 64 65 62 75 67 20 69 6e 66 6f 20 77 69 74 68   debug info with
2160: 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73   */.extern int s
2170: 71 6c 69 74 65 33 5f 69 4c 69 6e 65 3b 20 20 20  qlite3_iLine;   
2180: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 65           /* Line
2190: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 62 75   number for debu
21a0: 67 20 69 6e 66 6f 20 2a 2f 0a 0a 23 64 65 66 69  g info */..#defi
21b0: 6e 65 20 45 4e 54 45 52 5f 4d 41 4c 4c 4f 43 20  ne ENTER_MALLOC 
21c0: 28 73 71 6c 69 74 65 33 5f 7a 46 69 6c 65 20 3d  (sqlite3_zFile =
21d0: 20 5f 5f 46 49 4c 45 5f 5f 2c 20 73 71 6c 69 74   __FILE__, sqlit
21e0: 65 33 5f 69 4c 69 6e 65 20 3d 20 5f 5f 4c 49 4e  e3_iLine = __LIN
21f0: 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  E__).#define sql
2200: 69 74 65 4d 61 6c 6c 6f 63 28 78 29 20 20 20 20  iteMalloc(x)    
2210: 20 20 20 20 20 20 28 45 4e 54 45 52 5f 4d 41 4c        (ENTER_MAL
2220: 4c 4f 43 2c 20 73 71 6c 69 74 65 33 4d 61 6c 6c  LOC, sqlite3Mall
2230: 6f 63 28 78 2c 31 29 29 0a 23 64 65 66 69 6e 65  oc(x,1)).#define
2240: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61 77   sqliteMallocRaw
2250: 28 78 29 20 20 20 20 20 20 20 28 45 4e 54 45 52  (x)       (ENTER
2260: 5f 4d 41 4c 4c 4f 43 2c 20 73 71 6c 69 74 65 33  _MALLOC, sqlite3
2270: 4d 61 6c 6c 6f 63 52 61 77 28 78 2c 31 29 29 0a  MallocRaw(x,1)).
2280: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 52 65  #define sqliteRe
2290: 61 6c 6c 6f 63 28 78 2c 79 29 20 20 20 20 20 20  alloc(x,y)      
22a0: 20 28 45 4e 54 45 52 5f 4d 41 4c 4c 4f 43 2c 20   (ENTER_MALLOC, 
22b0: 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 78  sqlite3Realloc(x
22c0: 2c 79 29 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  ,y)).#define sql
22d0: 69 74 65 53 74 72 44 75 70 28 78 29 20 20 20 20  iteStrDup(x)    
22e0: 20 20 20 20 20 20 28 45 4e 54 45 52 5f 4d 41 4c        (ENTER_MAL
22f0: 4c 4f 43 2c 20 73 71 6c 69 74 65 33 53 74 72 44  LOC, sqlite3StrD
2300: 75 70 28 78 29 29 0a 23 64 65 66 69 6e 65 20 73  up(x)).#define s
2310: 71 6c 69 74 65 53 74 72 4e 44 75 70 28 78 2c 79  qliteStrNDup(x,y
2320: 29 20 20 20 20 20 20 20 28 45 4e 54 45 52 5f 4d  )       (ENTER_M
2330: 41 4c 4c 4f 43 2c 20 73 71 6c 69 74 65 33 53 74  ALLOC, sqlite3St
2340: 72 4e 44 75 70 28 78 2c 79 29 29 0a 23 64 65 66  rNDup(x,y)).#def
2350: 69 6e 65 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f  ine sqliteReallo
2360: 63 4f 72 46 72 65 65 28 78 2c 79 29 20 28 45 4e  cOrFree(x,y) (EN
2370: 54 45 52 5f 4d 41 4c 4c 4f 43 2c 20 73 71 6c 69  TER_MALLOC, sqli
2380: 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  te3ReallocOrFree
2390: 28 78 2c 79 29 29 0a 0a 23 65 6c 73 65 0a 0a 23  (x,y))..#else..#
23a0: 64 65 66 69 6e 65 20 45 4e 54 45 52 5f 4d 41 4c  define ENTER_MAL
23b0: 4c 4f 43 20 30 0a 23 64 65 66 69 6e 65 20 73 71  LOC 0.#define sq
23c0: 6c 69 74 65 4d 61 6c 6c 6f 63 28 78 29 20 20 20  liteMalloc(x)   
23d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 61         sqlite3Ma
23e0: 6c 6c 6f 63 28 78 2c 31 29 0a 23 64 65 66 69 6e  lloc(x,1).#defin
23f0: 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 52 61  e sqliteMallocRa
2400: 77 28 78 29 20 20 20 20 20 20 20 73 71 6c 69 74  w(x)       sqlit
2410: 65 33 4d 61 6c 6c 6f 63 52 61 77 28 78 2c 31 29  e3MallocRaw(x,1)
2420: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 52  .#define sqliteR
2430: 65 61 6c 6c 6f 63 28 78 2c 79 29 20 20 20 20 20  ealloc(x,y)     
2440: 20 20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63    sqlite3Realloc
2450: 28 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71  (x,y).#define sq
2460: 6c 69 74 65 53 74 72 44 75 70 28 78 29 20 20 20  liteStrDup(x)   
2470: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74         sqlite3St
2480: 72 44 75 70 28 78 29 0a 23 64 65 66 69 6e 65 20  rDup(x).#define 
2490: 73 71 6c 69 74 65 53 74 72 4e 44 75 70 28 78 2c  sqliteStrNDup(x,
24a0: 79 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  y)       sqlite3
24b0: 53 74 72 4e 44 75 70 28 78 2c 79 29 0a 23 64 65  StrNDup(x,y).#de
24c0: 66 69 6e 65 20 73 71 6c 69 74 65 52 65 61 6c 6c  fine sqliteReall
24d0: 6f 63 4f 72 46 72 65 65 28 78 2c 79 29 20 73 71  ocOrFree(x,y) sq
24e0: 6c 69 74 65 33 52 65 61 6c 6c 6f 63 4f 72 46 72  lite3ReallocOrFr
24f0: 65 65 28 78 2c 79 29 0a 0a 23 65 6e 64 69 66 0a  ee(x,y)..#endif.
2500: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 46  .#define sqliteF
2510: 72 65 65 28 78 29 20 20 20 20 20 20 20 20 20 20  ree(x)          
2520: 73 71 6c 69 74 65 33 46 72 65 65 58 28 78 29 0a  sqlite3FreeX(x).
2530: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 41 6c  #define sqliteAl
2540: 6c 6f 63 53 69 7a 65 28 78 29 20 20 20 20 20 73  locSize(x)     s
2550: 71 6c 69 74 65 33 41 6c 6c 6f 63 53 69 7a 65 28  qlite3AllocSize(
2560: 78 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  x).../*.** An in
2570: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
2580: 74 72 75 63 74 75 72 65 20 6d 69 67 68 74 20 62  tructure might b
2590: 65 20 61 6c 6c 6f 63 61 74 65 64 20 74 6f 20 73  e allocated to s
25a0: 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tore information
25b0: 0a 2a 2a 20 73 70 65 63 69 66 69 63 20 74 6f 20  .** specific to 
25c0: 61 20 73 69 6e 67 6c 65 20 74 68 72 65 61 64 2e  a single thread.
25d0: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 68 72 65 61  .*/.struct Threa
25e0: 64 44 61 74 61 20 7b 0a 20 20 69 6e 74 20 64 75  dData {.  int du
25f0: 6d 6d 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  mmy;            
2600: 20 20 20 2f 2a 20 53 6f 20 74 68 61 74 20 74 68     /* So that th
2610: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
2620: 6e 65 76 65 72 20 65 6d 70 74 79 20 2a 2f 0a 0a  never empty */..
2630: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2640: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
2650: 47 45 4d 45 4e 54 0a 20 20 69 6e 74 20 6e 53 6f  GEMENT.  int nSo
2660: 66 74 48 65 61 70 4c 69 6d 69 74 3b 20 20 20 20  ftHeapLimit;    
2670: 20 20 2f 2a 20 53 75 67 67 65 73 74 65 64 20 6d    /* Suggested m
2680: 61 78 20 6d 65 6d 20 61 6c 6c 6f 63 61 74 69 6f  ax mem allocatio
2690: 6e 2e 20 20 4e 6f 20 6c 69 6d 69 74 20 69 66 20  n.  No limit if 
26a0: 3c 30 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c  <0 */.  int nAll
26b0: 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oc;             
26c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
26d0: 74 65 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c  tes currently al
26e0: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 50 61 67  located */.  Pag
26f0: 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20  er *pPager;     
2700: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
2710: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 67 65  list of all page
2720: 72 73 20 69 6e 20 74 68 69 73 20 74 68 72 65 61  rs in this threa
2730: 64 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d */.#endif..#if
2740: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2750: 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2760: 75 38 20 75 73 65 53 68 61 72 65 64 44 61 74 61  u8 useSharedData
2770: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  ;        /* True
2780: 20 69 66 20 73 68 61 72 65 64 20 70 61 67 65 72   if shared pager
2790: 73 20 61 6e 64 20 73 63 68 65 6d 61 73 20 61 72  s and schemas ar
27a0: 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 42  e enabled */.  B
27b0: 74 53 68 61 72 65 64 20 2a 70 42 74 72 65 65 3b  tShared *pBtree;
27c0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
27d0: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 75  d list of all cu
27e0: 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 42 54 72  rrently open BTr
27f0: 65 65 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ees */.#endif.};
2800: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
2810: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
2820: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
2830: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
2840: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
2850: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
2860: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
2870: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
2880: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
2890: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
28a0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
28b0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
28c0: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
28d0: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
28e0: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
28f0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
2900: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
2910: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
2920: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
2930: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
2940: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
2950: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
2960: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
2970: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
2980: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
2990: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
29a0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
29b0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
29c0: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
29d0: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
29e0: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
29f0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
2a00: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
2a10: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
2a20: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
2a30: 20 20 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a    (sizeof(X)/siz
2a40: 65 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a  eof(X[0]))../*.*
2a50: 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
2a60: 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75 72  nces to structur
2a70: 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  es.*/.typedef st
2a80: 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67  ruct AggInfo Agg
2a90: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
2aa0: 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
2ab0: 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79   AuthContext;.ty
2ac0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
2ad0: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
2ae0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
2af0: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
2b00: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
2b10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
2b20: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
2b30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
2b40: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
2b50: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
2b60: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
2b70: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
2b80: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
2b90: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
2ba0: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
2bb0: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
2bc0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
2bd0: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
2be0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
2bf0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
2c00: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
2c10: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
2c20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
2c30: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
2c40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
2c50: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
2c60: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
2c70: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
2c80: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
2c90: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
2ca0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
2cb0: 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74   SrcList SrcList
2cc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
2cd0: 20 54 68 72 65 61 64 44 61 74 61 20 54 68 72 65   ThreadData Thre
2ce0: 61 64 44 61 74 61 3b 0a 74 79 70 65 64 65 66 20  adData;.typedef 
2cf0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62  struct Table Tab
2d00: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
2d10: 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62  ct TableLock Tab
2d20: 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20  leLock;.typedef 
2d30: 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b  struct Token Tok
2d40: 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  en;.typedef stru
2d50: 63 74 20 54 72 69 67 67 65 72 53 74 61 63 6b 20  ct TriggerStack 
2d60: 54 72 69 67 67 65 72 53 74 61 63 6b 3b 0a 74 79  TriggerStack;.ty
2d70: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
2d80: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
2d90: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
2da0: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
2db0: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
2dc0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
2dd0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
2de0: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 4c 65  f struct WhereLe
2df0: 76 65 6c 20 57 68 65 72 65 4c 65 76 65 6c 3b 0a  vel WhereLevel;.
2e00: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
2e10: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
2e20: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
2e30: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
2e40: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
2e50: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
2e60: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
2e70: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
2e80: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
2e90: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
2ea0: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
2eb0: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
2ec0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2ed0: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
2ee0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
2ef0: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
2f00: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
2f10: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
2f20: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
2f30: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
2f40: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
2f50: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
2f60: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
2f70: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
2f80: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
2f90: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
2fa0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
2fb0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
2fc0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69 6e 54  file */.  u8 inT
2fd0: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 2f  rans;          /
2fe0: 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74 61 62 6c  * 0: not writabl
2ff0: 65 2e 20 20 31 3a 20 54 72 61 6e 73 61 63 74 69  e.  1: Transacti
3000: 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70 6f 69  on.  2: Checkpoi
3010: 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  nt */.  u8 safet
3020: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
3030: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
3040: 74 20 73 79 6e 63 68 69 6e 67 20 64 61 74 61 20  t synching data 
3050: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 76 6f 69  to disk */.  voi
3060: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
3070: 20 20 20 20 20 20 20 2f 2a 20 41 75 78 69 6c 69         /* Auxili
3080: 61 72 79 20 64 61 74 61 2e 20 20 55 73 75 61 6c  ary data.  Usual
3090: 6c 79 20 4e 55 4c 4c 20 2a 2f 0a 20 20 76 6f 69  ly NULL */.  voi
30a0: 64 20 28 2a 78 46 72 65 65 41 75 78 29 28 76 6f  d (*xFreeAux)(vo
30b0: 69 64 2a 29 3b 20 20 2f 2a 20 52 6f 75 74 69 6e  id*);  /* Routin
30c0: 65 20 74 6f 20 66 72 65 65 20 70 41 75 78 20 2a  e to free pAux *
30d0: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
30e0: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
30f0: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
3100: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
3110: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
3120: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
3130: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
3140: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
3150: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
3160: 63 68 65 6d 61 2e 0a 2a 2f 0a 73 74 72 75 63 74  chema..*/.struct
3170: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
3180: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
3190: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
31a0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
31b0: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
31c0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
31d0: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
31e0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
31f0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
3200: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
3210: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
3220: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
3230: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
3240: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
3250: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
3260: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
3270: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 61 46  ame */.  Hash aF
3280: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Key;          /*
3290: 20 46 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   Foreign keys in
32a0: 64 65 78 65 64 20 62 79 20 74 6f 2d 74 61 62 6c  dexed by to-tabl
32b0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
32c0: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
32d0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
32e0: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
32f0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
3300: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
3310: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
3320: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
3330: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
3340: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
3350: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
3360: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
3370: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
3380: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
3390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
33a0: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
33b0: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
33c0: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
33d0: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
33e0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
33f0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
3400: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
3410: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
3420: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
3430: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
3440: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
3450: 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
3460: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
3470: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
3480: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
3490: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28  pSchema->flags&(
34a0: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
34b0: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
34c0: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
34d0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
34e0: 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
34f0: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
3500: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
3510: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
3520: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50  chema->flags|=(P
3530: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
3540: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
3550: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
3560: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e  Schema->flags&=~
3570: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
3580: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
3590: 65 20 44 42 2e 66 6c 61 67 73 20 66 69 65 6c 64  e DB.flags field
35a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
35b0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
35c0: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
35d0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
35e0: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
35f0: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
3600: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
3610: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
3620: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
3630: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
3640: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
3650: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
3660: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
3670: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
3680: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
3690: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
36a0: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
36b0: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
36c0: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
36d0: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
36e0: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
36f0: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
3700: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
3710: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
3720: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
3730: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
3740: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
3750: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
3760: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
3770: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
3780: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
3790: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
37a0: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
37b0: 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  ) */.../*.** Eac
37c0: 68 20 64 61 74 61 62 61 73 65 20 69 73 20 61 6e  h database is an
37d0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
37e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
37f0: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
3800: 73 71 6c 69 74 65 2e 6c 61 73 74 52 6f 77 69 64  sqlite.lastRowid
3810: 20 72 65 63 6f 72 64 73 20 74 68 65 20 6c 61 73   records the las
3820: 74 20 69 6e 73 65 72 74 20 72 6f 77 69 64 20 67  t insert rowid g
3830: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a 2a  enerated by an.*
3840: 2a 20 69 6e 73 65 72 74 20 73 74 61 74 65 6d 65  * insert stateme
3850: 6e 74 2e 20 20 49 6e 73 65 72 74 73 20 6f 6e 20  nt.  Inserts on 
3860: 76 69 65 77 73 20 64 6f 20 6e 6f 74 20 61 66 66  views do not aff
3870: 65 63 74 20 69 74 73 20 76 61 6c 75 65 2e 20 20  ect its value.  
3880: 45 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20  Each.** trigger 
3890: 68 61 73 20 69 74 73 20 6f 77 6e 20 63 6f 6e 74  has its own cont
38a0: 65 78 74 2c 20 73 6f 20 74 68 61 74 20 6c 61 73  ext, so that las
38b0: 74 52 6f 77 69 64 20 63 61 6e 20 62 65 20 75 70  tRowid can be up
38c0: 64 61 74 65 64 20 69 6e 73 69 64 65 0a 2a 2a 20  dated inside.** 
38d0: 74 72 69 67 67 65 72 73 20 61 73 20 75 73 75 61  triggers as usua
38e0: 6c 2e 20 20 54 68 65 20 70 72 65 76 69 6f 75 73  l.  The previous
38f0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
3900: 65 73 74 6f 72 65 64 20 6f 6e 63 65 20 74 68 65  estored once the
3910: 20 74 72 69 67 67 65 72 0a 2a 2a 20 65 78 69 74   trigger.** exit
3920: 73 2e 20 20 55 70 6f 6e 20 65 6e 74 65 72 69 6e  s.  Upon enterin
3930: 67 20 61 20 62 65 66 6f 72 65 20 6f 72 20 69 6e  g a before or in
3940: 73 74 65 61 64 20 6f 66 20 74 72 69 67 67 65 72  stead of trigger
3950: 2c 20 6c 61 73 74 52 6f 77 69 64 20 69 73 20 6e  , lastRowid is n
3960: 6f 0a 2a 2a 20 6c 6f 6e 67 65 72 20 28 73 69 6e  o.** longer (sin
3970: 63 65 20 61 66 74 65 72 20 76 65 72 73 69 6f 6e  ce after version
3980: 20 32 2e 38 2e 31 32 29 20 72 65 73 65 74 20 74   2.8.12) reset t
3990: 6f 20 2d 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o -1..**.** The 
39a0: 73 71 6c 69 74 65 2e 6e 43 68 61 6e 67 65 20 64  sqlite.nChange d
39b0: 6f 65 73 20 6e 6f 74 20 63 6f 75 6e 74 20 63 68  oes not count ch
39c0: 61 6e 67 65 73 20 77 69 74 68 69 6e 20 74 72 69  anges within tri
39d0: 67 67 65 72 73 20 61 6e 64 20 6b 65 65 70 73 20  ggers and keeps 
39e0: 6e 6f 0a 2a 2a 20 63 6f 6e 74 65 78 74 2e 20 20  no.** context.  
39f0: 49 74 20 69 73 20 72 65 73 65 74 20 61 74 20 73  It is reset at s
3a00: 74 61 72 74 20 6f 66 20 73 71 6c 69 74 65 33 5f  tart of sqlite3_
3a10: 65 78 65 63 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  exec..** The sql
3a20: 69 74 65 2e 6c 73 43 68 61 6e 67 65 20 72 65 70  ite.lsChange rep
3a30: 72 65 73 65 6e 74 73 20 74 68 65 20 6e 75 6d 62  resents the numb
3a40: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61  er of changes ma
3a50: 64 65 20 62 79 20 74 68 65 20 6c 61 73 74 0a 2a  de by the last.*
3a60: 2a 20 69 6e 73 65 72 74 2c 20 75 70 64 61 74 65  * insert, update
3a70: 2c 20 6f 72 20 64 65 6c 65 74 65 20 73 74 61 74  , or delete stat
3a80: 65 6d 65 6e 74 2e 20 20 49 74 20 72 65 6d 61 69  ement.  It remai
3a90: 6e 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 72 6f  ns constant thro
3aa0: 75 67 68 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 65  ughout the.** le
3ab0: 6e 67 74 68 20 6f 66 20 61 20 73 74 61 74 65 6d  ngth of a statem
3ac0: 65 6e 74 20 61 6e 64 20 69 73 20 74 68 65 6e 20  ent and is then 
3ad0: 75 70 64 61 74 65 64 20 62 79 20 4f 50 5f 53 65  updated by OP_Se
3ae0: 74 43 6f 75 6e 74 73 2e 20 20 49 74 20 6b 65 65  tCounts.  It kee
3af0: 70 73 20 61 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  ps a.** context 
3b00: 73 74 61 63 6b 20 6a 75 73 74 20 6c 69 6b 65 20  stack just like 
3b10: 6c 61 73 74 52 6f 77 69 64 20 73 6f 20 74 68 61  lastRowid so tha
3b20: 74 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 63  t the count of c
3b30: 68 61 6e 67 65 73 0a 2a 2a 20 77 69 74 68 69 6e  hanges.** within
3b40: 20 61 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f   a trigger is no
3b50: 74 20 73 65 65 6e 20 6f 75 74 73 69 64 65 20 74  t seen outside t
3b60: 68 65 20 74 72 69 67 67 65 72 2e 20 20 43 68 61  he trigger.  Cha
3b70: 6e 67 65 73 20 74 6f 20 76 69 65 77 73 20 64 6f  nges to views do
3b80: 20 6e 6f 74 0a 2a 2a 20 61 66 66 65 63 74 20 74   not.** affect t
3b90: 68 65 20 76 61 6c 75 65 20 6f 66 20 6c 73 43 68  he value of lsCh
3ba0: 61 6e 67 65 2e 0a 2a 2a 20 54 68 65 20 73 71 6c  ange..** The sql
3bb0: 69 74 65 2e 63 73 43 68 61 6e 67 65 20 6b 65 65  ite.csChange kee
3bc0: 70 73 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20  ps track of the 
3bd0: 6e 75 6d 62 65 72 20 6f 66 20 63 75 72 72 65 6e  number of curren
3be0: 74 20 63 68 61 6e 67 65 73 20 28 73 69 6e 63 65  t changes (since
3bf0: 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 74 61  .** the last sta
3c00: 74 65 6d 65 6e 74 29 20 61 6e 64 20 69 73 20 75  tement) and is u
3c10: 73 65 64 20 74 6f 20 75 70 64 61 74 65 20 73 71  sed to update sq
3c20: 6c 69 74 65 5f 6c 73 43 68 61 6e 67 65 2e 0a 2a  lite_lsChange..*
3c30: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 62 65 72 20  *.** The member 
3c40: 76 61 72 69 61 62 6c 65 73 20 73 71 6c 69 74 65  variables sqlite
3c50: 2e 65 72 72 43 6f 64 65 2c 20 73 71 6c 69 74 65  .errCode, sqlite
3c60: 2e 7a 45 72 72 4d 73 67 20 61 6e 64 20 73 71 6c  .zErrMsg and sql
3c70: 69 74 65 2e 7a 45 72 72 4d 73 67 31 36 0a 2a 2a  ite.zErrMsg16.**
3c80: 20 73 74 6f 72 65 20 74 68 65 20 6d 6f 73 74 20   store the most 
3c90: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
3ca0: 65 20 61 6e 64 2c 20 69 66 20 61 70 70 6c 69 63  e and, if applic
3cb0: 61 62 6c 65 2c 20 73 74 72 69 6e 67 2e 20 54 68  able, string. Th
3cc0: 65 0a 2a 2a 20 69 6e 74 65 72 6e 61 6c 20 66 75  e.** internal fu
3cd0: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 45 72  nction sqlite3Er
3ce0: 72 6f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  ror() is used to
3cf0: 20 73 65 74 20 74 68 65 73 65 20 76 61 72 69 61   set these varia
3d00: 62 6c 65 73 0a 2a 2a 20 63 6f 6e 73 69 73 74 65  bles.** consiste
3d10: 6e 74 6c 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ntly..*/.struct 
3d20: 73 71 6c 69 74 65 33 20 7b 0a 20 20 69 6e 74 20  sqlite3 {.  int 
3d30: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
3d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
3d50: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
3d60: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
3d70: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
3da0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  nds */.  int fla
3db0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
3dc0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
3dd0: 6c 61 6e 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  lanous flags. Se
3de0: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74  e below */.  int
3df0: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
3e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
3e10: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
3e20: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
3e30: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
3e40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3e50: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
3e60: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
3e70: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
3e80: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d  */.  u8 autoComm
3e90: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
3ea0: 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63     /* The auto-c
3eb0: 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20  ommit flag. */. 
3ec0: 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20   u8 temp_store; 
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3ee0: 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d  * 1: file 2: mem
3ef0: 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a  ory 0: default *
3f00: 2f 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 3b 20  /.  int nTable; 
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
3f30: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
3f40: 61 62 61 73 65 20 2a 2f 0a 20 20 43 6f 6c 6c 53  abase */.  CollS
3f50: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
3f60: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
3f70: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
3f80: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
3f90: 52 59 29 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  RY) */.  i64 las
3fa0: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
3fb0: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
3fc0: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
3fd0: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
3fe0: 29 20 2a 2f 0a 20 20 69 36 34 20 70 72 69 6f 72  ) */.  i64 prior
3ff0: 4e 65 77 52 6f 77 69 64 3b 20 20 20 20 20 20 20  NewRowid;       
4000: 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 72 61 6e       /* Last ran
4010: 64 6f 6d 6c 79 20 67 65 6e 65 72 61 74 65 64 20  domly generated 
4020: 52 4f 57 49 44 20 2a 2f 0a 20 20 69 6e 74 20 6d  ROWID */.  int m
4030: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
4040: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
4050: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
4060: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
4070: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
4080: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
4090: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
40a0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
40b0: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
40c0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
40d0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
40e0: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
40f0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
4100: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
4110: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
4120: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
4130: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
4140: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
4150: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
4160: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4180: 57 68 65 6e 20 62 61 63 6b 20 69 73 20 62 65 69  When back is bei
4190: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
41a0: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
41b0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
41c0: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
41d0: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
41e0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
41f0: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
4200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4210: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
4220: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
4230: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
4240: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
4250: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4260: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
4270: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
4280: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
4290: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
42a0: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
42b0: 6c 69 62 72 61 72 61 79 20 68 61 6e 64 6c 65 73  libraray handles
42c0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
42d0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
42e0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
42f0: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
4300: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 69 6e 74 20  chines */.  int 
4310: 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b 20 20  activeVdbeCnt;  
4320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4330: 62 65 72 20 6f 66 20 76 64 62 65 73 20 63 75 72  ber of vdbes cur
4340: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
4350: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72   */.  void (*xTr
4360: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
4370: 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20   char*);        
4380: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
4390: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
43a0: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
43d0: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
43e0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
43f0: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
4400: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
4410: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
4420: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
4430: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
4460: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
4470: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
4480: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
44a0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
44b0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
44c0: 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f  /   .  int (*xCo
44d0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
44e0: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
44f0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
4500: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
4510: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
4520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
4530: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
4540: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
4550: 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52  /   .  void (*xR
4560: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
4570: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
4580: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
4590: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
45a0: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
45b0: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
45c0: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
45d0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
45e0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
45f0: 69 6e 74 36 34 29 3b 0a 20 20 76 6f 69 64 28 2a  int64);.  void(*
4600: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
4610: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
4620: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
4630: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
4640: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
4650: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
4660: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
4670: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
4680: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
4690: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
46a0: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
46b0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
46c0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
46d0: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
4700: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54  rror message (UT
4710: 46 2d 38 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a  F-8 encoded) */.
4720: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 31    char *zErrMsg1
4730: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  6;              
4740: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
4750: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54  rror message (UT
4760: 46 2d 31 36 20 65 6e 63 6f 64 65 64 29 20 2a 2f  F-16 encoded) */
4770: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 69  .  union {.    i
4780: 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64  nt isInterrupted
4790: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
47a0: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
47b0: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
47c0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
47d0: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
47e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
47f0: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
4800: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4810: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
4820: 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29  N.  int (*xAuth)
4830: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
4840: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
4850: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
4860: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20  onst char*);.   
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4890: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
48a0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
48b0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
48c0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
48d0: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
48e0: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
48f0: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
4900: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4910: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4920: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
4930: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
4940: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
4950: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
4960: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4970: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
4980: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
4990: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
49a0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
49b0: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
49c0: 4f 70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ops;            
49d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
49e0: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
49f0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
4a00: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4a10: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
4a20: 4c 54 41 42 4c 45 0a 20 20 48 61 73 68 20 61 4d  LTABLE.  Hash aM
4a30: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
4a40: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
4a50: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
4a60: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
4a70: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 56 54 61 62  /.  Table *pVTab
4a80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4a90: 20 20 2f 2a 20 76 74 61 62 20 77 69 74 68 20 61    /* vtab with a
4aa0: 63 74 69 76 65 20 43 6f 6e 6e 65 63 74 2f 43 72  ctive Connect/Cr
4ab0: 65 61 74 65 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  eate method */. 
4ac0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2a   sqlite3_vtab **
4ad0: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 2f  aVTrans;       /
4ae0: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
4af0: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
4b00: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  actions */.  int
4b10: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
4b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
4b30: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
4b40: 61 56 54 72 61 6e 73 20 2a 2f 0a 23 65 6e 64 69  aVTrans */.#endi
4b50: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b70: 20 20 2f 2a 20 41 6c 6c 20 66 75 6e 63 74 69 6f    /* All functio
4b80: 6e 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 69  ns that can be i
4b90: 6e 20 53 51 4c 20 65 78 70 72 73 20 2a 2f 0a 20  n SQL exprs */. 
4ba0: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4bc0: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
4bd0: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
4be0: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
4bf0: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
4c00: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
4c10: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
4c20: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
4c30: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
4c40: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
4c50: 63 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  c */.  Db aDbSta
4c60: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
4c70: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
4c80: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
4c90: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
4ca0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4cb0: 5f 53 53 45 0a 20 20 73 71 6c 69 74 65 33 5f 73  _SSE.  sqlite3_s
4cc0: 74 6d 74 20 2a 70 46 65 74 63 68 3b 20 20 20 20  tmt *pFetch;    
4cd0: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
4ce0: 53 53 45 20 74 6f 20 66 65 74 63 68 20 73 74 6f  SSE to fetch sto
4cf0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  red statements *
4d00: 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 64 66  /.#endif.  u8 df
4d10: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
4d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
4d30: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
4d40: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
4d50: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
4d60: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
4d70: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
4d80: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
4d90: 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  /.#define ENC(db
4da0: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
4db0: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f  pSchema->enc)../
4dc0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
4dd0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
4de0: 69 74 65 2e 66 6c 61 67 73 20 61 6e 64 20 6f 72  ite.flags and or
4df0: 20 44 62 2e 66 6c 61 67 73 20 66 69 65 6c 64 73   Db.flags fields
4e00: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 20 73 71 6c 69 74  ..**.** On sqlit
4e10: 65 2e 66 6c 61 67 73 2c 20 74 68 65 20 53 51 4c  e.flags, the SQL
4e20: 49 54 45 5f 49 6e 54 72 61 6e 73 20 76 61 6c 75  ITE_InTrans valu
4e30: 65 20 6d 65 61 6e 73 20 74 68 61 74 20 77 65 20  e means that we 
4e40: 68 61 76 65 0a 2a 2a 20 65 78 65 63 75 74 65 64  have.** executed
4e50: 20 61 20 42 45 47 49 4e 2e 20 20 4f 6e 20 44 62   a BEGIN.  On Db
4e60: 2e 66 6c 61 67 73 2c 20 53 51 4c 49 54 45 5f 49  .flags, SQLITE_I
4e70: 6e 54 72 61 6e 73 20 6d 65 61 6e 73 20 61 20 73  nTrans means a s
4e80: 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 74 72 61 6e  tatement.** tran
4e90: 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
4ea0: 65 20 6f 6e 20 74 68 61 74 20 70 61 72 74 69 63  e on that partic
4eb0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 66 69  ular database fi
4ec0: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
4ed0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4ee0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
4ef0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
4f00: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
4f10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
4f20: 54 45 5f 49 6e 54 72 61 6e 73 20 20 20 20 20 20  TE_InTrans      
4f30: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
4f40: 20 54 72 75 65 20 69 66 20 69 6e 20 61 20 74 72   True if in a tr
4f50: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
4f60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65  fine SQLITE_Inte
4f70: 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30  rnChanges  0x000
4f80: 30 30 30 31 30 20 20 2f 2a 20 55 6e 63 6f 6d 6d  00010  /* Uncomm
4f90: 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65  itted Hash table
4fa0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
4fb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
4fc0: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
4fd0: 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75  0020  /* Show fu
4fe0: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
4ff0: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
5000: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
5010: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
5020: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
5030: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
5040: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
5050: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
5060: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
5070: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
5080: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
5090: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
50c0: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
50d0: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
50e0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5110: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
5120: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
5130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5140: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
5150: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
5160: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
5170: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
5180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
51b0: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
51c0: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
51d0: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
51e0: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
51f0: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
5200: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
5210: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
5220: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
5230: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
5240: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
5250: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
5260: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
5270: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
5280: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
5290: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
52a0: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
52b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
52c0: 4e 6f 52 65 61 64 6c 6f 63 6b 20 20 20 20 20 30  NoReadlock     0
52d0: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65  x00001000  /* Re
52e0: 61 64 6c 6f 63 6b 73 20 61 72 65 20 6f 6d 69 74  adlocks are omit
52f0: 74 65 64 20 77 68 65 6e 20 0a 20 20 20 20 20 20  ted when .      
5300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5320: 20 20 20 20 2a 2a 20 61 63 63 65 73 73 69 6e 67      ** accessing
5330: 20 72 65 61 64 2d 6f 6e 6c 79 20 64 61 74 61 62   read-only datab
5340: 61 73 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ases */.#define 
5350: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
5360: 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30  cks   0x00002000
5370: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
5380: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
5390: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
53a0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
53b0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 30 34 30  mmitted 0x000040
53c0: 30 30 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  00 /* For shared
53d0: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
53e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
53f0: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
5400: 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61  0008000  /* Crea
5410: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
5420: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
5430: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
5440: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
5450: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 55 73 65  00010000  /* Use
5460: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
5470: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
5480: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
5490: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
54a0: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
54b0: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
54c0: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c   */..#define SQL
54d0: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
54e0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
54f0: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
5500: 65 72 72 6f 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  errors */../*.**
5510: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
5520: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
5530: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
5540: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
5550: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
5560: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
5570: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
5580: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
5590: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
55a0: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
55b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
55c0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
55d0: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
55e0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
55f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
5600: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
5610: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
5620: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
5630: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
5640: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
5650: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
5660: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
5670: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
5680: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
5690: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
56a0: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
56b0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
56c0: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
56d0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
56e0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
56f0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
5700: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
5710: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
5720: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
5730: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
5740: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
5750: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
5760: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
5770: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
5780: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
5790: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
57a0: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
57b0: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
57c0: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
57d0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
57e0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
57f0: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
5800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
5810: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
5820: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
5830: 2f 0a 20 20 75 38 20 69 50 72 65 66 45 6e 63 3b  /.  u8 iPrefEnc;
5840: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65 66           /* Pref
5850: 65 72 72 65 64 20 74 65 78 74 20 65 6e 63 6f 64  erred text encod
5860: 69 6e 67 20 28 53 51 4c 49 54 45 5f 55 54 46 38  ing (SQLITE_UTF8
5870: 2c 20 31 36 4c 45 2c 20 31 36 42 45 29 20 2a 2f  , 16LE, 16BE) */
5880: 0a 20 20 75 38 20 6e 65 65 64 43 6f 6c 6c 53 65  .  u8 needCollSe
5890: 71 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  q;      /* True 
58a0: 69 66 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  if sqlite3GetFun
58b0: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
58c0: 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20   be called */.  
58d0: 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  u8 flags;       
58e0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
58f0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
5900: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
5910: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
5920: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
5930: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
5940: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
5950: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
5960: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
5970: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
5980: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
5990: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
59a0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
59b0: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
59c0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
59d0: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
59e0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
59f0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
5a00: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
5a10: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
5a20: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
5a30: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
5a40: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
5a50: 67 61 74 65 20 66 69 6e 69 61 6c 69 7a 65 72 20  gate finializer 
5a60: 2a 2f 0a 20 20 63 68 61 72 20 7a 4e 61 6d 65 5b  */.  char zName[
5a70: 31 5d 3b 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  1];       /* SQL
5a80: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
5a90: 63 74 69 6f 6e 2e 20 20 4d 55 53 54 20 42 45 20  ction.  MUST BE 
5aa0: 4c 41 53 54 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  LAST */.};../*.*
5ab0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
5ac0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
5ad0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
5ae0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
5af0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
5b00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5b10: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
5b20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
5b30: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
5b40: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
5b50: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
5b60: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
5b70: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
5b80: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
5b90: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
5ba0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5bc0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
5bd0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
5be0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
5bf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
5c10: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
5c20: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
5c30: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
5c40: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
5c50: 6e 63 44 65 66 2e 66 6c 61 67 73 0a 2a 2f 0a 23  ncDef.flags.*/.#
5c60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
5c70: 4e 43 5f 4c 49 4b 45 20 20 20 30 78 30 31 20 20  NC_LIKE   0x01  
5c80: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
5c90: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
5ca0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
5cb0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
5cc0: 53 45 20 20 20 30 78 30 32 20 20 2f 2a 20 43 61  SE   0x02  /* Ca
5cd0: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
5ce0: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
5cf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
5d00: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 30 78  E_FUNC_EPHEM  0x
5d10: 30 34 20 20 2f 2a 20 45 70 68 65 72 6d 65 72 61  04  /* Ephermera
5d20: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
5d30: 56 44 42 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 69  VDBE */../*.** i
5d40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
5d50: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
5d60: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
5d70: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
5d80: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
5d90: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
5da0: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
5db0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
5dc0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
5dd0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
5de0: 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
5df0: 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
5e00: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
5e10: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
5e20: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
5e30: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
5e40: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
5e50: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
5e60: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
5e70: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
5e80: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
5e90: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
5ea0: 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
5eb0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
5ec0: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 75 38 20 69  traint */.  u8 i
5ed0: 73 50 72 69 6d 4b 65 79 3b 20 20 20 20 2f 2a 20  sPrimKey;    /* 
5ee0: 54 72 75 65 20 69 66 20 74 68 69 73 20 63 6f 6c  True if this col
5ef0: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
5f00: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  he PRIMARY KEY *
5f10: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
5f20: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
5f30: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
5f40: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  . values */.};..
5f50: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
5f60: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
5f70: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
5f80: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5f90: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
5fa0: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
5fb0: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
5fc0: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
5fd0: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
5fe0: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
5ff0: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
6000: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
6010: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
6020: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 61 79  .**.** There may
6030: 20 74 77 6f 20 73 65 70 65 72 61 74 65 20 69 6d   two seperate im
6040: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66  plementations of
6050: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66   the collation f
6060: 75 6e 63 74 69 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20  unction, one.** 
6070: 74 68 61 74 20 70 72 6f 63 65 73 73 65 73 20 74  that processes t
6080: 65 78 74 20 69 6e 20 55 54 46 2d 38 20 65 6e 63  ext in UTF-8 enc
6090: 6f 64 69 6e 67 20 28 43 6f 6c 6c 53 65 71 2e 78  oding (CollSeq.x
60a0: 43 6d 70 29 20 61 6e 64 20 61 6e 6f 74 68 65 72  Cmp) and another
60b0: 20 74 68 61 74 0a 2a 2a 20 70 72 6f 63 65 73 73   that.** process
60c0: 65 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20  es text encoded 
60d0: 69 6e 20 55 54 46 2d 31 36 20 28 43 6f 6c 6c 53  in UTF-16 (CollS
60e0: 65 71 2e 78 43 6d 70 31 36 29 2c 20 75 73 69 6e  eq.xCmp16), usin
60f0: 67 20 74 68 65 20 6d 61 63 68 69 6e 65 0a 2a 2a  g the machine.**
6100: 20 6e 61 74 69 76 65 20 62 79 74 65 20 6f 72 64   native byte ord
6110: 65 72 2e 20 57 68 65 6e 20 61 20 63 6f 6c 6c 61  er. When a colla
6120: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
6130: 20 69 6e 76 6f 6b 65 64 2c 20 53 51 4c 69 74 65   invoked, SQLite
6140: 20 73 65 6c 65 63 74 73 0a 2a 2a 20 74 68 65 20   selects.** the 
6150: 76 65 72 73 69 6f 6e 20 74 68 61 74 20 77 69 6c  version that wil
6160: 6c 20 72 65 71 75 69 72 65 20 74 68 65 20 6c 65  l require the le
6170: 61 73 74 20 65 78 70 65 6e 73 69 76 65 20 65 6e  ast expensive en
6180: 63 6f 64 69 6e 67 0a 2a 2a 20 74 72 61 6e 73 6c  coding.** transl
6190: 61 74 69 6f 6e 73 2c 20 69 66 20 61 6e 79 2e 0a  ations, if any..
61a0: 2a 2a 0a 2a 2a 20 54 68 65 20 43 6f 6c 6c 53 65  **.** The CollSe
61b0: 71 2e 70 55 73 65 72 20 6d 65 6d 62 65 72 20 76  q.pUser member v
61c0: 61 72 69 61 62 6c 65 20 69 73 20 61 6e 20 65 78  ariable is an ex
61d0: 74 72 61 20 70 61 72 61 6d 65 74 65 72 20 74 68  tra parameter th
61e0: 61 74 20 70 61 73 73 65 64 20 69 6e 0a 2a 2a 20  at passed in.** 
61f0: 61 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67  as the first arg
6200: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 55 54 46  ument to the UTF
6210: 2d 38 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  -8 comparison fu
6220: 6e 63 74 69 6f 6e 2c 20 78 43 6d 70 2e 0a 2a 2a  nction, xCmp..**
6230: 20 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72 31 36   CollSeq.pUser16
6240: 20 69 73 20 74 68 65 20 65 71 75 69 76 61 6c 65   is the equivale
6250: 6e 74 20 66 6f 72 20 74 68 65 20 55 54 46 2d 31  nt for the UTF-1
6260: 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  6 comparison fun
6270: 63 74 69 6f 6e 2c 0a 2a 2a 20 78 43 6d 70 31 36  ction,.** xCmp16
6280: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
6290: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 61 6e 64  CollSeq.xCmp and
62a0: 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31 36 20   CollSeq.xCmp16 
62b0: 61 72 65 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61  are NULL, it mea
62c0: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
62d0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
62e0: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
62f0: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
6300: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
6310: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
6320: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
6330: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
6340: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
6350: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
6360: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
6370: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
6380: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
6390: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
63a0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
63b0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
63c0: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
63d0: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 75  by xCmp() */.  u
63e0: 38 20 74 79 70 65 3b 20 20 20 20 20 20 20 20 20  8 type;         
63f0: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68      /* One of th
6400: 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 2e 2e  e SQLITE_COLL_..
6410: 2e 20 76 61 6c 75 65 73 20 62 65 6c 6f 77 20 2a  . values below *
6420: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
6430: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
6440: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
6450: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
6460: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
6470: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
6480: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
6490: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
64a0: 65 64 20 76 61 6c 75 65 73 20 6f 66 20 43 6f 6c  ed values of Col
64b0: 6c 53 65 71 20 66 6c 61 67 73 3a 0a 2a 2f 0a 23  lSeq flags:.*/.#
64c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
64d0: 4c 4c 5f 42 49 4e 41 52 59 20 20 31 20 20 2f 2a  LL_BINARY  1  /*
64e0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d   The default mem
64f0: 63 6d 70 28 29 20 63 6f 6c 6c 61 74 69 6e 67 20  cmp() collating 
6500: 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65 66  sequence */.#def
6510: 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f  ine SQLITE_COLL_
6520: 4e 4f 43 41 53 45 20 20 32 20 20 2f 2a 20 54 68  NOCASE  2  /* Th
6530: 65 20 62 75 69 6c 74 2d 69 6e 20 4e 4f 43 41 53  e built-in NOCAS
6540: 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  E collating sequ
6550: 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ence */.#define 
6560: 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 52 45 56 45  SQLITE_COLL_REVE
6570: 52 53 45 20 33 20 20 2f 2a 20 54 68 65 20 62 75  RSE 3  /* The bu
6580: 69 6c 74 2d 69 6e 20 52 45 56 45 52 53 45 20 63  ilt-in REVERSE c
6590: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
65a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
65b0: 49 54 45 5f 43 4f 4c 4c 5f 55 53 45 52 20 20 20  ITE_COLL_USER   
65c0: 20 30 20 20 2f 2a 20 41 6e 79 20 6f 74 68 65 72   0  /* Any other
65d0: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 63 6f   user-defined co
65e0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
65f0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72   */../*.** A sor
6600: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
6610: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
6620: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
6630: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
6640: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
6650: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
6660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6670: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
6680: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
6690: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
66a0: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
66b0: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
66c0: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
66d0: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
66e0: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
66f0: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
6700: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
6710: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
6720: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
6730: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
6740: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
6750: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
6760: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
6770: 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73   the values cons
6780: 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a  ecutively.  .**.
6790: 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
67a0: 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
67b0: 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
67c0: 69 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77  ith 'a'.  That w
67d0: 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
67e0: 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
67f0: 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
6800: 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
6810: 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
6820: 73 20 74 68 65 20 50 33 20 6f 70 65 72 61 6e 64  s the P3 operand
6830: 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
6840: 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
6850: 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
6860: 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
6870: 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
6880: 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
6890: 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
68a0: 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
68b0: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
68c0: 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  arison..*/.#defi
68d0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
68e0: 58 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69  XT     'a'.#defi
68f0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
6900: 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69  NE     'b'.#defi
6910: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
6920: 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69  MERIC  'c'.#defi
6930: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
6940: 54 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69  TEGER  'd'.#defi
6950: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
6960: 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66  AL     'e'..#def
6970: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
6980: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
6990: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
69a0: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
69b0: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
69c0: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
69d0: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
69e0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
69f0: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
6a00: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
6a10: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
6a20: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
6a30: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
6a40: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
6a50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6a60: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
6a70: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
6a80: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
6a90: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
6aa0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
6ab0: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
6ac0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
6ad0: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
6ae0: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
6af0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
6b00: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
6b10: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
6b20: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
6b30: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
6b40: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
6b50: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
6b60: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
6b70: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
6b80: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
6b90: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
6ba0: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
6bb0: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
6bc0: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
6bd0: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
6be0: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
6bf0: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
6c00: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
6c10: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
6c20: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
6c30: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
6c40: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
6c50: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
6c60: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
6c70: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
6c80: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
6c90: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
6ca0: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
6cb0: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
6cc0: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
6cd0: 20 20 54 61 62 6c 65 2e 68 61 73 50 72 69 6d 4b    Table.hasPrimK
6ce0: 65 79 20 69 73 20 74 72 75 65 20 69 66 0a 2a 2a  ey is true if.**
6cf0: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
6d00: 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ny PRIMARY KEY, 
6d10: 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72  INTEGER or other
6d20: 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  wise..**.** Tabl
6d30: 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61  e.tnum is the pa
6d40: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
6d50: 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67  e root BTree pag
6d60: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
6d70: 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  n the.** databas
6d80: 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c  e file.  If Tabl
6d90: 65 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64  e.iDb is the ind
6da0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
6db0: 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64  se table backend
6dc0: 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44  .** in sqlite.aD
6dd0: 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74  b[].  0 is for t
6de0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
6df0: 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68   and 1 is for th
6e00: 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68  e file that.** h
6e10: 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74  olds temporary t
6e20: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
6e30: 73 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 73 45  s.  If Table.isE
6e40: 70 68 65 6d 0a 2a 2a 20 69 73 20 74 72 75 65 2c  phem.** is true,
6e50: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
6e60: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
6e70: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
6e80: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
6e90: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
6ea0: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
6eb0: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
6ec0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
6ed0: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
6ee0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
6ef0: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
6f00: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
6f10: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
6f20: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
6f30: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
6f40: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
6f50: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
6f60: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
6f70: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
6f80: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
6f90: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
6fa0: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
6fb0: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
6fc0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
6fd0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
6fe0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
6ff0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
7000: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
7010: 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  nCol;        /* 
7020: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
7030: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
7040: 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
7050: 6c 3b 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  l;    /* Informa
7060: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
7070: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
7080: 69 50 4b 65 79 3b 20 20 20 20 20 20 20 2f 2a 20  iPKey;       /* 
7090: 49 66 20 6e 6f 74 20 6c 65 73 73 20 74 68 65 6e  If not less then
70a0: 20 30 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b   0, use aCol[iPK
70b0: 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61  ey] as the prima
70c0: 72 79 20 6b 65 79 20 2a 2f 0a 20 20 49 6e 64 65  ry key */.  Inde
70d0: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 2f 2a 20  x *pIndex;   /* 
70e0: 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
70f0: 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
7100: 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  e. */.  int tnum
7110: 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ;        /* Root
7120: 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20   BTree node for 
7130: 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65 20  this table (see 
7140: 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  note above) */. 
7150: 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
7160: 3b 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61  ; /* NULL for ta
7170: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
7180: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
7190: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 69 6e 74 20   view. */.  int 
71a0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 2f  nRef;          /
71b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
71c0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
71d0: 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  le */.  Trigger 
71e0: 2a 70 54 72 69 67 67 65 72 3b 20 2f 2a 20 4c 69  *pTrigger; /* Li
71f0: 73 74 20 6f 66 20 53 51 4c 20 74 72 69 67 67 65  st of SQL trigge
7200: 72 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  rs on this table
7210: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
7220: 79 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  y;       /* Link
7230: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
7240: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
7250: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
7260: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
7270: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
7280: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
7290: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
72a0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
72b0: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
72c0: 45 78 70 72 20 2a 70 43 68 65 63 6b 3b 20 20 20  Expr *pCheck;   
72d0: 20 20 20 2f 2a 20 54 68 65 20 41 4e 44 20 6f 66     /* The AND of
72e0: 20 61 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   all CHECK const
72f0: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
7300: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7310: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
7320: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
7330: 65 74 3b 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  et;  /* Offset i
7340: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
7350: 74 61 74 65 6d 65 6e 74 20 74 6f 20 61 64 64 20  tatement to add 
7360: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
7370: 23 65 6e 64 69 66 0a 20 20 75 38 20 72 65 61 64  #endif.  u8 read
7380: 4f 6e 6c 79 3b 20 20 20 20 20 2f 2a 20 54 72 75  Only;     /* Tru
7390: 65 20 69 66 20 74 68 69 73 20 74 61 62 6c 65 20  e if this table 
73a0: 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 77 72  should not be wr
73b0: 69 74 74 65 6e 20 62 79 20 74 68 65 20 75 73 65  itten by the use
73c0: 72 20 2a 2f 0a 20 20 75 38 20 69 73 45 70 68 65  r */.  u8 isEphe
73d0: 6d 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  m;      /* True 
73e0: 69 66 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  if created using
73f0: 20 4f 50 5f 4f 70 65 6e 45 70 68 65 72 6d 65 72   OP_OpenEphermer
7400: 61 6c 20 2a 2f 0a 20 20 75 38 20 68 61 73 50 72  al */.  u8 hasPr
7410: 69 6d 4b 65 79 3b 20 20 20 2f 2a 20 54 72 75 65  imKey;   /* True
7420: 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74 73   if there exists
7430: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
7440: 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
7450: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
7460: 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
7470: 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
7480: 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 20 20  t on iPKey */.  
7490: 75 38 20 61 75 74 6f 49 6e 63 3b 20 20 20 20 20  u8 autoInc;     
74a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
74b0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
74c0: 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
74d0: 6d 65 6e 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  ment */.#ifndef 
74e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
74f0: 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 69 73  UALTABLE.  u8 is
7500: 56 69 72 74 75 61 6c 3b 20 20 20 20 20 20 20 20  Virtual;        
7510: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
7520: 74 68 69 73 20 69 73 20 61 20 76 69 72 74 75 61  this is a virtua
7530: 6c 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 38 20  l table */.  u8 
7540: 69 73 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  isCommit;       
7550: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 6f         /* True o
7560: 6e 63 65 20 74 68 65 20 43 52 45 41 54 45 20 54  nce the CREATE T
7570: 41 42 4c 45 20 68 61 73 20 62 65 65 6e 20 63 6f  ABLE has been co
7580: 6d 6d 69 74 74 65 64 20 2a 2f 0a 20 20 4d 6f 64  mmitted */.  Mod
7590: 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
75a0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
75b0: 72 20 74 6f 20 74 68 65 20 69 6d 70 6c 65 6d 65  r to the impleme
75c0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ntation of the m
75d0: 6f 64 75 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74  odule */.  sqlit
75e0: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
75f0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
7600: 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6e  to the module in
7610: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
7620: 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
7630: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7640: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
7650: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
7660: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
7670: 72 67 3b 20 20 20 20 20 20 20 2f 2a 20 54 65 78  rg;       /* Tex
7680: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
7690: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
76a0: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 23 65 6e 64  ule name */.#end
76b0: 69 66 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  if.  Schema *pSc
76c0: 68 65 6d 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  hema;.};../*.** 
76d0: 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
76e0: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
76f0: 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
7700: 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
7710: 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
7720: 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
7730: 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
7740: 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
7750: 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
7760: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
7770: 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
7780: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7790: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
77a0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
77b0: 74 75 61 6c 28 58 29 20 28 28 58 29 2d 3e 69 73  tual(X) ((X)->is
77c0: 56 69 72 74 75 61 6c 29 0a 23 65 6c 73 65 0a 23  Virtual).#else.#
77d0: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
77e0: 61 6c 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  al(X) 0.#endif..
77f0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
7800: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
7810: 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
7820: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7830: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
7840: 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
7850: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
7860: 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
7870: 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
7880: 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
7890: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
78a0: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
78b0: 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
78c0: 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
78d0: 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
78e0: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
78f0: 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
7900: 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
7910: 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
7920: 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
7930: 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
7940: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
7950: 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
7960: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7970: 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
7980: 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
7990: 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
79a0: 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
79b0: 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
79c0: 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
79d0: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
79e0: 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
79f0: 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
7a00: 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
7a10: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
7a20: 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
7a30: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
7a40: 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
7a50: 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
7a60: 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
7a70: 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
7a80: 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
7a90: 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
7aa0: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
7ab0: 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
7ac0: 61 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ance of the to-t
7ad0: 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
7ae0: 6b 65 64 0a 2a 2a 20 75 6e 74 69 6c 20 61 6e 20  ked.** until an 
7af0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
7b00: 74 6f 20 69 6e 73 65 72 74 20 64 61 74 61 20 69  to insert data i
7b10: 6e 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  nto the from-tab
7b20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  le..**.** The sq
7b30: 6c 69 74 65 2e 61 46 4b 65 79 20 68 61 73 68 20  lite.aFKey hash 
7b40: 74 61 62 6c 65 20 73 74 6f 72 65 73 20 70 6f 69  table stores poi
7b50: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
7b60: 72 75 63 74 75 72 65 0a 2a 2a 20 67 69 76 65 6e  ructure.** given
7b70: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74   the name of a t
7b80: 6f 2d 74 61 62 6c 65 2e 20 20 46 6f 72 20 65 61  o-table.  For ea
7b90: 63 68 20 74 6f 2d 74 61 62 6c 65 2c 20 61 6c 6c  ch to-table, all
7ba0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 0a 2a 2a   foreign keys.**
7bb0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7bc0: 20 74 68 61 74 20 74 61 62 6c 65 20 61 72 65 20   that table are 
7bd0: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
7be0: 20 75 73 69 6e 67 20 74 68 65 20 46 4b 65 79 2e   using the FKey.
7bf0: 70 4e 65 78 74 54 6f 0a 2a 2a 20 66 69 65 6c 64  pNextTo.** field
7c00: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
7c10: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
7c20: 6d 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61  m;     /* The ta
7c30: 62 6c 65 20 74 68 61 74 20 63 6f 6e 73 74 61 69  ble that constai
7c40: 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
7c50: 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 46 4b  S clause */.  FK
7c60: 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
7c70: 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20  /* Next foreign 
7c80: 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  key in pFrom */.
7c90: 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
7ca0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
7cb0: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
7cc0: 79 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20  y points to */. 
7cd0: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
7ce0: 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69     /* Next forei
7cf0: 67 6e 20 6b 65 79 20 74 68 61 74 20 70 6f 69 6e  gn key that poin
7d00: 74 73 20 74 6f 20 7a 54 6f 20 2a 2f 0a 20 20 69  ts to zTo */.  i
7d10: 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
7d20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
7d30: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
7d40: 79 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  y */.  struct sC
7d50: 6f 6c 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70  olMap {  /* Mapp
7d60: 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
7d70: 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
7d80: 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
7d90: 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
7da0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
7db0: 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
7dc0: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
7dd0: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  l;        /* Nam
7de0: 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
7df0: 54 6f 2e 20 20 49 66 20 30 20 75 73 65 20 50 52  To.  If 0 use PR
7e00: 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
7e10: 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *aCol;         
7e20: 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
7e30: 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
7e40: 6f 6c 75 6d 6e 20 73 20 2a 2f 0a 20 20 75 38 20  olumn s */.  u8 
7e50: 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 2f  isDeferred;    /
7e60: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
7e70: 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
7e80: 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
7e90: 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 75 70  OMMIT */.  u8 up
7ea0: 64 61 74 65 43 6f 6e 66 3b 20 20 20 20 2f 2a 20  dateConf;    /* 
7eb0: 48 6f 77 20 74 6f 20 72 65 73 6f 6c 76 65 20 63  How to resolve c
7ec0: 6f 6e 66 6c 69 63 74 73 20 74 68 61 74 20 6f 63  onflicts that oc
7ed0: 63 75 72 20 6f 6e 20 55 50 44 41 54 45 20 2a 2f  cur on UPDATE */
7ee0: 0a 20 20 75 38 20 64 65 6c 65 74 65 43 6f 6e 66  .  u8 deleteConf
7ef0: 3b 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 72  ;    /* How to r
7f00: 65 73 6f 6c 76 65 20 63 6f 6e 66 6c 69 63 74 73  esolve conflicts
7f10: 20 74 68 61 74 20 6f 63 63 75 72 20 6f 6e 20 44   that occur on D
7f20: 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 69 6e  ELETE */.  u8 in
7f30: 73 65 72 74 43 6f 6e 66 3b 20 20 20 20 2f 2a 20  sertConf;    /* 
7f40: 48 6f 77 20 74 6f 20 72 65 73 6f 6c 76 65 20 63  How to resolve c
7f50: 6f 6e 66 6c 69 63 74 73 20 74 68 61 74 20 6f 63  onflicts that oc
7f60: 63 75 72 20 6f 6e 20 49 4e 53 45 52 54 20 2a 2f  cur on INSERT */
7f70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
7f80: 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
7f90: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
7fa0: 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 74  o resolve a cont
7fb0: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
7fc0: 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
7fd0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
7fe0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
7ff0: 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
8000: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
8010: 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
8020: 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
8030: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
8040: 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
8050: 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
8060: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
8070: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
8080: 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
8090: 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
80a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
80b0: 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
80c0: 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
80d0: 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
80e0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
80f0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
8100: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
8110: 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
8120: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
8130: 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
8140: 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
8150: 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
8160: 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
8170: 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
8180: 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
8190: 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
81a0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
81b0: 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
81c0: 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
81d0: 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
81e0: 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
81f0: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
8200: 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
8210: 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
8220: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
8230: 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
8240: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
8250: 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
8260: 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
8270: 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
8280: 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
8290: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
82a0: 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
82b0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
82c0: 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
82d0: 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
82e0: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
82f0: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
8300: 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
8310: 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
8320: 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
8330: 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
8340: 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
8350: 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
8360: 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
8370: 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
8380: 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
8390: 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
83a0: 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
83b0: 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
83c0: 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
83d0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
83e0: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
83f0: 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
8400: 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
8410: 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
8420: 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
8430: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
8440: 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
8450: 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
8460: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
8470: 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
8480: 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
8490: 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
84a0: 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
84b0: 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
84c0: 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
84d0: 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
84e0: 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
84f0: 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
8500: 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
8510: 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
8520: 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
8530: 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
8540: 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
8550: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
8560: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
8570: 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
8580: 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
8590: 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
85a0: 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
85b0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
85c0: 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
85d0: 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
85e0: 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
85f0: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
8600: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
8610: 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
8620: 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
8630: 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
8640: 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
8650: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
8660: 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
8670: 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
8680: 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
8690: 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
86a0: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
86b0: 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
86c0: 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
86d0: 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
86e0: 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
86f0: 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
8700: 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
8710: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
8720: 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
8730: 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
8740: 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
8750: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
8760: 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
8770: 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
8780: 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
8790: 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
87a0: 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
87b0: 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 39 39  e OE_Default  99
87c0: 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
87d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
87e0: 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
87f0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
8800: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
8810: 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
8820: 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
8830: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
8840: 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
8850: 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
8860: 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
8870: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
8880: 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
8890: 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  keys..**.** If t
88a0: 68 65 20 4b 65 79 49 6e 66 6f 2e 69 6e 63 72 4b  he KeyInfo.incrK
88b0: 65 79 20 76 61 6c 75 65 20 69 73 20 74 72 75 65  ey value is true
88c0: 20 61 6e 64 20 74 68 65 20 63 6f 6d 70 61 72 69   and the compari
88d0: 73 6f 6e 20 77 6f 75 6c 64 0a 2a 2a 20 6f 74 68  son would.** oth
88e0: 65 72 77 69 73 65 20 62 65 20 65 71 75 61 6c 2c  erwise be equal,
88f0: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 20 72   then return a r
8900: 65 73 75 6c 74 20 61 73 20 69 66 20 74 68 65 20  esult as if the 
8910: 73 65 63 6f 6e 64 20 6b 65 79 0a 2a 2a 20 77 65  second key.** we
8920: 72 65 20 6c 61 72 67 65 72 2e 0a 2a 2f 0a 73 74  re larger..*/.st
8930: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
8940: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
8950: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
8960: 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
8970: 68 65 20 54 45 58 54 5f 55 74 66 2a 20 76 61 6c  he TEXT_Utf* val
8980: 75 65 73 20 2a 2f 0a 20 20 75 38 20 69 6e 63 72  ues */.  u8 incr
8990: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
89a0: 49 6e 63 72 65 61 73 65 20 32 6e 64 20 6b 65 79  Increase 2nd key
89b0: 20 62 79 20 65 70 73 69 6c 6f 6e 20 62 65 66 6f   by epsilon befo
89c0: 72 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  re comparison */
89d0: 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
89e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
89f0: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
8a00: 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a  Coll[] */.  u8 *
8a10: 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
8a20: 2f 2a 20 49 66 20 64 65 66 69 6e 65 64 20 61 6e  /* If defined an
8a30: 20 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 20 69   aSortOrder[i] i
8a40: 73 20 74 72 75 65 2c 20 73 6f 72 74 20 44 45 53  s true, sort DES
8a50: 43 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  C */.  CollSeq *
8a60: 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
8a70: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
8a80: 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
8a90: 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
8aa0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
8ab0: 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
8ac0: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
8ad0: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
8ae0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8af0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
8b00: 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
8b10: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
8b20: 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
8b30: 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
8b40: 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
8b50: 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
8b60: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
8b70: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
8b80: 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
8b90: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
8ba0: 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
8bb0: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
8bc0: 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
8bd0: 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
8be0: 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
8bf0: 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
8c00: 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
8c10: 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
8c20: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
8c30: 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
8c40: 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
8c50: 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
8c60: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
8c70: 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
8c80: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
8c90: 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
8ca0: 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
8cb0: 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
8cc0: 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
8cd0: 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
8ce0: 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
8cf0: 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
8d00: 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
8d10: 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
8d20: 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
8d30: 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
8d40: 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
8d50: 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
8d60: 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
8d70: 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
8d80: 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
8d90: 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
8da0: 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
8db0: 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
8dc0: 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
8dd0: 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
8de0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
8df0: 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
8e00: 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
8e10: 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
8e20: 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
8e30: 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
8e40: 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
8e50: 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
8e60: 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
8e70: 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
8e80: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
8e90: 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
8ea0: 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
8eb0: 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
8ec0: 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
8ed0: 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
8ee0: 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
8ef0: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
8f00: 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
8f10: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
8f20: 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
8f30: 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
8f40: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
8f50: 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
8f60: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
8f70: 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
8f80: 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
8f90: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8fa0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
8fb0: 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 69  able used by thi
8fc0: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
8fd0: 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a   *aiColumn;   /*
8fe0: 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
8ff0: 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
9000: 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
9010: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 2a   */.  unsigned *
9020: 61 69 52 6f 77 45 73 74 3b 20 2f 2a 20 52 65 73  aiRowEst; /* Res
9030: 75 6c 74 20 6f 66 20 41 4e 41 4c 59 5a 45 3a 20  ult of ANALYZE: 
9040: 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
9050: 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
9060: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
9070: 61 62 6c 65 3b 20 20 20 2f 2a 20 54 68 65 20 53  able;   /* The S
9080: 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
9090: 6e 64 65 78 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ndexed */.  int 
90a0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 2f 2a 20  tnum;        /* 
90b0: 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
90c0: 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
90d0: 65 78 20 69 6e 20 64 61 74 61 62 61 73 65 20 66  ex in database f
90e0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  ile */.  u8 onEr
90f0: 72 6f 72 3b 20 20 20 20 20 20 2f 2a 20 4f 45 5f  ror;      /* OE_
9100: 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
9110: 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
9120: 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 38   OE_None */.  u8
9130: 20 61 75 74 6f 49 6e 64 65 78 3b 20 20 20 20 2f   autoIndex;    /
9140: 2a 20 54 72 75 65 20 69 66 20 69 73 20 61 75 74  * True if is aut
9150: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
9160: 65 64 20 28 65 78 3a 20 62 79 20 55 4e 49 51 55  ed (ex: by UNIQU
9170: 45 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  E) */.  char *zC
9180: 6f 6c 41 66 66 3b 20 20 20 2f 2a 20 53 74 72 69  olAff;   /* Stri
9190: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
91a0: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
91b0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
91c0: 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a  ex *pNext;    /*
91d0: 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20   The next index 
91e0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
91f0: 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a  the same table *
9200: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
9210: 65 6d 61 3b 20 2f 2a 20 53 63 68 65 6d 61 20 63  ema; /* Schema c
9220: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
9230: 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
9240: 6f 72 74 4f 72 64 65 72 3b 20 20 2f 2a 20 41 72  ortOrder;  /* Ar
9250: 72 61 79 20 6f 66 20 73 69 7a 65 20 49 6e 64 65  ray of size Inde
9260: 78 2e 6e 43 6f 6c 75 6d 6e 2e 20 54 72 75 65 3d  x.nColumn. True=
9270: 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
9280: 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  C */.  char **az
9290: 43 6f 6c 6c 3b 20 20 20 2f 2a 20 41 72 72 61 79  Coll;   /* Array
92a0: 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
92b0: 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
92c0: 20 69 6e 64 65 78 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   index */.};../*
92d0: 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
92e0: 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
92f0: 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
9300: 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
9310: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
9320: 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
9330: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
9340: 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
9350: 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
9360: 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
9370: 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
9380: 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
9390: 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
93a0: 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
93b0: 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
93c0: 20 61 73 73 75 70 74 69 6f 6e 73 20 61 62 6f 75   assuptions abou
93d0: 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
93e0: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
93f0: 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
9400: 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
9410: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
9420: 68 61 72 20 2a 7a 3b 20 2f 2a 20 54 65 78 74 20  har *z; /* Text 
9430: 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
9440: 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
9450: 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
9460: 64 20 64 79 6e 20 20 3a 20 31 3b 20 20 20 20 20  d dyn  : 1;     
9470: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 61 6c   /* True for mal
9480: 6c 6f 63 65 64 20 6d 65 6d 6f 72 79 2c 20 66 61  loced memory, fa
9490: 6c 73 65 20 66 6f 72 20 73 74 61 74 69 63 20 2a  lse for static *
94a0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 20 20  /.  unsigned n  
94b0: 20 20 3a 20 33 31 3b 20 20 20 20 20 2f 2a 20 4e    : 31;     /* N
94c0: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
94d0: 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
94e0: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
94f0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9500: 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
9510: 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
9520: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
9530: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
9540: 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
9550: 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
9560: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
9570: 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
9580: 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
9590: 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
95a0: 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
95b0: 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
95c0: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
95d0: 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
95e0: 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
95f0: 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
9600: 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
9610: 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
9620: 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
9630: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
9640: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
9650: 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
9660: 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
9670: 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
9680: 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
9690: 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
96a0: 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
96b0: 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
96c0: 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
96d0: 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
96e0: 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
96f0: 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
9700: 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
9710: 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
9720: 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
9730: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
9740: 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
9750: 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
9760: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
9770: 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
9780: 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
9790: 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97b0: 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
97c0: 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
97d0: 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
97e0: 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
97f0: 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
9800: 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
9810: 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
9820: 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
9830: 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9850: 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
9860: 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
9870: 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
9880: 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
9890: 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
98a0: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
98b0: 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
98c0: 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
98d0: 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
98e0: 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ause */.  int nS
98f0: 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
9900: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
9910: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
9920: 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
9930: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
9940: 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
9950: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
9960: 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
9970: 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
9980: 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
9990: 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
99a0: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
99b0: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
99c0: 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
99d0: 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
99e0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
99f0: 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
9a00: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
9a10: 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
9a20: 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
9a30: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
9a40: 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
9a50: 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
9a60: 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
9a70: 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
9a80: 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
9a90: 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
9aa0: 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
9ab0: 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
9ac0: 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
9ad0: 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
9ae0: 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
9af0: 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
9b00: 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
9b10: 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
9b20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9b30: 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
9b40: 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
9b50: 74 20 6e 43 6f 6c 75 6d 6e 41 6c 6c 6f 63 3b 20  t nColumnAlloc; 
9b60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9b70: 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
9b80: 65 64 20 66 6f 72 20 61 43 6f 6c 5b 5d 20 2a 2f  ed for aCol[] */
9b90: 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
9ba0: 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
9bb0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
9bc0: 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
9bd0: 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
9be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9bf0: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
9c00: 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
9c10: 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
9c20: 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c40: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
9c50: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
9c60: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
9c70: 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
9c80: 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
9c90: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
9ca0: 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9cc0: 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
9cd0: 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
9ce0: 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
9cf0: 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
9d00: 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
9d10: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
9d20: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
9d30: 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
9d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
9d50: 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
9d60: 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
9d70: 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
9d80: 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
9d90: 20 20 20 20 20 20 2f 2a 20 45 70 68 65 72 6d 65        /* Epherme
9da0: 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
9db0: 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
9dc0: 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
9dd0: 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9df0: 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
9e00: 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20   in aFunc[] */. 
9e10: 20 69 6e 74 20 6e 46 75 6e 63 41 6c 6c 6f 63 3b   int nFuncAlloc;
9e20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9e30: 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
9e40: 63 61 74 65 64 20 66 6f 72 20 61 46 75 6e 63 5b  cated for aFunc[
9e50: 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  ] */.};../*.** E
9e60: 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
9e70: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
9e80: 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
9e90: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
9ea0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
9eb0: 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
9ec0: 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 20 54  s the opcode.  T
9ed0: 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
9ee0: 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
9ef0: 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
9f00: 70 63 6f 64 65 73 20 68 65 72 65 2e 20 20 46 6f  pcodes here.  Fo
9f10: 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
9f20: 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
9f30: 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
9f40: 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
9f50: 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
9f60: 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 20 54 68  =" operator.  Th
9f70: 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
9f80: 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
9f90: 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
9fa0: 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
9fb0: 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
9fc0: 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
9fd0: 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
9fe0: 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
9ff0: 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
a000: 20 61 72 65 20 73 75 62 65 78 70 72 65 73 73 69   are subexpressi
a010: 6f 6e 73 2e 20 20 45 78 70 72 2e 70 4c 69 73 74  ons.  Expr.pList
a020: 20 69 73 20 61 20 6c 69 73 74 0a 2a 2a 20 6f 66   is a list.** of
a030: 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68 65   argument if the
a040: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
a050: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
a060: 20 45 78 70 72 2e 74 6f 6b 65 6e 20 69 73 20 74   Expr.token is t
a070: 68 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 6b 65  he operator toke
a080: 6e 20 66 6f 72 20 74 68 69 73 20 6e 6f 64 65 2e  n for this node.
a090: 20 20 46 6f 72 20 73 6f 6d 65 20 65 78 70 72 65    For some expre
a0a0: 73 73 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 68  ssions.** that h
a0b0: 61 76 65 20 73 75 62 65 78 70 72 65 73 73 69 6f  ave subexpressio
a0c0: 6e 73 2c 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  ns, Expr.token c
a0d0: 61 6e 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65  an be the comple
a0e0: 74 65 20 74 65 78 74 20 74 68 61 74 20 67 61 76  te text that gav
a0f0: 65 0a 2a 2a 20 72 69 73 65 20 74 6f 20 74 68 65  e.** rise to the
a100: 20 45 78 70 72 2e 20 20 49 6e 20 74 68 65 20 6c   Expr.  In the l
a110: 61 74 74 65 72 20 63 61 73 65 2c 20 74 68 65 20  atter case, the 
a120: 74 6f 6b 65 6e 20 69 73 20 6d 61 72 6b 65 64 20  token is marked 
a130: 61 73 20 62 65 69 6e 67 0a 2a 2a 20 61 20 63 6f  as being.** a co
a140: 6d 70 6f 75 6e 64 20 74 6f 6b 65 6e 2e 0a 2a 2a  mpound token..**
a150: 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
a160: 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
a170: 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
a180: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
a190: 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
a1a0: 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
a1b0: 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
a1c0: 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
a1d0: 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
a1e0: 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
a1f0: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
a200: 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
a210: 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
a220: 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
a230: 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
a240: 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
a250: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
a260: 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
a270: 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
a280: 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
a290: 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
a2a0: 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
a2b0: 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
a2c0: 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
a2d0: 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
a2e0: 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
a2f0: 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
a300: 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
a310: 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
a320: 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
a330: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
a340: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
a350: 61 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 20  a function, the 
a360: 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 20 61  Expr.iTable is a
a370: 6e 20 69 6e 74 65 67 65 72 20 63 6f 64 65 0a 2a  n integer code.*
a380: 2a 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 77  * representing w
a390: 68 69 63 68 20 66 75 6e 63 74 69 6f 6e 2e 20 20  hich function.  
a3a0: 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
a3b0: 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
a3c0: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 6d 61 72 6b  variable.** mark
a3d0: 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
a3e0: 61 72 6b 20 63 68 61 72 61 63 74 65 72 20 27 3f  ark character '?
a3f0: 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
a400: 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 0a  l SQL) then the.
a410: 2a 2a 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  ** Expr.iTable h
a420: 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 6e  olds the index n
a430: 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
a440: 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
a450: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
a460: 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
a470: 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
a480: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
a490: 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
a4a0: 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
a4b0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
a4c0: 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
a4d0: 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
a4e0: 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
a4f0: 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
a500: 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
a510: 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
a520: 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
a530: 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
a540: 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
a550: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
a560: 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
a570: 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
a580: 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
a590: 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
a5a0: 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
a5b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 45 78 70 72  ..**.** The Expr
a5c0: 2e 70 53 65 6c 65 63 74 20 66 69 65 6c 64 20 70  .pSelect field p
a5d0: 6f 69 6e 74 73 20 74 6f 20 61 20 53 45 4c 45 43  oints to a SELEC
a5e0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
a5f0: 65 20 53 45 4c 45 43 54 20 6d 69 67 68 74 0a 2a  e SELECT might.*
a600: 2a 20 62 65 20 74 68 65 20 72 69 67 68 74 20 6f  * be the right o
a610: 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20  perand of an IN 
a620: 6f 70 65 72 61 74 6f 72 2e 20 20 4f 72 2c 20 69  operator.  Or, i
a630: 66 20 61 20 73 63 61 6c 61 72 20 53 45 4c 45 43  f a scalar SELEC
a640: 54 20 61 70 70 65 61 72 73 0a 2a 2a 20 69 6e 20  T appears.** in 
a650: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
a660: 65 20 6f 70 63 6f 64 65 20 69 73 20 54 4b 5f 53  e opcode is TK_S
a670: 45 4c 45 43 54 20 61 6e 64 20 45 78 70 72 2e 70  ELECT and Expr.p
a680: 53 65 6c 65 63 74 20 69 73 20 74 68 65 20 6f 6e  Select is the on
a690: 6c 79 0a 2a 2a 20 6f 70 65 72 61 6e 64 2e 0a 2a  ly.** operand..*
a6a0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
a6b0: 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
a6c0: 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
a6d0: 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
a6e0: 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
a6f0: 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
a700: 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
a710: 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
a720: 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
a730: 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
a740: 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
a750: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
a760: 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a780: 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
a790: 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
a7a0: 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
a7b0: 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
a7c0: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
a7d0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
a7e0: 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
a7f0: 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
a800: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
a810: 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
a820: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
a830: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
a840: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f         /* The co
a850: 6c 6c 61 74 69 6f 6e 20 74 79 70 65 20 6f 66 20  llation type of 
a860: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
a870: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  */.  Expr *pLeft
a880: 2c 20 2a 70 52 69 67 68 74 3b 20 20 2f 2a 20 4c  , *pRight;  /* L
a890: 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
a8a0: 62 6e 6f 64 65 73 20 2a 2f 0a 20 20 45 78 70 72  bnodes */.  Expr
a8b0: 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
a8c0: 20 20 20 2f 2a 20 41 20 6c 69 73 74 20 6f 66 20     /* A list of 
a8d0: 65 78 70 72 65 73 73 69 6f 6e 73 20 75 73 65 64  expressions used
a8e0: 20 61 73 20 66 75 6e 63 74 69 6f 6e 20 61 72 67   as function arg
a8f0: 75 6d 65 6e 74 73 0a 20 20 20 20 20 20 20 20 20  uments.         
a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a910: 2a 2a 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e  ** or in "<expr>
a920: 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29   IN (<expr-list)
a930: 22 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 6f 6b  " */.  Token tok
a940: 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
a950: 20 41 6e 20 6f 70 65 72 61 6e 64 20 74 6f 6b 65   An operand toke
a960: 6e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 70 61  n */.  Token spa
a970: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
a980: 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
a990: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
a9a0: 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62 6c 65   */.  int iTable
a9b0: 2c 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20  , iColumn;   /* 
a9c0: 57 68 65 6e 20 6f 70 3d 3d 54 4b 5f 43 4f 4c 55  When op==TK_COLU
a9d0: 4d 4e 2c 20 74 68 65 6e 20 74 68 69 73 20 65 78  MN, then this ex
a9e0: 70 72 20 6e 6f 64 65 20 6d 65 61 6e 73 20 74 68  pr node means th
a9f0: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
aa00: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 43             ** iC
aa10: 6f 6c 75 6d 6e 2d 74 68 20 66 69 65 6c 64 20 6f  olumn-th field o
aa20: 66 20 74 68 65 20 69 54 61 62 6c 65 2d 74 68 20  f the iTable-th 
aa30: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 41 67 67 49  table. */.  AggI
aa40: 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
aa50: 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
aa60: 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
aa70: 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
aa80: 2a 2f 0a 20 20 69 6e 74 20 69 41 67 67 3b 20 20  */.  int iAgg;  
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
aaa0: 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
aab0: 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
aac0: 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
aad0: 20 69 6e 74 20 69 52 69 67 68 74 4a 6f 69 6e 54   int iRightJoinT
aae0: 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
aaf0: 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
ab00: 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
ab10: 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 53 65 6c 65  e join */.  Sele
ab20: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
ab30: 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 65     /* When the e
ab40: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
ab50: 75 62 2d 73 65 6c 65 63 74 2e 20 20 41 6c 73 6f  ub-select.  Also
ab60: 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20 20   the.           
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
ab80: 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 22   right side of "
ab90: 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65 6c 65  <expr> IN (<sele
aba0: 63 74 3e 29 22 20 2a 2f 0a 20 20 54 61 62 6c 65  ct>)" */.  Table
abb0: 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
abc0: 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 4f    /* Table for O
abd0: 50 5f 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  P_Column express
abe0: 69 6f 6e 73 2e 20 2a 2f 0a 20 20 53 63 68 65 6d  ions. */.  Schem
abf0: 61 20 2a 70 53 63 68 65 6d 61 3b 0a 7d 3b 0a 0a  a *pSchema;.};..
ac00: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
ac10: 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
ac20: 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
ac30: 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
ac40: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
ac50: 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 20   EP_FromJoin    
ac60: 20 30 78 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e   0x01  /* Origin
ac70: 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
ac80: 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
ac90: 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
aca0: 45 50 5f 41 67 67 20 20 20 20 20 20 20 20 20 20  EP_Agg          
acb0: 30 78 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0x02  /* Contain
acc0: 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
acd0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
ace0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
acf0: 52 65 73 6f 6c 76 65 64 20 20 20 20 20 30 78 30  Resolved     0x0
ad00: 34 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  4  /* IDs have b
ad10: 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
ad20: 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
ad30: 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
ad40: 20 20 20 30 78 30 38 20 20 2f 2a 20 45 78 70 72     0x08  /* Expr
ad50: 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
ad60: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
ad70: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
ad80: 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 30 78  _Distinct     0x
ad90: 31 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  10  /* Aggregate
ada0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
adb0: 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
adc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
add0: 72 53 65 6c 65 63 74 20 20 20 20 30 78 32 30 20  rSelect    0x20 
ade0: 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
adf0: 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
ae00: 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
ae10: 6e 65 20 45 50 5f 44 65 71 75 6f 74 65 64 20 20  ne EP_Dequoted  
ae20: 20 20 20 30 78 34 30 20 20 2f 2a 20 54 72 75 65     0x40  /* True
ae30: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 20 68   if the string h
ae40: 61 73 20 62 65 65 6e 20 64 65 71 75 6f 74 65 64  as been dequoted
ae50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
ae60: 6e 66 69 78 46 75 6e 63 20 20 20 20 30 78 38 30  nfixFunc    0x80
ae70: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
ae80: 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
ae90: 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
aea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
aeb0: 78 70 43 6f 6c 6c 61 74 65 20 20 30 78 31 30 30  xpCollate  0x100
aec0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
aed0: 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
aee0: 64 20 65 78 70 6c 69 63 69 74 6c 79 20 2a 2f 0a  d explicitly */.
aef0: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
af00: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
af10: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
af20: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
af30: 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
af40: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
af50: 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
af60: 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
af70: 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
af80: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
af90: 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  rHasAnyProperty(
afa0: 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
afb0: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
afc0: 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
afd0: 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
afe0: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
aff0: 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
b000: 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
b010: 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
b020: 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
b030: 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
b040: 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
b050: 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
b060: 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
b070: 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
b080: 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
b090: 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
b0a0: 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
b0b0: 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
b0c0: 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
b0d0: 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
b0e0: 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
b0f0: 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
b100: 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
b110: 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
b120: 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
b130: 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
b140: 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
b150: 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
b160: 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
b170: 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
b180: 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
b190: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  d..*/.struct Exp
b1a0: 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
b1b0: 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
b1c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
b1d0: 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
b1e0: 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e   list */.  int n
b1f0: 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  Alloc;          
b200: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
b210: 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
b220: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20   below */.  int 
b230: 69 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20  iECursor;       
b240: 20 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f     /* VDBE Curso
b250: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
b260: 68 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20  h this ExprList 
b270: 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
b280: 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
b290: 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
b2a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69         /* The li
b2b0: 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
b2c0: 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  s */.    char *z
b2d0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
b2e0: 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
b2f0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
b300: 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
b310: 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
b320: 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
b330: 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
b340: 43 20 2a 2f 0a 20 20 20 20 75 38 20 69 73 41 67  C */.    u8 isAg
b350: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b360: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
b370: 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
b380: 6c 69 6b 65 20 63 6f 75 6e 74 28 2a 29 20 2a 2f  like count(*) */
b390: 0a 20 20 20 20 75 38 20 64 6f 6e 65 3b 20 20 20  .    u8 done;   
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b3b0: 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
b3c0: 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
b3d0: 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
b3e0: 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
b3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
b400: 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
b410: 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b  expression */.};
b420: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
b430: 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
b440: 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
b450: 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
b460: 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
b470: 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
b480: 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
b490: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
b4a0: 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
b4b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
b4c0: 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
b4d0: 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
b4e0: 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
b4f0: 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
b500: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
b510: 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
b520: 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
b530: 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
b540: 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
b550: 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
b560: 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
b570: 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
b580: 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
b590: 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
b5a0: 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
b5b0: 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
b5c0: 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
b5d0: 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
b5e0: 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
b5f0: 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
b600: 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
b610: 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
b620: 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
b630: 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
b640: 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
b650: 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
b660: 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
b670: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
b680: 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
b690: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
b6a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
b6b0: 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
b6c0: 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
b6d0: 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
b6e0: 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
b6f0: 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
b700: 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
b710: 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
b720: 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f  t */.  int nAllo
b730: 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
b740: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
b750: 6f 63 61 74 65 64 20 66 6f 72 20 61 5b 5d 20 62  ocated for a[] b
b760: 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
b770: 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
b780: 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
b790: 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
b7a0: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
b7b0: 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
b7c0: 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
b7d0: 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
b7e0: 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
b7f0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
b800: 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
b810: 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
b820: 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
b830: 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
b840: 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
b850: 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
b860: 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
b870: 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69  /.typedef u64 Bi
b880: 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  tmask;../*.** Th
b890: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
b8a0: 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
b8b0: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
b8c0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
b8d0: 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
b8e0: 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
b8f0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
b900: 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
b910: 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
b920: 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
b930: 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
b940: 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
b950: 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
b960: 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
b970: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
b980: 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
b990: 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
b9a0: 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
b9b0: 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
b9c0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
b9d0: 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
b9e0: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
b9f0: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
ba00: 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
ba10: 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
ba20: 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
ba30: 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
ba40: 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
ba50: 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
ba60: 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
ba70: 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
ba80: 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
ba90: 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
baa0: 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
bab0: 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
bac0: 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
bad0: 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
bae0: 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
baf0: 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
bb00: 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
bb10: 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
bb20: 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
bb30: 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
bb40: 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
bb50: 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
bb60: 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
bb70: 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
bb80: 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
bb90: 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
bba0: 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
bbb0: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
bbc0: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
bbd0: 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2f 0a  vious table..*/.
bbe0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
bbf0: 0a 20 20 69 31 36 20 6e 53 72 63 3b 20 20 20 20  .  i16 nSrc;    
bc00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bc10: 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
bc20: 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
bc30: 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31  M clause */.  i1
bc40: 36 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  6 nAlloc;      /
bc50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
bc60: 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
bc70: 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
bc80: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
bc90: 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
bca0: 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
bcb0: 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
bcc0: 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
bcd0: 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
bce0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
bcf0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
bd00: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
bd10: 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
bd20: 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
bd30: 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
bd40: 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
bd50: 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
bd60: 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
bd70: 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
bd80: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
bd90: 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
bda0: 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
bdb0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
bdc0: 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
bdd0: 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
bde0: 2f 0a 20 20 20 20 75 38 20 69 73 50 6f 70 75 6c  /.    u8 isPopul
bdf0: 61 74 65 64 3b 20 20 20 2f 2a 20 54 65 6d 70 6f  ated;   /* Tempo
be00: 72 61 72 79 20 74 61 62 6c 65 20 61 73 73 6f 63  rary table assoc
be10: 69 61 74 65 64 20 77 69 74 68 20 53 45 4c 45 43  iated with SELEC
be20: 54 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 2a  T is populated *
be30: 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
be40: 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
be50: 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
be60: 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
be70: 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
be80: 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
be90: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
bea0: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
beb0: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
bec0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
bed0: 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
bee0: 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
bef0: 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
bf00: 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
bf10: 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
bf20: 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
bf30: 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
bf40: 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
bf50: 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
bf60: 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 72 20 70  if column N or p
bf70: 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
bf80: 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
bf90: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
bfa0: 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
bfb0: 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
bfc0: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
bfd0: 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
bfe0: 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
bff0: 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
c000: 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
c010: 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
c020: 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
c030: 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
c040: 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
c050: 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
c060: 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
c070: 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
c080: 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
c090: 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
c0a0: 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
c0b0: 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
c0c0: 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
c0d0: 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
c0e0: 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
c0f0: 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
c100: 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
c110: 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
c120: 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
c130: 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
c140: 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
c150: 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
c160: 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
c170: 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
c180: 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
c190: 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
c1a0: 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
c1b0: 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
c1c0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61  */../*.** For ea
c1d0: 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69  ch nested loop i
c1e0: 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
c1f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
c200: 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a   the WhereInfo.*
c210: 2a 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * structure cont
c220: 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  ains a single in
c230: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
c240: 74 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20  tructure.  This 
c250: 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
c260: 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70  intended to be p
c270: 72 69 76 61 74 65 20 74 68 65 20 74 68 65 20 77  rivate the the w
c280: 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e  here.c module an
c290: 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  d should not be.
c2a0: 2a 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64  ** access or mod
c2b0: 69 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d  ified by other m
c2c0: 6f 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  odules..**.** Th
c2d0: 65 20 70 49 64 78 49 6e 66 6f 20 61 6e 64 20 70  e pIdxInfo and p
c2e0: 42 65 73 74 49 64 78 20 66 69 65 6c 64 73 20 61  BestIdx fields a
c2f0: 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  re used to help 
c300: 70 69 63 6b 20 74 68 65 20 62 65 73 74 0a 2a 2a  pick the best.**
c310: 20 69 6e 64 65 78 20 6f 6e 20 61 20 76 69 72 74   index on a virt
c320: 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ual table.  The 
c330: 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72  pIdxInfo pointer
c340: 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69   contains indexi
c350: 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  ng.** informatio
c360: 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74  n for the i-th t
c370: 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
c380: 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72   clause before r
c390: 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c  eordering..** Al
c3a0: 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70  l the pIdxInfo p
c3b0: 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65  ointers are free
c3c0: 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72  d by whereInfoFr
c3d0: 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e  ee() in where.c.
c3e0: 0a 2a 2a 20 54 68 65 20 70 42 65 73 74 49 64 78  .** The pBestIdx
c3f0: 20 70 6f 69 6e 74 65 72 20 69 73 20 61 20 63 6f   pointer is a co
c400: 70 79 20 6f 66 20 70 49 64 78 49 6e 66 6f 20 66  py of pIdxInfo f
c410: 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c  or the i-th tabl
c420: 65 20 61 66 74 65 72 0a 2a 2a 20 46 52 4f 4d 20  e after.** FROM 
c430: 63 6c 61 75 73 65 20 6f 72 64 65 72 69 6e 67 2e  clause ordering.
c440: 20 20 54 68 69 73 20 69 73 20 61 20 6c 69 74 74    This is a litt
c450: 6c 65 20 63 6f 6e 66 75 73 69 6e 67 20 73 6f 20  le confusing so 
c460: 49 20 77 69 6c 6c 20 72 65 70 65 61 74 0a 2a 2a  I will repeat.**
c470: 20 69 74 20 69 6e 20 64 69 66 66 65 72 65 6e 74   it in different
c480: 20 77 6f 72 64 73 2e 20 20 57 68 65 72 65 49 6e   words.  WhereIn
c490: 66 6f 2e 61 5b 69 5d 2e 70 49 64 78 49 6e 66 6f  fo.a[i].pIdxInfo
c4a0: 20 69 73 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d   is index inform
c4b0: 61 74 69 6f 6e 20 0a 2a 2a 20 66 6f 72 20 57 68  ation .** for Wh
c4c0: 65 72 65 49 6e 66 6f 2e 70 54 61 62 4c 69 73 74  ereInfo.pTabList
c4d0: 2e 61 5b 69 5d 2e 20 20 57 68 65 72 65 49 6e 66  .a[i].  WhereInf
c4e0: 6f 2e 61 5b 69 5d 2e 70 42 65 73 74 49 6e 66 6f  o.a[i].pBestInfo
c4f0: 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 64 65 78   is the.** index
c500: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
c510: 20 74 68 65 20 69 2d 74 68 20 6c 6f 6f 70 20 6f   the i-th loop o
c520: 66 20 74 68 65 20 6a 6f 69 6e 2e 20 20 70 42 65  f the join.  pBe
c530: 73 74 49 6e 66 6f 20 69 73 20 61 6c 77 61 79 73  stInfo is always
c540: 0a 2a 2a 20 65 69 74 68 65 72 20 4e 55 4c 4c 20  .** either NULL 
c550: 6f 72 20 61 20 63 6f 70 79 20 6f 66 20 73 6f 6d  or a copy of som
c560: 65 20 70 49 64 78 49 6e 66 6f 2e 20 20 53 6f 20  e pIdxInfo.  So 
c570: 66 6f 72 20 63 6c 65 61 6e 75 70 20 69 74 20 69  for cleanup it i
c580: 73 20 0a 2a 2a 20 73 75 66 66 69 63 69 65 6e 74  s .** sufficient
c590: 20 74 6f 20 66 72 65 65 20 61 6c 6c 20 6f 66 20   to free all of 
c5a0: 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69  the pIdxInfo poi
c5b0: 6e 74 65 72 73 2e 0a 2a 2a 20 0a 2a 2f 0a 73 74  nters..** .*/.st
c5c0: 72 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20  ruct WhereLevel 
c5d0: 7b 0a 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20  {.  int iFrom;  
c5e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
c5f0: 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
c600: 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
c610: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
c620: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
c630: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c640: 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
c650: 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
c660: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6d        /* First m
c670: 65 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65 64 20  emory cell used 
c680: 62 79 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  by this level */
c690: 0a 20 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e  .  int iLeftJoin
c6a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f  ;        /* Memo
c6b0: 72 79 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20  ry cell used to 
c6c0: 69 6d 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f  implement LEFT O
c6d0: 55 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 49  UTER JOIN */.  I
c6e0: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
c6f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 75 73       /* Index us
c700: 65 64 2e 20 20 4e 55 4c 4c 20 69 66 20 6e 6f 20  ed.  NULL if no 
c710: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69  index */.  int i
c720: 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20  TabCur;         
c730: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
c740: 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  sor used to acce
c750: 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ss the table */.
c760: 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
c770: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
c780: 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64 20  DBE cursor used 
c790: 74 6f 20 61 63 65 73 73 73 20 70 49 64 78 20 2a  to acesss pIdx *
c7a0: 2f 0a 20 20 69 6e 74 20 62 72 6b 3b 20 20 20 20  /.  int brk;    
c7b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
c7c0: 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20  p here to break 
c7d0: 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  out of the loop 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 78 74 3b 20 20 20  */.  int nxt;   
c7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75             /* Ju
c800: 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61 72 74  mp here to start
c810: 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d   the next IN com
c820: 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  bination */.  in
c830: 74 20 63 6f 6e 74 3b 20 20 20 20 20 20 20 20 20  t cont;         
c840: 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
c850: 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74   to continue wit
c860: 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20  h the next loop 
c870: 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74  cycle */.  int t
c880: 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
c890: 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75   /* First instru
c8a0: 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f  ction of interio
c8b0: 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  r of the loop */
c8c0: 0a 20 20 69 6e 74 20 6f 70 2c 20 70 31 2c 20 70  .  int op, p1, p
c8d0: 32 3b 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f  2;       /* Opco
c8e0: 64 65 20 75 73 65 64 20 74 6f 20 74 65 72 6d 69  de used to termi
c8f0: 6e 61 74 65 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  nate the loop */
c900: 0a 20 20 69 6e 74 20 6e 45 71 3b 20 20 20 20 20  .  int nEq;     
c910: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c920: 65 72 20 6f 66 20 3d 3d 20 6f 72 20 49 4e 20 63  er of == or IN c
c930: 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74 68  onstraints on th
c940: 69 73 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  is loop */.  int
c950: 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20   nIn;           
c960: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c970: 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 63 6f 6e  IN operators con
c980: 73 74 72 61 69 6e 69 6e 67 20 74 68 69 73 20 6c  straining this l
c990: 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  oop */.  struct 
c9a0: 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20 20 69 6e 74  InLoop {.    int
c9b0: 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
c9c0: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
c9d0: 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
c9e0: 68 69 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  his IN operator 
c9f0: 2a 2f 0a 20 20 20 20 69 6e 74 20 74 6f 70 41 64  */.    int topAd
ca00: 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  dr;           /*
ca10: 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c   Top of the IN l
ca20: 6f 6f 70 20 2a 2f 0a 20 20 7d 20 2a 61 49 6e 4c  oop */.  } *aInL
ca30: 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oop;           /
ca40: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
ca50: 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65 64 20  out each nested 
ca60: 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20  IN operator */. 
ca70: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
ca80: 6e 66 6f 20 2a 70 42 65 73 74 49 64 78 3b 20 20  nfo *pBestIdx;  
ca90: 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 72 6d 61  /* Index informa
caa0: 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 6c 65  tion for this le
cab0: 76 65 6c 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65  vel */..  /* The
cac0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64   following field
cad0: 20 69 73 20 72 65 61 6c 6c 79 20 6e 6f 74 20 70   is really not p
cae0: 61 72 74 20 6f 66 20 74 68 65 20 63 75 72 72 65  art of the curre
caf0: 6e 74 20 6c 65 76 65 6c 2e 20 20 42 75 74 0a 20  nt level.  But. 
cb00: 20 2a 2a 20 77 65 20 6e 65 65 64 20 61 20 70 6c   ** we need a pl
cb10: 61 63 65 20 74 6f 20 63 61 63 68 65 20 69 6e 64  ace to cache ind
cb20: 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ex information f
cb30: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 69 6e  or each table in
cb40: 20 74 68 65 0a 20 20 2a 2a 20 46 52 4f 4d 20 63   the.  ** FROM c
cb50: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68  lause and the Wh
cb60: 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75  ereLevel structu
cb70: 72 65 20 69 73 20 61 20 63 6f 6e 76 65 6e 69 65  re is a convenie
cb80: 6e 74 20 70 6c 61 63 65 2e 0a 20 20 2a 2f 0a 20  nt place..  */. 
cb90: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
cba0: 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20  nfo *pIdxInfo;  
cbb0: 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f  /* Index info fo
cbc0: 72 20 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61  r n-th source ta
cbd0: 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
cbe0: 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
cbf0: 65 20 70 72 6f 63 65 73 73 69 6e 67 20 72 6f 75  e processing rou
cc00: 74 69 6e 65 20 68 61 73 20 74 77 6f 20 68 61 6c  tine has two hal
cc10: 76 65 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72  ves.  The.** fir
cc20: 73 74 20 70 61 72 74 20 64 6f 65 73 20 74 68 65  st part does the
cc30: 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 57 48   start of the WH
cc40: 45 52 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65  ERE loop and the
cc50: 20 73 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20   second.** half 
cc60: 64 6f 65 73 20 74 68 65 20 74 61 69 6c 20 6f 66  does the tail of
cc70: 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e   the WHERE loop.
cc80: 20 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66    An instance of
cc90: 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
cca0: 72 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 62  re is returned b
ccb0: 79 20 74 68 65 20 66 69 72 73 74 20 68 61 6c 66  y the first half
ccc0: 20 61 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20 69   and passed.** i
ccd0: 6e 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 68  nto the second h
cce0: 61 6c 66 20 74 6f 20 67 69 76 65 20 73 6f 6d 65  alf to give some
ccf0: 20 63 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a   continuity..*/.
cd00: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
cd10: 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
cd20: 73 65 3b 0a 20 20 53 72 63 4c 69 73 74 20 2a 70  se;.  SrcList *p
cd30: 54 61 62 4c 69 73 74 3b 20 20 20 2f 2a 20 4c 69  TabList;   /* Li
cd40: 73 74 20 6f 66 20 74 61 62 6c 65 73 20 69 6e 20  st of tables in 
cd50: 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 69 6e  the join */.  in
cd60: 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20 20  t iTop;         
cd70: 20 20 20 2f 2a 20 54 68 65 20 76 65 72 79 20 62     /* The very b
cd80: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
cd90: 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20  WHERE loop */.  
cda0: 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65 3b 20 20  int iContinue;  
cdb0: 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
cdc0: 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69  e to continue wi
cdd0: 74 68 20 6e 65 78 74 20 72 65 63 6f 72 64 20 2a  th next record *
cde0: 2f 0a 20 20 69 6e 74 20 69 42 72 65 61 6b 3b 20  /.  int iBreak; 
cdf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
ce00: 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f   here to break o
ce10: 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  ut of the loop *
ce20: 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20  /.  int nLevel; 
ce30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ce40: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 6c 6f 6f  er of nested loo
ce50: 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  p */.  sqlite3_i
ce60: 6e 64 65 78 5f 69 6e 66 6f 20 2a 2a 61 70 49 6e  ndex_info **apIn
ce70: 66 6f 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66  fo;  /* Array of
ce80: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 64   pointers to ind
ce90: 65 78 20 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex info structur
cea0: 65 73 20 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76  es */.  WhereLev
ceb0: 65 6c 20 61 5b 31 5d 3b 20 20 20 20 20 2f 2a 20  el a[1];     /* 
cec0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
ced0: 74 20 65 61 63 68 20 6e 65 73 74 20 6c 6f 6f 70  t each nest loop
cee0: 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 2a 2f   in the WHERE */
cef0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d  .};../*.** A Nam
cf00: 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
cf10: 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
cf20: 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
cf30: 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
cf40: 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
cf50: 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
cf60: 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
cf70: 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
cf80: 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
cf90: 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
cfa0: 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
cfb0: 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
cfc0: 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
cfd0: 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
cfe0: 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
cff0: 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
d000: 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
d010: 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
d020: 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
d030: 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
d040: 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
d050: 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
d060: 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
d070: 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
d080: 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
d090: 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
d0a0: 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
d0b0: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
d0c0: 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
d0d0: 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
d0e0: 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
d0f0: 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
d100: 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
d110: 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
d120: 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
d130: 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
d140: 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
d150: 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
d160: 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
d170: 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
d180: 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
d190: 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
d1a0: 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
d1b0: 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
d1c0: 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
d1d0: 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
d1e0: 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
d1f0: 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
d200: 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
d210: 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
d220: 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
d230: 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
d240: 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
d250: 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
d260: 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
d270: 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
d280: 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
d290: 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
d2a0: 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
d2b0: 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
d2c0: 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
d2d0: 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
d2e0: 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
d2f0: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
d300: 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
d310: 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
d320: 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
d330: 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
d340: 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
d350: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
d360: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
d370: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
d380: 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
d390: 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
d3a0: 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
d3b0: 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
d3c0: 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
d3d0: 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
d3e0: 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
d3f0: 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
d400: 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
d410: 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
d420: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d430: 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
d440: 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
d450: 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
d460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d470: 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
d480: 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
d490: 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
d4a0: 2a 2f 0a 20 20 75 38 20 61 6c 6c 6f 77 41 67 67  */.  u8 allowAgg
d4b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67  ;         /* Agg
d4c0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
d4d0: 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
d4e0: 0a 20 20 75 38 20 68 61 73 41 67 67 3b 20 20 20  .  u8 hasAgg;   
d4f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
d500: 69 66 20 61 67 67 72 65 67 61 74 65 73 20 61 72  if aggregates ar
d510: 65 20 73 65 65 6e 20 2a 2f 0a 20 20 75 38 20 69  e seen */.  u8 i
d520: 73 43 68 65 63 6b 3b 20 20 20 20 20 20 20 20 20  sCheck;         
d530: 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
d540: 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
d550: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
d560: 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 65 70 74  t */.  int nDept
d570: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  h;          /* D
d580: 65 70 74 68 20 6f 66 20 73 75 62 71 75 65 72 79  epth of subquery
d590: 20 72 65 63 75 72 73 69 6f 6e 2e 20 31 20 66 6f   recursion. 1 fo
d5a0: 72 20 6e 6f 20 72 65 63 75 72 73 69 6f 6e 20 2a  r no recursion *
d5b0: 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
d5c0: 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
d5d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
d5e0: 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
d5f0: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
d600: 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
d610: 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
d620: 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
d630: 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
d640: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
d650: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
d660: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
d670: 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
d680: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
d690: 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
d6a0: 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
d6b0: 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
d6c0: 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
d6d0: 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
d6e0: 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
d6f0: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
d700: 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
d710: 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
d720: 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
d730: 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
d740: 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
d750: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
d760: 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
d770: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
d780: 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
d790: 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
d7a0: 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
d7b0: 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
d7c0: 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
d7d0: 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
d7e0: 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
d7f0: 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
d800: 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
d810: 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
d820: 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
d830: 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
d840: 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
d850: 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
d860: 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
d870: 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
d880: 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
d890: 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
d8a0: 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
d8b0: 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
d8c0: 68 65 20 50 33 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P3_KEYINFO an
d8d0: 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
d8e0: 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
d8f0: 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
d900: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
d910: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
d920: 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
d930: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
d940: 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
d950: 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
d960: 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
d970: 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
d980: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
d990: 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
d9a0: 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
d9b0: 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
d9c0: 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
d9d0: 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
d9e0: 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
d9f0: 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
da00: 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
da10: 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
da20: 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
da30: 64 72 4f 70 65 6e 54 72 61 6e 5b 32 5d 20 63 6f  drOpenTran[2] co
da40: 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
da50: 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
da60: 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
da70: 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
da80: 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
da90: 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
daa0: 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
dab0: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
dac0: 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
dad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
dae0: 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
daf0: 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
db00: 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
db10: 20 20 75 38 20 69 73 44 69 73 74 69 6e 63 74 3b    u8 isDistinct;
db20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
db30: 20 69 66 20 74 68 65 20 44 49 53 54 49 4e 43 54   if the DISTINCT
db40: 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
db50: 65 6e 74 20 2a 2f 0a 20 20 75 38 20 69 73 52 65  ent */.  u8 isRe
db60: 73 6f 6c 76 65 64 3b 20 20 20 20 20 20 20 20 20  solved;         
db70: 2f 2a 20 54 72 75 65 20 6f 6e 63 65 20 73 71 6c  /* True once sql
db80: 69 74 65 33 53 65 6c 65 63 74 52 65 73 6f 6c 76  ite3SelectResolv
db90: 65 28 29 20 68 61 73 20 72 75 6e 2e 20 2a 2f 0a  e() has run. */.
dba0: 20 20 75 38 20 69 73 41 67 67 3b 20 20 20 20 20    u8 isAgg;     
dbb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
dbc0: 20 69 66 20 74 68 69 73 20 69 73 20 61 6e 20 61   if this is an a
dbd0: 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 2a  ggregate query *
dbe0: 2f 0a 20 20 75 38 20 75 73 65 73 45 70 68 6d 3b  /.  u8 usesEphm;
dbf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
dc00: 75 65 20 69 66 20 75 73 65 73 20 61 6e 20 4f 70  ue if uses an Op
dc10: 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
dc20: 64 65 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 6c  de */.  u8 disal
dc30: 6c 6f 77 4f 72 64 65 72 42 79 3b 20 20 20 20 2f  lowOrderBy;    /
dc40: 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
dc50: 6e 20 4f 52 44 45 52 20 42 59 20 74 6f 20 62 65  n ORDER BY to be
dc60: 20 61 74 74 61 63 68 65 64 20 69 66 20 54 52 55   attached if TRU
dc70: 45 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  E */.  SrcList *
dc80: 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
dc90: 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
dca0: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
dcb0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
dcc0: 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
dcd0: 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
dce0: 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
dcf0: 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
dd00: 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
dd10: 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
dd20: 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
dd30: 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
dd40: 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
dd50: 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
dd60: 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
dd70: 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
dd80: 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
dd90: 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
dda0: 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
ddb0: 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
ddc0: 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f  pRightmost;    /
ddd0: 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c  * Right-most sel
dde0: 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
ddf0: 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
de00: 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nt */.  Expr *pL
de10: 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
de20: 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
de30: 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
de40: 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
de50: 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
de60: 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
de70: 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
de80: 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
de90: 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
dea0: 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
deb0: 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
dec0: 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
ded0: 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
dee0: 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  */.  int addrOpe
def0: 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f  nEphm[3];   /* O
df00: 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
df10: 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
df20: 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 7d 3b  his select */.};
df30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
df40: 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
df50: 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
df60: 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
df70: 79 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ys..*/.#define S
df80: 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
df90: 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
dfa0: 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
dfb0: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
dfc0: 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
dfd0: 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
dfe0: 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
dff0: 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
e000: 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
e010: 20 20 20 20 20 20 33 20 20 2f 2a 20 44 6f 20 6e        3  /* Do n
e020: 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
e030: 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
e040: 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
e050: 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
e060: 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
e070: 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
e080: 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
e090: 72 62 79 28 58 29 20 28 58 3c 3d 53 52 54 5f 44  rby(X) (X<=SRT_D
e0a0: 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65  iscard)..#define
e0b0: 20 53 52 54 5f 43 61 6c 6c 62 61 63 6b 20 20 20   SRT_Callback   
e0c0: 20 20 34 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 61    4  /* Invoke a
e0d0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 65   callback with e
e0e0: 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
e0f0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
e100: 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 35 20  _Mem          5 
e110: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
e120: 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
e130: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
e140: 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 36 20  _Set          6 
e150: 20 2f 2a 20 53 74 6f 72 65 20 6e 6f 6e 2d 6e 75   /* Store non-nu
e160: 6c 6c 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  ll results as ke
e170: 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
e180: 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
e190: 62 6c 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a  ble        7  /*
e1a0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
e1b0: 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
e1c0: 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
e1d0: 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
e1e0: 65 6d 54 61 62 20 20 20 20 20 38 20 20 2f 2a 20  emTab     8  /* 
e1f0: 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
e200: 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
e210: 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
e220: 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 75 62  .#define SRT_Sub
e230: 72 6f 75 74 69 6e 65 20 20 20 39 20 20 2f 2a 20  routine   9  /* 
e240: 43 61 6c 6c 20 61 20 73 75 62 72 6f 75 74 69 6e  Call a subroutin
e250: 65 20 74 6f 20 68 61 6e 64 6c 65 20 72 65 73 75  e to handle resu
e260: 6c 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lts */.#define S
e270: 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 31  RT_Exists      1
e280: 30 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  0  /* Store 1 if
e290: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
e2a0: 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 0a 2f 2a 0a  ot empty */../*.
e2b0: 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
e2c0: 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
e2d0: 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
e2e0: 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
e2f0: 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
e300: 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
e310: 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
e320: 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
e330: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
e340: 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
e350: 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
e360: 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
e370: 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
e380: 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
e390: 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
e3a0: 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
e3b0: 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
e3c0: 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
e3d0: 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
e3e0: 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
e3f0: 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
e400: 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
e410: 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
e420: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
e430: 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
e440: 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
e450: 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
e460: 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
e470: 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
e480: 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
e490: 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
e4a0: 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
e4b0: 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
e4c0: 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
e4d0: 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
e4e0: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
e4f0: 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
e500: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
e510: 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
e520: 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
e530: 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
e540: 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
e550: 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
e560: 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
e570: 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
e580: 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
e590: 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
e5a0: 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
e5b0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
e5c0: 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
e5d0: 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
e5e0: 72 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  re */.  int rc; 
e5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e600: 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
e610: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
e620: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
e630: 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
e640: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
e650: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
e660: 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
e670: 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
e680: 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
e690: 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
e6a0: 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
e6b0: 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
e6c0: 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
e6d0: 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
e6e0: 2f 0a 20 20 75 38 20 6e 61 6d 65 43 6c 61 73 68  /.  u8 nameClash
e6f0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 65  ;        /* A pe
e700: 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 20 6e 61  rmanent table na
e710: 6d 65 20 63 6c 61 73 68 65 73 20 77 69 74 68 20  me clashes with 
e720: 74 65 6d 70 20 74 61 62 6c 65 20 6e 61 6d 65 20  temp table name 
e730: 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
e740: 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
e750: 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
e760: 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
e770: 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
e780: 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
e790: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
e7a0: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
e7b0: 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
e7c0: 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
e7d0: 70 61 72 73 65 45 72 72 6f 72 3b 20 20 20 20 20  parseError;     
e7e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 70    /* True if a p
e7f0: 61 72 73 69 6e 67 20 65 72 72 6f 72 20 68 61 73  arsing error has
e800: 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 20 20   been seen */.  
e810: 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
e820: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e830: 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
e840: 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
e850: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e860: 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
e870: 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
e880: 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
e890: 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
e8a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
e8b0: 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
e8c0: 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
e8d0: 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
e8e0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
e8f0: 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
e900: 2f 0a 20 20 69 6e 74 20 63 6b 4f 66 66 73 65 74  /.  int ckOffset
e910: 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 63  ;        /* Stac
e920: 6b 20 6f 66 66 73 65 74 20 74 6f 20 64 61 74 61  k offset to data
e930: 20 75 73 65 64 20 62 79 20 43 48 45 43 4b 20 63   used by CHECK c
e940: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
e950: 75 33 32 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  u32 writeMask;  
e960: 20 20 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20       /* Start a 
e970: 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
e980: 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
e990: 61 73 65 73 20 2a 2f 0a 20 20 75 33 32 20 63 6f  ases */.  u32 co
e9a0: 6f 6b 69 65 4d 61 73 6b 3b 20 20 20 20 20 20 2f  okieMask;      /
e9b0: 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
e9c0: 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
e9d0: 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
e9e0: 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20  cookieGoto;     
e9f0: 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
ea00: 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65  P_Goto to cookie
ea10: 20 76 65 72 69 66 69 65 72 20 73 75 62 72 6f 75   verifier subrou
ea20: 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  tine */.  int co
ea30: 6f 6b 69 65 56 61 6c 75 65 5b 4d 41 58 5f 41 54  okieValue[MAX_AT
ea40: 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
ea50: 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
ea60: 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 23 69   to verify */.#i
ea70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ea80: 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
ea90: 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
eaa0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
eab0: 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
eac0: 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
ead0: 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
eae0: 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
eaf0: 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
eb00: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
eb10: 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  de */.#endif..  
eb20: 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  /* Above is cons
eb30: 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
eb40: 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
eb50: 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
eb60: 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
eb70: 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f  ach recursion */
eb80: 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  ..  int nVar;   
eb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
eba0: 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
ebb0: 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
ebc0: 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
ebd0: 69 6e 74 20 6e 56 61 72 45 78 70 72 3b 20 20 20  int nVarExpr;   
ebe0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ebf0: 66 20 75 73 65 64 20 73 6c 6f 74 73 20 69 6e 20  f used slots in 
ec00: 61 70 56 61 72 45 78 70 72 5b 5d 20 2a 2f 0a 20  apVarExpr[] */. 
ec10: 20 69 6e 74 20 6e 56 61 72 45 78 70 72 41 6c 6c   int nVarExprAll
ec20: 6f 63 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  oc;   /* Number 
ec30: 6f 66 20 61 6c 6c 6f 63 61 74 65 64 20 73 6c 6f  of allocated slo
ec40: 74 73 20 69 6e 20 61 70 56 61 72 45 78 70 72 5b  ts in apVarExpr[
ec50: 5d 20 2a 2f 0a 20 20 45 78 70 72 20 2a 2a 61 70  ] */.  Expr **ap
ec60: 56 61 72 45 78 70 72 3b 20 20 20 20 2f 2a 20 50  VarExpr;    /* P
ec70: 6f 69 6e 74 65 72 73 20 74 6f 20 3a 61 61 61 20  ointers to :aaa 
ec80: 61 6e 64 20 24 61 61 61 61 20 77 69 6c 64 63 61  and $aaaa wildca
ec90: 72 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  rd expressions *
eca0: 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
ecb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
ecc0: 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
ecd0: 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
ece0: 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 20 20   the query */.  
ecf0: 54 6f 6b 65 6e 20 73 45 72 72 54 6f 6b 65 6e 3b  Token sErrToken;
ed00: 20 20 20 20 20 2f 2a 20 54 68 65 20 74 6f 6b 65       /* The toke
ed10: 6e 20 61 74 20 77 68 69 63 68 20 74 68 65 20 65  n at which the e
ed20: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
ed30: 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
ed40: 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ken;    /* Token
ed50: 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
ed60: 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
ed70: 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
ed80: 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 2f  sLastToken;    /
ed90: 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
eda0: 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 63 6f 6e   parsed */.  con
edb0: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20  st char *zSql;  
edc0: 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
edd0: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
ede0: 72 20 2a 7a 54 61 69 6c 3b 20 20 20 2f 2a 20 41  r *zTail;   /* A
edf0: 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
ee00: 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
ee10: 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
ee20: 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
ee30: 3b 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20  ;    /* A table 
ee40: 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
ee50: 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
ee60: 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
ee70: 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
ee80: 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
ee90: 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
eea0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
eeb0: 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 61 63  */.  TriggerStac
eec0: 6b 20 2a 74 72 69 67 53 74 61 63 6b 3b 20 20 2f  k *trigStack;  /
eed0: 2a 20 54 72 69 67 67 65 72 20 61 63 74 69 6f 6e  * Trigger action
eee0: 73 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f  s being coded */
eef0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
ef00: 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
ef10: 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
ef20: 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
ef30: 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e  allbacks */.#ifn
ef40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ef50: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
ef60: 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
ef70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
ef80: 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
ef90: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
efa0: 2a 2f 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  */.  u8 declareV
efb0: 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  tab;            
efc0: 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
efd0: 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
efe0: 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 54 61  e_vtab() */.  Ta
eff0: 62 6c 65 20 2a 70 56 69 72 74 75 61 6c 4c 6f 63  ble *pVirtualLoc
f000: 6b 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 71 75  k;       /* Requ
f010: 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ire virtual tabl
f020: 65 20 6c 6f 63 6b 20 6f 6e 20 74 68 69 73 20 74  e lock on this t
f030: 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  able */.#endif.}
f040: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
f050: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
f060: 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
f070: 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
f080: 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
f090: 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
f0a0: 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
f0b0: 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
f0c0: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
f0d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f0e0: 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
f0f0: 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
f100: 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
f110: 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
f120: 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
f130: 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
f140: 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
f150: 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
f160: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
f170: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
f180: 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
f190: 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
f1a0: 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
f1b0: 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
f1c0: 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
f1d0: 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
f1e0: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
f1f0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
f200: 20 66 6c 61 67 73 20 66 6f 72 20 50 32 20 76 61   flags for P2 va
f210: 6c 75 65 20 69 6e 20 4f 50 5f 49 6e 73 65 72 74  lue in OP_Insert
f220: 20 61 6e 64 20 4f 50 5f 44 65 6c 65 74 65 0a 2a   and OP_Delete.*
f230: 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
f240: 5f 4e 43 48 41 4e 47 45 20 20 20 31 20 20 20 20  _NCHANGE   1    
f250: 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
f260: 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
f270: 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
f280: 41 53 54 52 4f 57 49 44 20 32 20 20 20 20 2f 2a  ASTROWID 2    /*
f290: 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
f2a0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
f2b0: 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
f2c0: 53 55 50 44 41 54 45 20 20 34 20 20 20 20 2f 2a  SUPDATE  4    /*
f2d0: 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
f2e0: 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
f2f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
f300: 41 47 5f 41 50 50 45 4e 44 20 20 20 20 38 20 20  AG_APPEND    8  
f310: 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
f320: 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
f330: 65 6e 64 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  end */../*. * Ea
f340: 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
f350: 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
f360: 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
f370: 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
f380: 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
f390: 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
f3a0: 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
f3b0: 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
f3c0: 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
f3d0: 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
f3e0: 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
f3f0: 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
f400: 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
f410: 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
f420: 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
f430: 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
f440: 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
f450: 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
f460: 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
f470: 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
f480: 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
f490: 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
f4a0: 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
f4b0: 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
f4c0: 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
f4d0: 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
f4e0: 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
f4f0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
f500: 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
f510: 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
f520: 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
f530: 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
f540: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
f550: 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
f560: 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
f570: 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
f580: 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
f590: 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
f5a0: 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
f5b0: 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
f5c0: 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
f5d0: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
f5e0: 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
f5f0: 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
f600: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
f610: 20 20 63 68 61 72 20 2a 6e 61 6d 65 3b 20 20 20    char *name;   
f620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
f630: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
f640: 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
f650: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
f660: 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
f670: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
f680: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
f690: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
f6a0: 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
f6b0: 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
f6c0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
f6d0: 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
f6e0: 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
f6f0: 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
f700: 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
f710: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
f720: 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
f730: 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
f740: 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
f750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
f760: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
f770: 66 20 74 68 65 20 65 78 70 72 65 73 69 6f 6e 20  f the expresion 
f780: 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
f790: 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
f7a0: 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
f7b0: 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
f7c0: 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
f7d0: 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7f0: 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
f800: 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
f810: 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
f820: 69 6e 74 20 66 6f 72 65 61 63 68 3b 20 20 20 20  int foreach;    
f830: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
f840: 66 20 54 4b 5f 52 4f 57 20 6f 72 20 54 4b 5f 53  f TK_ROW or TK_S
f850: 54 41 54 45 4d 45 4e 54 20 2a 2f 0a 20 20 54 6f  TATEMENT */.  To
f860: 6b 65 6e 20 6e 61 6d 65 54 6f 6b 65 6e 3b 20 20  ken nameToken;  
f870: 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 63        /* Token c
f880: 6f 6e 74 61 69 6e 69 6e 67 20 7a 4e 61 6d 65 2e  ontaining zName.
f890: 20 55 73 65 20 64 75 72 69 6e 67 20 70 61 72 73   Use during pars
f8a0: 69 6e 67 20 6f 6e 6c 79 20 2a 2f 0a 20 20 53 63  ing only */.  Sc
f8b0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
f8c0: 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
f8d0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
f8e0: 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
f8f0: 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
f900: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
f910: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
f920: 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
f930: 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
f940: 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
f950: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
f960: 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
f970: 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
f980: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
f990: 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
f9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f9b0: 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
f9c0: 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
f9d0: 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
f9e0: 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
f9f0: 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
fa00: 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
fa10: 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
fa20: 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
fa30: 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
fa40: 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
fa50: 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
fa60: 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
fa70: 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
fa80: 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
fa90: 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
faa0: 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
fab0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
fac0: 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
fad0: 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
fae0: 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
faf0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
fb00: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
fb10: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
fb20: 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
fb30: 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
fb40: 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
fb50: 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
fb60: 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
fb70: 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
fb80: 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
fb90: 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
fba0: 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
fbb0: 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
fbc0: 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
fbd0: 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
fbe0: 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
fbf0: 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
fc00: 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
fc10: 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
fc20: 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
fc30: 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
fc40: 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
fc50: 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
fc60: 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
fc70: 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
fc80: 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
fc90: 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
fca0: 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
fcb0: 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
fcc0: 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
fcd0: 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
fce0: 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
fcf0: 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
fd00: 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
fd10: 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
fd20: 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
fd30: 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
fd40: 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
fd50: 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
fd60: 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
fd70: 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
fd80: 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
fd90: 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
fda0: 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
fdb0: 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
fdc0: 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
fdd0: 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
fde0: 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
fdf0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
fe00: 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
fe10: 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
fe20: 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
fe30: 6c 64 69 6e 67 20 74 68 65 20 6e 61 6d 65 20 6f  lding the name o
fe40: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
fe50: 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
fe60: 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
fe70: 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
fe80: 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
fe90: 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
fea0: 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
feb0: 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
fec0: 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
fed0: 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
fee0: 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
fef0: 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
ff00: 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
ff10: 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
ff20: 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
ff30: 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
ff40: 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
ff50: 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
ff60: 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
ff70: 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
ff80: 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
ff90: 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
ffa0: 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
ffb0: 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
ffc0: 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
ffd0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
ffe0: 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
fff0: 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
10000 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
10010 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
10020 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
10030 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
10040 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
10050 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
10060 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
10070 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72  K_UPDATE). * tar
10080 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
10090 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 61  n holding the na
100a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
100b0 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f  to update rows o
100c0 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  f.. * pWhere    
100d0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
100e0 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
100f0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
10100 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
10110 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
10120 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
10130 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
10140 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
10150 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
10160 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
10170 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
10180 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
10190 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
101a0 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
101b0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
101c0 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
101d0 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
101e0 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
101f0 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
10200 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
10210 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
10220 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
10230 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
10240 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
10250 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
10260 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
10270 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
10280 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
10290 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
102a0 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
102b0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
102c0 0a 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  ..  Select *pSel
102d0 65 63 74 3b 20 20 20 20 20 2f 2a 20 56 61 6c 69  ect;     /* Vali
102e0 64 20 66 6f 72 20 53 45 4c 45 43 54 20 61 6e 64  d for SELECT and
102f0 20 73 6f 6d 65 74 69 6d 65 73 20 0a 09 09 09 20   sometimes .... 
10300 20 49 4e 53 45 52 54 20 73 74 65 70 73 20 28 77   INSERT steps (w
10310 68 65 6e 20 70 45 78 70 72 4c 69 73 74 20 3d 3d  hen pExprList ==
10320 20 30 29 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74   0) */.  Token t
10330 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
10340 20 56 61 6c 69 64 20 66 6f 72 20 44 45 4c 45 54   Valid for DELET
10350 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
10360 54 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  T steps */.  Exp
10370 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
10380 20 20 2f 2a 20 56 61 6c 69 64 20 66 6f 72 20 44    /* Valid for D
10390 45 4c 45 54 45 2c 20 55 50 44 41 54 45 20 73 74  ELETE, UPDATE st
103a0 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
103b0 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
103c0 20 56 61 6c 69 64 20 66 6f 72 20 55 50 44 41 54   Valid for UPDAT
103d0 45 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  E statements and
103e0 20 73 6f 6d 65 74 69 6d 65 73 20 0a 09 09 09 20   sometimes .... 
103f0 20 20 49 4e 53 45 52 54 20 73 74 65 70 73 20 28    INSERT steps (
10400 77 68 65 6e 20 70 53 65 6c 65 63 74 20 3d 3d 20  when pSelect == 
10410 30 29 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  0)         */.  
10420 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
10430 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 20 66 6f       /* Valid fo
10440 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
10450 6e 74 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 54 72  nts only */.  Tr
10460 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
10470 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
10480 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
10490 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
104a0 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
104b0 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
104c0 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
104d0 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
104e0 3b 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  ;../*. * An inst
104f0 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
10500 72 69 67 67 65 72 53 74 61 63 6b 20 73 74 6f 72  riggerStack stor
10510 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72  es information r
10520 65 71 75 69 72 65 64 20 64 75 72 69 6e 67 20 63  equired during c
10530 6f 64 65 0a 20 2a 20 67 65 6e 65 72 61 74 69 6f  ode. * generatio
10540 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 74 72  n of a single tr
10550 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 57  igger program. W
10560 68 69 6c 65 20 74 68 65 20 74 72 69 67 67 65 72  hile the trigger
10570 20 70 72 6f 67 72 61 6d 20 69 73 20 62 65 69 6e   program is bein
10580 67 0a 20 2a 20 63 6f 64 65 64 2c 20 69 74 73 20  g. * coded, its 
10590 61 73 73 6f 63 69 61 74 65 64 20 54 72 69 67 67  associated Trigg
105a0 65 72 53 74 61 63 6b 20 69 6e 73 74 61 6e 63 65  erStack instance
105b0 20 69 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62   is pointed to b
105c0 79 20 74 68 65 0a 20 2a 20 22 70 54 72 69 67 67  y the. * "pTrigg
105d0 65 72 53 74 61 63 6b 22 20 6d 65 6d 62 65 72 20  erStack" member 
105e0 6f 66 20 74 68 65 20 50 61 72 73 65 20 73 74 72  of the Parse str
105f0 75 63 74 75 72 65 2e 0a 20 2a 0a 20 2a 20 54 68  ucture.. *. * Th
10600 65 20 70 54 61 62 20 6d 65 6d 62 65 72 20 70 6f  e pTab member po
10610 69 6e 74 73 20 74 6f 20 74 68 65 20 74 61 62 6c  ints to the tabl
10620 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20  e that triggers 
10630 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
10640 6f 6e 2e 20 54 68 65 20 0a 20 2a 20 6e 65 77 49  on. The . * newI
10650 64 78 20 6d 65 6d 62 65 72 20 63 6f 6e 74 61 69  dx member contai
10660 6e 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  ns the index of 
10670 74 68 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  the vdbe cursor 
10680 74 68 61 74 20 70 6f 69 6e 74 73 20 61 74 20 74  that points at t
10690 68 65 20 74 65 6d 70 0a 20 2a 20 74 61 62 6c 65  he temp. * table
106a0 20 74 68 61 74 20 73 74 6f 72 65 73 20 74 68 65   that stores the
106b0 20 6e 65 77 2e 2a 20 72 65 66 65 72 65 6e 63 65   new.* reference
106c0 73 2e 20 49 66 20 6e 65 77 2e 2a 20 72 65 66 65  s. If new.* refe
106d0 72 65 6e 63 65 73 20 61 72 65 20 6e 6f 74 20 76  rences are not v
106e0 61 6c 69 64 0a 20 2a 20 66 6f 72 20 74 68 65 20  alid. * for the 
106f0 74 72 69 67 67 65 72 20 62 65 69 6e 67 20 63 6f  trigger being co
10700 64 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ded (for example
10710 20 61 6e 20 4f 4e 20 44 45 4c 45 54 45 20 74 72   an ON DELETE tr
10720 69 67 67 65 72 29 2c 20 74 68 65 6e 20 6e 65 77  igger), then new
10730 49 64 78 0a 20 2a 20 69 73 20 73 65 74 20 74 6f  Idx. * is set to
10740 20 2d 31 2e 20 54 68 65 20 6f 6c 64 49 64 78 20   -1. The oldIdx 
10750 6d 65 6d 62 65 72 20 69 73 20 61 6e 61 6c 6f 67  member is analog
10760 6f 75 73 20 74 6f 20 6e 65 77 49 64 78 2c 20 66  ous to newIdx, f
10770 6f 72 20 6f 6c 64 2e 2a 20 72 65 66 65 72 65 6e  or old.* referen
10780 63 65 73 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 4f  ces.. *. * The O
10790 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
107a0 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
107b0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
107c0 67 72 61 6d 20 73 74 65 70 73 20 69 73 20 73 74  gram steps is st
107d0 6f 72 65 64 20 0a 20 2a 20 61 73 20 74 68 65 20  ored . * as the 
107e0 6f 72 63 6f 6e 66 20 6d 65 6d 62 65 72 2e 20 49  orconf member. I
107f0 66 20 74 68 69 73 20 69 73 20 4f 45 5f 44 65 66  f this is OE_Def
10800 61 75 6c 74 2c 20 74 68 65 6e 20 74 68 65 20 4f  ault, then the O
10810 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
10820 65 20 0a 20 2a 20 73 70 65 63 69 66 69 65 64 20  e . * specified 
10830 66 6f 72 20 69 6e 64 69 76 69 64 75 61 6c 20 74  for individual t
10840 72 69 67 67 65 72 73 20 73 74 65 70 73 20 69 73  riggers steps is
10850 20 75 73 65 64 2e 0a 20 2a 0a 20 2a 20 73 74 72   used.. *. * str
10860 75 63 74 20 54 72 69 67 67 65 72 53 74 61 63 6b  uct TriggerStack
10870 20 68 61 73 20 61 20 22 70 4e 65 78 74 22 20 6d   has a "pNext" m
10880 65 6d 62 65 72 2c 20 74 6f 20 61 6c 6c 6f 77 20  ember, to allow 
10890 6c 69 6e 6b 65 64 20 6c 69 73 74 73 20 74 6f 20  linked lists to 
108a0 62 65 0a 20 2a 20 63 6f 6e 73 74 72 75 63 74 65  be. * constructe
108b0 64 2e 20 57 68 65 6e 20 63 6f 64 69 6e 67 20 6e  d. When coding n
108c0 65 73 74 65 64 20 74 72 69 67 67 65 72 73 20 28  ested triggers (
108d0 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 62  triggers fired b
108e0 79 20 6f 74 68 65 72 20 74 72 69 67 67 65 72 73  y other triggers
108f0 29 0a 20 2a 20 65 61 63 68 20 6e 65 73 74 65 64  ). * each nested
10900 20 74 72 69 67 67 65 72 20 73 74 6f 72 65 73 20   trigger stores 
10910 69 74 73 20 70 61 72 65 6e 74 20 74 72 69 67 67  its parent trigg
10920 65 72 27 73 20 54 72 69 67 67 65 72 53 74 61 63  er's TriggerStac
10930 6b 20 61 73 20 74 68 65 20 22 70 4e 65 78 74 22  k as the "pNext"
10940 20 0a 20 2a 20 70 6f 69 6e 74 65 72 2e 20 4f 6e   . * pointer. On
10950 63 65 20 74 68 65 20 6e 65 73 74 65 64 20 74 72  ce the nested tr
10960 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 63  igger has been c
10970 6f 64 65 64 2c 20 74 68 65 20 70 4e 65 78 74 20  oded, the pNext 
10980 76 61 6c 75 65 20 69 73 20 72 65 73 74 6f 72 65  value is restore
10990 64 0a 20 2a 20 74 6f 20 74 68 65 20 70 54 72 69  d. * to the pTri
109a0 67 67 65 72 53 74 61 63 6b 20 6d 65 6d 62 65 72  ggerStack member
109b0 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 73 74   of the Parse st
109c0 75 63 74 75 72 65 20 61 6e 64 20 63 6f 64 69 6e  ucture and codin
109d0 67 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 0a  g of the parent.
109e0 20 2a 20 74 72 69 67 67 65 72 20 63 6f 6e 74 69   * trigger conti
109f0 6e 75 65 73 2e 0a 20 2a 0a 20 2a 20 42 65 66 6f  nues.. *. * Befo
10a00 72 65 20 61 20 6e 65 73 74 65 64 20 74 72 69 67  re a nested trig
10a10 67 65 72 20 69 73 20 63 6f 64 65 64 2c 20 74 68  ger is coded, th
10a20 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 70 6f  e linked list po
10a30 69 6e 74 65 64 20 74 6f 20 62 79 20 74 68 65 20  inted to by the 
10a40 0a 20 2a 20 70 54 72 69 67 67 65 72 53 74 61 63  . * pTriggerStac
10a50 6b 20 69 73 20 73 63 61 6e 6e 65 64 20 74 6f 20  k is scanned to 
10a60 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
10a70 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 61  trigger is not a
10a80 62 6f 75 74 20 74 6f 20 62 65 20 63 6f 64 65 64  bout to be coded
10a90 0a 20 2a 20 72 65 63 75 72 73 69 76 65 6c 79 2e  . * recursively.
10aa0 20 49 66 20 74 68 69 73 20 63 6f 6e 64 69 74 69   If this conditi
10ab0 6f 6e 20 69 73 20 64 65 74 65 63 74 65 64 2c 20  on is detected, 
10ac0 74 68 65 20 6e 65 73 74 65 64 20 74 72 69 67 67  the nested trigg
10ad0 65 72 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 2e  er is not coded.
10ae0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
10af0 67 65 72 53 74 61 63 6b 20 7b 0a 20 20 54 61 62  gerStack {.  Tab
10b00 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
10b10 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 61 74 20    /* Table that 
10b20 74 72 69 67 67 65 72 73 20 61 72 65 20 63 75 72  triggers are cur
10b30 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 63 6f 64  rently being cod
10b40 65 64 20 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  ed on */.  int n
10b50 65 77 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  ewIdx;          
10b60 2f 2a 20 49 6e 64 65 78 20 6f 66 20 76 64 62 65  /* Index of vdbe
10b70 20 63 75 72 73 6f 72 20 74 6f 20 22 6e 65 77 22   cursor to "new"
10b80 20 74 65 6d 70 20 74 61 62 6c 65 20 2a 2f 0a 20   temp table */. 
10b90 20 69 6e 74 20 6f 6c 64 49 64 78 3b 20 20 20 20   int oldIdx;    
10ba0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
10bb0 66 20 76 64 62 65 20 63 75 72 73 6f 72 20 74 6f  f vdbe cursor to
10bc0 20 22 6f 6c 64 22 20 74 65 6d 70 20 74 61 62 6c   "old" temp tabl
10bd0 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  e */.  int orcon
10be0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  f;          /* C
10bf0 75 72 72 65 6e 74 20 6f 72 63 6f 6e 66 20 70 6f  urrent orconf po
10c00 6c 69 63 79 20 2a 2f 0a 20 20 69 6e 74 20 69 67  licy */.  int ig
10c10 6e 6f 72 65 4a 75 6d 70 3b 20 20 20 20 20 20 2f  noreJump;      /
10c20 2a 20 77 68 65 72 65 20 74 6f 20 6a 75 6d 70 20  * where to jump 
10c30 74 6f 20 66 6f 72 20 61 20 52 41 49 53 45 28 49  to for a RAISE(I
10c40 47 4e 4f 52 45 29 20 2a 2f 0a 20 20 54 72 69 67  GNORE) */.  Trig
10c50 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
10c60 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
10c70 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
10c80 63 6f 64 65 64 20 2a 2f 0a 20 20 54 72 69 67 67  coded */.  Trigg
10c90 65 72 53 74 61 63 6b 20 2a 70 4e 65 78 74 3b 20  erStack *pNext; 
10ca0 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
10cb0 64 6f 77 6e 20 6f 6e 20 74 68 65 20 74 72 69 67  down on the trig
10cc0 67 65 72 20 73 74 61 63 6b 20 2a 2f 0a 7d 3b 0a  ger stack */.};.
10cd0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
10ce0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
10cf0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
10d00 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
10d10 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
10d20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
10d30 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
10d40 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
10d50 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
10d60 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
10d70 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
10d80 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
10d90 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
10da0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
10db0 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
10dc0 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
10dd0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
10de0 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
10df0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
10e00 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
10e10 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
10e20 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
10e30 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
10e40 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
10e50 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
10e60 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
10e70 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
10e80 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
10e90 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
10ea0 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
10eb0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
10ec0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
10ed0 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
10ee0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
10ef0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
10f00 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
10f10 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
10f20 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
10f30 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
10f40 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
10f50 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
10f60 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
10f70 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
10f80 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
10f90 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
10fa0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
10fb0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ized */.  int iD
10fc0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
10fd0 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
10fe0 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
10ff0 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
11000 48 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  Hed */.  char **
11010 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
11020 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
11030 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
11040 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
11050 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
11060 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
11070 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
11080 0a 20 2a 20 54 68 69 73 20 67 6c 6f 62 61 6c 20  . * This global 
11090 66 6c 61 67 20 69 73 20 73 65 74 20 66 6f 72 20  flag is set for 
110a0 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 65 73 74  performance test
110b0 69 6e 67 20 6f 66 20 74 72 69 67 67 65 72 73 2e  ing of triggers.
110c0 20 57 68 65 6e 20 69 74 20 69 73 20 73 65 74 0a   When it is set.
110d0 20 2a 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 70   * SQLite will p
110e0 65 72 66 6f 72 6d 20 74 68 65 20 6f 76 65 72 68  erform the overh
110f0 65 61 64 20 6f 66 20 62 75 69 6c 64 69 6e 67 20  ead of building 
11100 6e 65 77 20 61 6e 64 20 6f 6c 64 20 74 72 69 67  new and old trig
11110 67 65 72 20 72 65 66 65 72 65 6e 63 65 73 20 0a  ger references .
11120 20 2a 20 65 76 65 6e 20 77 68 65 6e 20 6e 6f 20   * even when no 
11130 74 72 69 67 67 65 72 73 20 65 78 69 73 74 0a 20  triggers exist. 
11140 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  */.extern int sq
11150 6c 69 74 65 33 5f 61 6c 77 61 79 73 5f 63 6f 64  lite3_always_cod
11160 65 5f 74 72 69 67 67 65 72 5f 73 65 74 75 70 3b  e_trigger_setup;
11170 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
11180 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
11190 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 65 69 74  macro can be eit
111a0 68 65 72 20 61 20 63 6f 6e 73 74 61 6e 74 20 28  her a constant (
111b0 66 6f 72 20 70 72 6f 64 75 63 74 69 6f 6e 0a 2a  for production.*
111c0 2a 20 62 75 69 6c 64 73 29 20 6f 72 20 61 20 66  * builds) or a f
111d0 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 28 66 6f  unction call (fo
111e0 72 20 64 65 62 75 67 67 69 6e 67 29 2e 20 20 49  r debugging).  I
111f0 66 20 69 74 20 69 73 20 61 20 66 75 6e 63 74 69  f it is a functi
11200 6f 6e 20 63 61 6c 6c 2c 0a 2a 2a 20 69 74 20 61  on call,.** it a
11210 6c 6c 6f 77 73 20 74 68 65 20 6f 70 65 72 61 74  llows the operat
11220 6f 72 20 74 6f 20 73 65 74 20 61 20 62 72 65 61  or to set a brea
11230 6b 70 6f 69 6e 74 20 61 74 20 74 68 65 20 73 70  kpoint at the sp
11240 6f 74 20 77 68 65 72 65 20 64 61 74 61 62 61 73  ot where databas
11250 65 0a 2a 2a 20 63 6f 72 72 75 70 74 69 6f 6e 20  e.** corruption 
11260 69 73 20 66 69 72 73 74 20 64 65 74 65 63 74 65  is first detecte
11270 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
11280 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65  ITE_DEBUG.  exte
11290 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  rn int sqlite3Co
112a0 72 72 75 70 74 28 76 6f 69 64 29 3b 0a 23 20 64  rrupt(void);.# d
112b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
112c0 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
112d0 33 43 6f 72 72 75 70 74 28 29 0a 23 65 6c 73 65  3Corrupt().#else
112e0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
112f0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 53 51  _CORRUPT_BKPT SQ
11300 4c 49 54 45 5f 43 4f 52 52 55 50 54 0a 23 65 6e  LITE_CORRUPT.#en
11310 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
11320 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
11330 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73  totypes.*/.int s
11340 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
11350 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
11360 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
11370 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63  qlite3StrNICmp(c
11380 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
11390 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
113a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 61 73 68  .int sqlite3Hash
113b0 4e 6f 43 61 73 65 28 63 6f 6e 73 74 20 63 68 61  NoCase(const cha
113c0 72 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  r *, int);.int s
113d0 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63  qlite3IsNumber(c
113e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 2a  onst char*, int*
113f0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
11400 65 33 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20  e3Compare(const 
11410 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
11420 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
11430 65 33 53 6f 72 74 43 6f 6d 70 61 72 65 28 63 6f  e3SortCompare(co
11440 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
11450 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
11460 73 71 6c 69 74 65 33 52 65 61 6c 54 6f 53 6f 72  sqlite3RealToSor
11470 74 61 62 6c 65 28 64 6f 75 62 6c 65 20 72 2c 20  table(double r, 
11480 63 68 61 72 20 2a 29 3b 0a 0a 76 6f 69 64 20 2a  char *);..void *
11490 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e  sqlite3Malloc(in
114a0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  t,int);.void *sq
114b0 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61 77 28 69  lite3MallocRaw(i
114c0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
114d0 6c 69 74 65 33 46 72 65 65 28 76 6f 69 64 2a 29  lite3Free(void*)
114e0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
114f0 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 69 6e 74  ealloc(void*,int
11500 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
11510 53 74 72 44 75 70 28 63 6f 6e 73 74 20 63 68 61  StrDup(const cha
11520 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
11530 65 33 53 74 72 4e 44 75 70 28 63 6f 6e 73 74 20  e3StrNDup(const 
11540 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 23 20 64  char*, int);.# d
11550 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 68 65  efine sqlite3Che
11560 63 6b 4d 65 6d 6f 72 79 28 61 2c 62 29 0a 76 6f  ckMemory(a,b).vo
11570 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
11580 6f 63 4f 72 46 72 65 65 28 76 6f 69 64 2a 2c 69  ocOrFree(void*,i
11590 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
115a0 33 46 72 65 65 58 28 76 6f 69 64 2a 29 3b 0a 76  3FreeX(void*);.v
115b0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
115c0 6f 63 58 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ocX(int);.int sq
115d0 6c 69 74 65 33 41 6c 6c 6f 63 53 69 7a 65 28 76  lite3AllocSize(v
115e0 6f 69 64 20 2a 29 3b 0a 0a 63 68 61 72 20 2a 73  oid *);..char *s
115f0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 63 6f  qlite3MPrintf(co
11600 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
11610 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
11620 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
11630 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
11640 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
11650 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
11660 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  *, ...);.void *s
11670 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72 28  qlite3TextToPtr(
11680 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
11690 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
116a0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 2e 2e 2e  ing(char **, ...
116b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
116c0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
116d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
116e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
116f0 72 72 6f 72 43 6c 65 61 72 28 50 61 72 73 65 2a  rrorClear(Parse*
11700 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
11710 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76  equote(char*);.v
11720 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
11730 74 65 45 78 70 72 28 45 78 70 72 2a 29 3b 0a 69  teExpr(Expr*);.i
11740 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
11750 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
11760 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
11770 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
11780 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
11790 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
117a0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
117b0 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
117c0 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  arse*);.Expr *sq
117d0 6c 69 74 65 33 45 78 70 72 28 69 6e 74 2c 20 45  lite3Expr(int, E
117e0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
117f0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
11800 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4f 72 46   *sqlite3ExprOrF
11810 72 65 65 28 69 6e 74 2c 20 45 78 70 72 2a 2c 20  ree(int, Expr*, 
11820 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
11830 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
11840 74 65 33 52 65 67 69 73 74 65 72 45 78 70 72 28  te3RegisterExpr(
11850 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
11860 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
11870 72 41 6e 64 28 45 78 70 72 2a 2c 20 45 78 70 72  rAnd(Expr*, Expr
11880 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
11890 45 78 70 72 53 70 61 6e 28 45 78 70 72 2a 2c 54  ExprSpan(Expr*,T
118a0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 45  oken*,Token*);.E
118b0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
118c0 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 4c 69 73  Function(ExprLis
118d0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  t*, Token*);.voi
118e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
118f0 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
11900 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
11910 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
11920 65 74 65 28 45 78 70 72 2a 29 3b 0a 45 78 70 72  ete(Expr*);.Expr
11930 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
11940 72 4c 69 73 74 41 70 70 65 6e 64 28 45 78 70 72  rListAppend(Expr
11950 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 54 6f 6b 65  List*,Expr*,Toke
11960 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
11970 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
11980 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
11990 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
119a0 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
119b0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
119c0 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
119d0 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
119e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
119f0 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
11a00 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
11a10 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
11a20 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
11a30 61 6c 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  alSchema(sqlite3
11a40 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
11a50 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
11a60 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
11a70 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
11a80 6b 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  kInternalChanges
11a90 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
11aa0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
11ab0 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
11ac0 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a  lite3*);.Table *
11ad0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
11ae0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
11af0 63 68 61 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  char*,Select*);.
11b00 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
11b10 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
11b20 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e *, int);.void 
11b30 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
11b40 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
11b50 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
11b60 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
11b70 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
11b80 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
11b90 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
11ba0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
11bb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
11bc0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
11bd0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
11be0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
11bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
11c00 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
11c10 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
11c20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
11c30 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
11c40 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
11c50 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
11c60 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
11c70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
11c80 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
11c90 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
11ca0 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  ar*, int);.void 
11cb0 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
11cc0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
11cd0 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 0a  ken*,Select*);..
11ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
11cf0 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
11d00 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
11d10 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  n*,Select*,int,i
11d20 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
11d30 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
11d40 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
11d50 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
11d60 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
11d70 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
11d80 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
11d90 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
11da0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
11db0 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
11dc0 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
11dd0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  f..void sqlite3D
11de0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
11df0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
11e00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
11e10 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
11e20 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
11e30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
11e40 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
11e50 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
11e60 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
11e70 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
11e80 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
11e90 61 74 65 28 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  ate(void*,int,in
11ea0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 69 6e 74 2a  t,int*,int*,int*
11eb0 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
11ec0 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 49  e3IdListAppend(I
11ed0 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
11ee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
11ef0 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
11f00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
11f10 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
11f20 63 4c 69 73 74 41 70 70 65 6e 64 28 53 72 63 4c  cListAppend(SrcL
11f30 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
11f40 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
11f50 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
11f60 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 53 72 63  pendFromTerm(Src
11f70 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
11f80 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 20 45 78       Select*, Ex
11fc0 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
11fd0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
11fe0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
11ff0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
12000 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
12010 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
12020 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
12030 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
12040 74 44 65 6c 65 74 65 28 49 64 4c 69 73 74 2a 29  tDelete(IdList*)
12050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
12060 63 4c 69 73 74 44 65 6c 65 74 65 28 53 72 63 4c  cListDelete(SrcL
12070 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
12080 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
12090 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
120a0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
120b0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
120c0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
120d0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
120e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
120f0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
12100 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
12110 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
12120 20 73 71 6c 69 74 65 33 41 64 64 4b 65 79 54 79   sqlite3AddKeyTy
12130 70 65 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69  pe(Vdbe*, ExprLi
12140 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
12150 65 33 41 64 64 49 64 78 4b 65 79 54 79 70 65 28  e3AddIdxKeyType(
12160 56 64 62 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  Vdbe*, Index*);.
12170 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
12180 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
12190 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 53 65 6c  *, int, int, Sel
121a0 65 63 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ect*, int, int*,
121b0 20 63 68 61 72 20 2a 61 66 66 29 3b 0a 53 65 6c   char *aff);.Sel
121c0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
121d0 63 74 4e 65 77 28 45 78 70 72 4c 69 73 74 2a 2c  ctNew(ExprList*,
121e0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
121f0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
12200 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72    int,Expr*,Expr
12230 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
12240 53 65 6c 65 63 74 44 65 6c 65 74 65 28 53 65 6c  SelectDelete(Sel
12250 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
12260 74 65 33 53 65 6c 65 63 74 55 6e 62 69 6e 64 28  te3SelectUnbind(
12270 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
12280 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
12290 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
122a0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
122b0 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
122c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
122d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
122e0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
122f0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
12300 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
12310 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
12320 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
12330 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
12340 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
12350 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
12360 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
12370 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
12380 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
12390 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
123a0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
123b0 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
123c0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
123d0 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
123e0 6e 66 6f 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nfo*);.void sqli
123f0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
12400 6c 75 6d 6e 28 56 64 62 65 2a 2c 20 54 61 62 6c  lumn(Vdbe*, Tabl
12410 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
12420 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
12430 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
12440 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
12450 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
12460 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
12470 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
12480 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
12490 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  se*, ExprList*);
124a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
124b0 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
124c0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
124d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
124e0 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
124f0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
12500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
12510 4e 65 78 74 65 64 50 61 72 73 65 28 50 61 72 73  NextedParse(Pars
12520 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
12530 20 2e 2e 2e 29 3b 0a 54 61 62 6c 65 20 2a 73 71   ...);.Table *sq
12540 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
12550 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
12560 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
12570 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
12580 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
12590 73 65 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  se*,const char*,
125a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 49   const char*);.I
125b0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
125c0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
125d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
125e0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
125f0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
12600 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
12610 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
12620 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
12630 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
12640 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
12650 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
12660 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
12670 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
12680 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
12690 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
126a0 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
126b0 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
126c0 6e 28 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  n(Token*);.int s
126d0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 28  qlite3ExprCheck(
126e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
126f0 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  nt, int*);.int s
12700 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
12710 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  e(Expr*, Expr*);
12720 0a 69 6e 74 20 73 71 6c 69 74 65 46 75 6e 63 49  .int sqliteFuncI
12730 64 28 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  d(Token*);.int s
12740 71 6c 69 74 65 33 45 78 70 72 52 65 73 6f 6c 76  qlite3ExprResolv
12750 65 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  eNames(NameConte
12760 78 74 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  xt *, Expr *);.i
12770 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  nt sqlite3ExprAn
12780 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
12790 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
127a0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
127b0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
127c0 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
127d0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 56 64 62  ,ExprList*);.Vdb
127e0 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
127f0 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20  e(Parse*);.Expr 
12800 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 64  *sqlite3CreateId
12810 45 78 70 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  Expr(const char*
12820 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
12830 61 6e 64 6f 6d 6e 65 73 73 28 69 6e 74 2c 20 76  andomness(int, v
12840 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
12850 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
12860 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
12870 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
12880 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
12890 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
128a0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
128b0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
128c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
128d0 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
128e0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
128f0 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
12900 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
12910 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
12920 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
12930 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
12940 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
12950 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
12960 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
12970 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
12980 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
12990 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
129a0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
129b0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
129c0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 56 64  ete(sqlite3*, Vd
129d0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
129e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
129f0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
12a00 6e 64 65 78 44 65 6c 65 74 65 28 56 64 62 65 2a  ndexDelete(Vdbe*
12a10 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 63  , Table*, int, c
12a20 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
12a30 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
12a40 4b 65 79 28 56 64 62 65 2a 2c 20 49 6e 64 65 78  Key(Vdbe*, Index
12a50 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
12a60 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
12a70 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
12a80 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
12a90 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  char*,int,int,in
12aa0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
12ab0 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
12ac0 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 54 61  rtion(Parse*, Ta
12ad0 62 6c 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  ble*, int, char*
12ae0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
12af0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
12b00 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
12b10 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
12b20 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
12b30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
12b40 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
12b50 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
12b60 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
12b70 65 33 45 78 70 72 44 75 70 28 45 78 70 72 2a 29  e3ExprDup(Expr*)
12b80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f  ;.void sqlite3To
12b90 6b 65 6e 43 6f 70 79 28 54 6f 6b 65 6e 2a 2c 20  kenCopy(Token*, 
12ba0 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 4c 69 73  Token*);.ExprLis
12bb0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
12bc0 73 74 44 75 70 28 45 78 70 72 4c 69 73 74 2a 29  stDup(ExprList*)
12bd0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
12be0 65 33 53 72 63 4c 69 73 74 44 75 70 28 53 72 63  e3SrcListDup(Src
12bf0 4c 69 73 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  List*);.IdList *
12c00 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
12c10 28 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  (IdList*);.Selec
12c20 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
12c30 44 75 70 28 53 65 6c 65 63 74 2a 29 3b 0a 46 75  Dup(Select*);.Fu
12c40 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
12c50 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
12c60 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
12c70 69 6e 74 2c 69 6e 74 2c 75 38 2c 69 6e 74 29 3b  int,int,u8,int);
12c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
12c90 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
12ca0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
12cb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
12cc0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
12cd0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
12ce0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
12cf0 65 74 79 4f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  etyOn(sqlite3*);
12d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
12d10 74 79 4f 66 66 28 73 71 6c 69 74 65 33 2a 29 3b  tyOff(sqlite3*);
12d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
12d30 74 79 43 68 65 63 6b 28 73 71 6c 69 74 65 33 2a  tyCheck(sqlite3*
12d40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
12d50 68 61 6e 67 65 43 6f 6f 6b 69 65 28 73 71 6c 69  hangeCookie(sqli
12d60 74 65 33 2a 2c 20 56 64 62 65 2a 2c 20 69 6e 74  te3*, Vdbe*, int
12d70 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
12d80 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
12d90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
12da0 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
12db0 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
12dc0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
12dd0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 20 20 20 20 69 6e 74 2c 45 78 70 72 2a 2c        int,Expr*,
12e00 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
12e10 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
12e20 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
12e30 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
12e40 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
12e50 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
12e60 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
12e70 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
12e80 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
12e90 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
12ea0 67 67 65 72 2a 29 3b 0a 20 20 69 6e 74 20 73 71  gger*);.  int sq
12eb0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
12ec0 73 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  st(Parse*, Table
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 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
12ef0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
12f00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
12f10 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62  rList*, int, Tab
12f20 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
12f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f40 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
12f50 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
12f60 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
12f70 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
12f80 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
12f90 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
12fa0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
12fb0 67 67 65 72 53 74 65 70 28 54 72 69 67 67 65 72  ggerStep(Trigger
12fc0 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
12fd0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
12fe0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
12ff0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
13000 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
13010 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
13020 70 28 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  p(Token*, IdList
13030 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  *, ExprList*,Sel
13040 65 63 74 2a 2c 69 6e 74 29 3b 0a 20 20 54 72 69  ect*,int);.  Tri
13050 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
13060 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
13070 65 70 28 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  ep(Token*, ExprL
13080 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
13090 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
130a0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
130b0 44 65 6c 65 74 65 53 74 65 70 28 54 6f 6b 65 6e  DeleteStep(Token
130c0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
130d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
130e0 72 69 67 67 65 72 28 54 72 69 67 67 65 72 2a 29  rigger(Trigger*)
130f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
13100 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
13110 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
13120 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
13130 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
13140 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
13150 45 78 69 73 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  Exist(A,B,C,D,E,
13160 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
13170 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
13180 65 72 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  er(A).# define s
13190 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
131a0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
131b0 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
131c0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
131d0 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
131e0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
131f0 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
13200 2c 46 2c 47 2c 48 2c 49 29 20 30 0a 23 65 6e 64  ,F,G,H,I) 0.#end
13210 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
13220 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
13230 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
13240 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
13250 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
13260 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
13270 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
13280 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
13290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
132a0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
132b0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
132c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
132d0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
132e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
132f0 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
13300 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
13310 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
13320 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
13330 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
13340 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
13350 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
13360 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
13370 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
13380 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
13390 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
133a0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
133b0 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
133c0 78 74 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  xt*);.#else.# de
133d0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
133e0 52 65 61 64 28 61 2c 62 2c 63 29 0a 23 20 64 65  Read(a,b,c).# de
133f0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
13400 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
13410 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
13420 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
13430 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
13440 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
13450 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
13460 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
13470 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
13480 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
13490 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
134a0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
134b0 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
134c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
134d0 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46  nt sqlite3BtreeF
134e0 61 63 74 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c  actory(const sql
134f0 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
13500 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
13510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13520 20 20 20 20 20 20 20 20 69 6e 74 20 6f 6d 69 74          int omit
13530 4a 6f 75 72 6e 61 6c 2c 20 69 6e 74 20 6e 43 61  Journal, int nCa
13540 63 68 65 2c 20 42 74 72 65 65 20 2a 2a 70 70 42  che, Btree **ppB
13550 74 72 65 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tree);.int sqlit
13560 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
13570 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
13580 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
13590 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
135a0 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
135b0 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
135c0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
135d0 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
135e0 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
135f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
13600 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
13610 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
13620 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
13630 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
13640 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
13650 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
13660 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
13670 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
13680 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
13690 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 29 3b 0a 63   *z, double*);.c
136a0 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 73 6e 70  har *sqlite3_snp
136b0 72 69 6e 74 66 28 69 6e 74 2c 63 68 61 72 2a 2c  rintf(int,char*,
136c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
136d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
136e0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
136f0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
13700 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
13710 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  ts(const char *)
13720 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 75 74 66  ;.int sqlite3utf
13730 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
13740 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
13750 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
13760 69 74 65 33 75 74 66 38 43 68 61 72 4c 65 6e 28  ite3utf8CharLen(
13770 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
13780 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 69  a, int nByte);.i
13790 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 55 74  nt sqlite3ReadUt
137a0 66 38 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  f8(const unsigne
137b0 64 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  d char *);.int s
137c0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
137d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
137e0 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u64);.int sqlit
137f0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
13800 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
13810 2a 2c 20 75 36 34 20 2a 29 3b 0a 69 6e 74 20 73  *, u64 *);.int s
13820 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
13830 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
13840 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
13850 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
13860 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 76 6f  ntLen(u64 v);.vo
13870 69 64 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  id sqlite3IndexA
13880 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20  ffinityStr(Vdbe 
13890 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69  *, Index *);.voi
138a0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
138b0 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a  finityStr(Vdbe *
138c0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68 61 72  , Table *);.char
138d0 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
138e0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
138f0 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
13900 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
13910 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
13920 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
13930 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
13940 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
13950 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
13960 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 61  r);.int sqlite3a
13970 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
13980 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
13990 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
139a0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
139b0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
139c0 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
139d0 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  lob(const char *
139e0 7a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  z);.int sqlite3T
139f0 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
13a00 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
13a10 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
13a20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
13a30 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
13a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
13a50 55 6e 69 43 68 61 72 28 63 6f 6e 73 74 20 63 68  UniChar(const ch
13a60 61 72 20 2a 7a 53 74 72 2c 20 69 6e 74 20 2a 70  ar *zStr, int *p
13a70 4f 66 66 73 65 74 2c 20 75 38 20 2a 70 45 6e 63  Offset, u8 *pEnc
13a80 2c 20 69 6e 74 20 66 6f 6c 64 29 3b 0a 69 6e 74  , int fold);.int
13a90 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
13aa0 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
13ab0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
13ac0 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
13ad0 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
13ae0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 69 6e 74  const char *,int
13af0 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
13b00 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
13b10 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
13b20 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
13b30 7a 4e 61 6d 65 2c 20 69 6e 74 20 6e 4e 61 6d 65  zName, int nName
13b40 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
13b50 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
13b60 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
13b70 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
13b80 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 65 74   *sqlite3ExprSet
13b90 43 6f 6c 6c 28 50 61 72 73 65 20 2a 70 50 61 72  Coll(Parse *pPar
13ba0 73 65 2c 20 45 78 70 72 20 2a 2c 20 54 6f 6b 65  se, Expr *, Toke
13bb0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
13bc0 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
13bd0 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
13be0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
13bf0 65 63 6b 49 6e 64 65 78 43 6f 6c 6c 53 65 71 28  eckIndexCollSeq(
13c00 50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a  Parse *, Index *
13c10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
13c20 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
13c30 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
13c40 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
13c50 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
13c60 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
13c70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 75 74  ;.void sqlite3ut
13c80 66 31 36 53 75 62 73 74 72 28 73 71 6c 69 74 65  f16Substr(sqlite
13c90 33 5f 63 6f 6e 74 65 78 74 20 2a 2c 69 6e 74 2c  3_context *,int,
13ca0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
13cb0 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
13cc0 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
13cd0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
13ce0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
13cf0 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
13d00 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
13d10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
13d20 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
13d30 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
13d40 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 76  nst void *,u8, v
13d50 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
13d60 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
13d70 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
13d80 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
13d90 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
13da0 75 65 4e 65 77 28 76 6f 69 64 29 3b 0a 63 68 61  ueNew(void);.cha
13db0 72 20 2a 73 71 6c 69 74 65 33 75 74 66 31 36 74  r *sqlite3utf16t
13dc0 6f 38 28 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  o8(const void*, 
13dd0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
13de0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 45  3ValueFromExpr(E
13df0 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
13e00 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
13e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
13e20 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
13e30 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
13e40 2c 20 75 38 2c 20 75 38 29 3b 0a 65 78 74 65 72  , u8, u8);.exter
13e50 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
13e60 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
13e70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 76 6f 69  erToLower[];.voi
13e80 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
13e90 65 4d 6f 76 65 64 28 44 62 2a 2c 20 69 6e 74 2c  eMoved(Db*, int,
13ea0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
13eb0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
13ec0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
13ed0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
13ee0 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 73  AlterFunctions(s
13ef0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
13f00 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
13f10 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
13f20 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
13f30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
13f40 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
13f50 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
13f60 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
13f70 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
13f80 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
13f90 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
13fa0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
13fb0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
13fc0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
13fd0 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
13fe0 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
13ff0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
14000 65 6c 65 63 74 52 65 73 6f 6c 76 65 28 50 61 72  electResolve(Par
14010 73 65 20 2a 2c 20 53 65 6c 65 63 74 20 2a 2c 20  se *, Select *, 
14020 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 29 3b 0a  NameContext *);.
14030 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
14040 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
14050 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 29 3b  , Table *, int);
14060 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
14070 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
14080 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
14090 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
140a0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
140b0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
140c0 63 4c 69 73 74 20 2a 29 3b 0a 63 6f 6e 73 74 20  cList *);.const 
140d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 54 65 73  char *sqlite3Tes
140e0 74 45 72 72 6f 72 4e 61 6d 65 28 69 6e 74 29 3b  tErrorName(int);
140f0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
14100 33 47 65 74 43 6f 6c 6c 53 65 71 28 73 71 6c 69  3GetCollSeq(sqli
14110 74 65 33 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  te3*, CollSeq *,
14120 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
14130 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
14140 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
14150 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nst Token*);.voi
14160 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
14170 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
14180 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
14190 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
141a0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
141b0 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
141c0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
141d0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
141e0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
141f0 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  oad(sqlite3*,int
14200 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69   iDB);.void sqli
14210 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
14220 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
14230 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
14240 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
14250 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
14260 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
14270 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
14280 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
14290 3b 0a 54 68 72 65 61 64 44 61 74 61 20 2a 73 71  ;.ThreadData *sq
142a0 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28  lite3ThreadData(
142b0 76 6f 69 64 29 3b 0a 63 6f 6e 73 74 20 54 68 72  void);.const Thr
142c0 65 61 64 44 61 74 61 20 2a 73 71 6c 69 74 65 33  eadData *sqlite3
142d0 54 68 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e  ThreadDataReadOn
142e0 6c 79 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ly(void);.void s
142f0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72  qlite3ReleaseThr
14300 65 61 64 44 61 74 61 28 76 6f 69 64 29 3b 0a 76  eadData(void);.v
14310 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
14320 68 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  hFunctions(sqlit
14330 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
14340 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f  te3MinimumFileFo
14350 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  rmat(Parse*, int
14360 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
14370 69 74 65 33 53 63 68 65 6d 61 46 72 65 65 28 76  ite3SchemaFree(v
14380 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
14390 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
143a0 28 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73  (Btree *);.int s
143b0 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
143c0 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
143d0 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
143e0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  nfo *sqlite3Inde
143f0 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a  xKeyinfo(Parse *
14400 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20  , Index *);.int 
14410 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
14420 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
14430 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
14440 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
14450 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
14460 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
14470 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
14480 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
14490 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
144a0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
144b0 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
144c0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 29 3b  ite3_context*));
144d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
144e0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
144f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
14500 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 76  e3MallocFailed(v
14510 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
14520 65 33 46 61 69 6c 65 64 4d 61 6c 6c 6f 63 28 76  e3FailedMalloc(v
14530 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
14540 65 33 41 62 6f 72 74 4f 74 68 65 72 41 63 74 69  e3AbortOtherActi
14550 76 65 56 64 62 65 73 28 73 71 6c 69 74 65 33 20  veVdbes(sqlite3 
14560 2a 2c 20 56 64 62 65 20 2a 29 3b 0a 69 6e 74 20  *, Vdbe *);.int 
14570 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
14580 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
14590 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
145a0 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
145b0 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
145c0 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
145d0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ons(sqlite3*);. 
145e0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 6f   int sqlite3Auto
145f0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
14600 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
14610 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
14620 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
14630 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
14640 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
14650 73 69 6f 6e 73 28 58 29 20 20 53 51 4c 49 54 45  sions(X)  SQLITE
14660 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  _OK.#endif..#ifn
14670 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
14680 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
14690 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
146a0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
146b0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
146c0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
146d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
146e0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
146f0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
14700 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
14710 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
14720 69 74 65 33 4d 61 6c 6c 6f 63 44 69 73 61 6c 6c  ite3MallocDisall
14730 6f 77 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  ow(void);.  void
14740 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41 6c   sqlite3MallocAl
14750 6c 6f 77 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  low(void);.  int
14760 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6c 6c   sqlite3TestMall
14770 6f 63 46 61 69 6c 28 76 6f 69 64 29 3b 0a 23 65  ocFail(void);.#e
14780 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
14790 6c 69 74 65 33 54 65 73 74 4d 61 6c 6c 6f 63 46  lite3TestMallocF
147a0 61 69 6c 28 29 20 30 0a 20 20 23 64 65 66 69 6e  ail() 0.  #defin
147b0 65 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 44  e sqlite3MallocD
147c0 69 73 61 6c 6c 6f 77 28 29 0a 20 20 23 64 65 66  isallow().  #def
147d0 69 6e 65 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ine sqlite3Mallo
147e0 63 41 6c 6c 6f 77 28 29 0a 23 65 6e 64 69 66 0a  cAllow().#endif.
147f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
14800 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
14810 41 47 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 2a  AGEMENT.  void *
14820 73 71 6c 69 74 65 33 54 68 72 65 61 64 53 61 66  sqlite3ThreadSaf
14830 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  eMalloc(int);.  
14840 76 6f 69 64 20 73 71 6c 69 74 65 33 54 68 72 65  void sqlite3Thre
14850 61 64 53 61 66 65 46 72 65 65 28 76 6f 69 64 20  adSafeFree(void 
14860 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
14870 69 6e 65 20 73 71 6c 69 74 65 33 54 68 72 65 61  ine sqlite3Threa
14880 64 53 61 66 65 4d 61 6c 6c 6f 63 20 73 71 6c 69  dSafeMalloc sqli
14890 74 65 33 4d 61 6c 6c 6f 63 58 0a 20 20 23 64 65  te3MallocX.  #de
148a0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 68 72 65  fine sqlite3Thre
148b0 61 64 53 61 66 65 46 72 65 65 20 73 71 6c 69 74  adSafeFree sqlit
148c0 65 33 46 72 65 65 58 0a 23 65 6e 64 69 66 0a 0a  e3FreeX.#endif..
148d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
148e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
148f0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
14900 33 56 74 61 62 43 6c 65 61 72 28 58 29 0a 23 20  3VtabClear(X).# 
14910 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
14920 74 61 62 53 79 6e 63 28 58 2c 59 29 20 28 59 29  tabSync(X,Y) (Y)
14930 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
14940 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
14950 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
14960 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
14970 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
14980 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
14990 54 61 62 6c 65 2a 29 3b 0a 20 20 20 69 6e 74 20  Table*);.   int 
149a0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
149b0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
149c0 20 72 63 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   rc);.   int sql
149d0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
149e0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
149f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
14a00 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
14a10 2a 64 62 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  *db);.#endif.voi
14a20 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
14a30 6b 28 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  k(sqlite3_vtab*)
14a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
14a50 61 62 55 6e 6c 6f 63 6b 28 73 71 6c 69 74 65 33  abUnlock(sqlite3
14a60 5f 76 74 61 62 2a 29 3b 0a 76 6f 69 64 20 73 71  _vtab*);.void sq
14a70 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
14a80 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
14a90 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
14aa0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
14ab0 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
14ac0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
14ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
14ae0 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
14af0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
14b00 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
14b10 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
14b20 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
14b30 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
14b40 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
14b50 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
14b60 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
14b70 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
14b80 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
14b90 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
14ba0 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
14bb0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
14bc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
14bd0 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
14be0 20 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62   *, sqlite3_vtab
14bf0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
14c00 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
14c10 64 46 75 6e 63 74 69 6f 6e 28 46 75 6e 63 44 65  dFunction(FuncDe
14c20 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
14c30 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
14c40 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
14c50 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
14c60 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
14c70 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  alue**);.int sql
14c80 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
14c90 62 65 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  be*);..#ifdef SQ
14ca0 4c 49 54 45 5f 53 53 45 0a 23 69 6e 63 6c 75 64  LITE_SSE.#includ
14cb0 65 20 22 73 73 65 49 6e 74 2e 68 22 0a 23 65 6e  e "sseInt.h".#en
14cc0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
14cd0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
14ce0 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
14cf0 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
14d00 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
14d10 65 33 5f 69 6f 5f 74 72 61 63 65 20 69 73 20 61  e3_io_trace is a
14d20 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
14d30 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
14d40 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
14d50 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
14d60 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
14d70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
14d80 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
14d90 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
14da0 66 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 74 72  f( sqlite3_io_tr
14db0 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 5f 69  ace ){ sqlite3_i
14dc0 6f 5f 74 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  o_trace A; }.  v
14dd0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
14de0 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
14df0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
14e00 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65   IOTRACE(A).# de
14e10 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
14e20 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65  IOTraceSql(X).#e
14e30 6e 64 69 66 0a 65 78 74 65 72 6e 20 76 6f 69 64  ndif.extern void
14e40 20 28 2a 73 71 6c 69 74 65 33 5f 69 6f 5f 74 72   (*sqlite3_io_tr
14e50 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
14e60 2c 2e 2e 2e 29 3b 0a 0a 23 65 6e 64 69 66 0a     ,...);..#endif.