/ Hex Artifact Content
Login

Artifact dbe2797806c48f4a90adfea69dfbea95edd722ae:


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 37 37 32 20 32 30 30 38 2f 30 39  ,v 1.772 2008/09
01d0: 2f 31 32 20 31 36 3a 30 33 3a 34 38 20 64 72 68  /12 16:03:48 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 2f 2a 0a 2a 2a 20 49 6e 63  NT_H_../*.** Inc
0220: 6c 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75  lude the configu
0230: 72 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75  ration header ou
0240: 74 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75  tput by 'configu
0250: 72 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69  re' if we're usi
0260: 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f  ng the.** autoco
0270: 6e 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a  nf-based build.*
0280: 2f 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53  /.#ifdef _HAVE_S
0290: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23  QLITE_CONFIG_H.#
02a0: 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e  include "config.
02b0: 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  h".#endif..#incl
02c0: 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74  ude "sqliteLimit
02d0: 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20  .h"../* Disable 
02e0: 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67  nuisance warning
02f0: 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d  s on Borland com
0300: 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65  pilers */.#if de
0310: 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43  fined(__BORLANDC
0320: 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e  __).#pragma warn
0330: 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68   -rch /* unreach
0340: 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72  able code */.#pr
0350: 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f  agma warn -ccc /
0360: 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61  * Condition is a
0370: 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61  lways true or fa
0380: 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  lse */.#pragma w
0390: 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69  arn -aus /* Assi
03a0: 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65  gned value is ne
03b0: 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61  ver used */.#pra
03c0: 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a  gma warn -csu /*
03d0: 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65   Comparing signe
03e0: 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a  d and unsigned *
03f0: 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  /.#pragma warn -
0400: 73 70 61 20 2f 2a 20 53 75 73 70 69 63 6f 75 73  spa /* Suspicous
0410: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
0420: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
0430: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0440: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0450: 2e 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f  ... */.#ifndef _
0460: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66  GNU_SOURCE.# def
0470: 69 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a  ine _GNU_SOURCE.
0480: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
0490: 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68  clude standard h
04a0: 65 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e  eader files as n
04b0: 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64  ecessary.*/.#ifd
04c0: 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ef HAVE_STDINT_H
04d0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e  .#include <stdin
04e0: 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64  t.h>.#endif.#ifd
04f0: 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53  ef HAVE_INTTYPES
0500: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74  _H.#include <int
0510: 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a  types.h>.#endif.
0520: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 75  ./*.** A macro u
0530: 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f  sed to aid in co
0540: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20  verage testing. 
0550: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
0560: 72 61 67 65 0a 2a 2a 20 74 65 73 74 69 6e 67 2c  rage.** testing,
0570: 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69   the condition i
0580: 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65  nside the argume
0590: 6e 74 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75  nt must be evalu
05a0: 61 74 65 64 20 0a 2a 2a 20 62 6f 74 68 20 74 72  ated .** both tr
05b0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
05c0: 6f 72 64 65 72 20 74 6f 20 67 65 74 20 66 75 6c  order to get ful
05d0: 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67  l branch coverag
05e0: 65 2e 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  e..** This macro
05f0: 20 63 61 6e 20 62 65 20 69 6e 73 65 72 74 65 64   can be inserted
0600: 20 74 6f 20 65 6e 73 75 72 65 20 61 64 65 71 75   to ensure adequ
0610: 61 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67  ate test coverag
0620: 65 0a 2a 2a 20 69 6e 20 70 6c 61 63 65 73 20 77  e.** in places w
0630: 68 65 72 65 20 73 69 6d 70 6c 65 20 63 6f 6e 64  here simple cond
0640: 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63  ition/decision c
0650: 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65  overage is inade
0660: 71 75 61 74 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  quate..*/.#ifdef
0670: 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45   SQLITE_COVERAGE
0680: 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
0690: 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74  ite3Coverage(int
06a0: 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  );.# define test
06b0: 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29  case(X)  if( X )
06c0: 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67  { sqlite3Coverag
06d0: 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23  e(__LINE__); }.#
06e0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65  else.# define te
06f0: 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66  stcase(X).#endif
0700: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41  ../*.** The ALWA
0710: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63  YS and NEVER mac
0720: 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f  ros surround boo
0730: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lean expressions
0740: 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69   which .** are i
0750: 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79  ntended to alway
0760: 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c  s be true or fal
0770: 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  se, respectively
0780: 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65  .  Such.** expre
0790: 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20  ssions could be 
07a0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
07b0: 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79   code completely
07c0: 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61  .  But they.** a
07d0: 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61  re included in a
07e0: 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72   few cases in or
07f0: 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74  der to enhance t
0800: 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a  he resilience.**
0810: 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e   of SQLite to un
0820: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
0830: 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20  r - to make the 
0840: 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69  code "self-heali
0850: 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69  ng".** or "ducti
0860: 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20  le" rather than 
0870: 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20  being "brittle" 
0880: 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20  and crashing at 
0890: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e  the first.** hin
08a0: 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62  t of unplanned b
08b0: 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 57  ehavior..**.** W
08c0: 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  hen doing covera
08d0: 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59  ge testing ALWAY
08e0: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
08f0: 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a  hard-coded to.**
0900: 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c   be true and fal
0910: 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75  se so that the u
0920: 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20  nreachable code 
0930: 74 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c  then specify wil
0940: 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e  l.** not be coun
0950: 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20  ted as untested 
0960: 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  code..*/.#ifdef 
0970: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
0980: 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 41 4c  TEST.# define AL
0990: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29  WAYS(X)      (1)
09a0: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
09b0: 58 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c  X)       (0).#el
09c0: 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  se.# define ALWA
09d0: 59 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23  YS(X)      (X).#
09e0: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
09f0: 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69         (X).#endi
0a00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63  f../*.** The mac
0a10: 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73  ro unlikely() is
0a20: 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72   a hint that sur
0a30: 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e  rounds a boolean
0a40: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74  .** expression t
0a50: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66  hat is usually f
0a60: 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b  alse.  Macro lik
0a70: 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a  ely() surrounds.
0a80: 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ** a boolean exp
0a90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
0aa0: 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 47  usually true.  G
0ab0: 43 43 20 69 73 20 61 62 6c 65 20 74 6f 0a 2a 2a  CC is able to.**
0ac0: 20 75 73 65 20 74 68 65 73 65 20 68 69 6e 74 73   use these hints
0ad0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
0ae0: 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d 65 74 69  ter code, someti
0af0: 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  mes..*/.#if defi
0b00: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26  ned(__GNUC__) &&
0b10: 20 30 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65   0.# define like
0b20: 6c 79 28 58 29 20 20 20 20 5f 5f 62 75 69 6c 74  ly(X)    __built
0b30: 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 31 29  in_expect((X),1)
0b40: 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  .# define unlike
0b50: 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c 74 69 6e  ly(X)  __builtin
0b60: 5f 65 78 70 65 63 74 28 28 58 29 2c 30 29 0a 23  _expect((X),0).#
0b70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6c 69  else.# define li
0b80: 6b 65 6c 79 28 58 29 20 20 20 20 21 21 28 58 29  kely(X)    !!(X)
0b90: 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  .# define unlike
0ba0: 6c 79 28 58 29 20 20 21 21 28 58 29 0a 23 65 6e  ly(X)  !!(X).#en
0bb0: 64 69 66 0a 0a 2f 2a 0a 20 2a 20 54 68 69 73 20  dif../*. * This 
0bc0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
0bd0: 20 22 68 69 64 65 22 20 73 6f 6d 65 20 75 67 6c   "hide" some ugl
0be0: 69 6e 65 73 73 20 69 6e 20 63 61 73 74 69 6e 67  iness in casting
0bf0: 20 61 6e 20 69 6e 74 0a 20 2a 20 76 61 6c 75 65   an int. * value
0c00: 20 74 6f 20 61 20 70 74 72 20 76 61 6c 75 65 20   to a ptr value 
0c10: 75 6e 64 65 72 20 74 68 65 20 4d 53 56 43 20 36  under the MSVC 6
0c20: 34 2d 62 69 74 20 63 6f 6d 70 69 6c 65 72 2e 20  4-bit compiler. 
0c30: 20 20 43 61 73 74 69 6e 67 0a 20 2a 20 6e 6f 6e    Casting. * non
0c40: 20 36 34 2d 62 69 74 20 76 61 6c 75 65 73 20 74   64-bit values t
0c50: 6f 20 70 74 72 20 74 79 70 65 73 20 72 65 73 75  o ptr types resu
0c60: 6c 74 73 20 69 6e 20 61 20 22 68 61 72 64 22 20  lts in a "hard" 
0c70: 65 72 72 6f 72 20 77 69 74 68 20 0a 20 2a 20 74  error with . * t
0c80: 68 65 20 4d 53 56 43 20 36 34 2d 62 69 74 20 63  he MSVC 64-bit c
0c90: 6f 6d 70 69 6c 65 72 20 77 68 69 63 68 20 74 68  ompiler which th
0ca0: 69 73 20 61 74 74 65 6d 70 74 73 20 74 6f 20 61  is attempts to a
0cb0: 76 6f 69 64 2e 20 20 0a 20 2a 0a 20 2a 20 41 20  void.  . *. * A 
0cc0: 73 69 6d 70 6c 65 20 63 6f 6d 70 69 6c 65 72 20  simple compiler 
0cd0: 70 72 61 67 6d 61 20 6f 72 20 63 61 73 74 69 6e  pragma or castin
0ce0: 67 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6c 64  g sequence could
0cf0: 20 6e 6f 74 20 62 65 20 66 6f 75 6e 64 0a 20 2a   not be found. *
0d00: 20 74 6f 20 63 6f 72 72 65 63 74 20 74 68 69 73   to correct this
0d10: 20 69 6e 20 61 6c 6c 20 73 69 74 75 61 74 69 6f   in all situatio
0d20: 6e 73 2c 20 73 6f 20 74 68 69 73 20 6d 61 63 72  ns, so this macr
0d30: 6f 20 77 61 73 20 69 6e 74 72 6f 64 75 63 65 64  o was introduced
0d40: 2e 0a 20 2a 0a 20 2a 20 49 74 20 63 6f 75 6c 64  .. *. * It could
0d50: 20 62 65 20 61 72 67 75 65 64 20 74 68 61 74 20   be argued that 
0d60: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
0d70: 65 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64 20  e could be used 
0d80: 69 6e 20 74 68 69 73 0a 20 2a 20 63 61 73 65 2c  in this. * case,
0d90: 20 62 75 74 20 74 68 61 74 20 74 79 70 65 20 69   but that type i
0da0: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
0db0: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
0dc0: 2c 20 6f 72 20 0a 20 2a 20 72 65 71 75 69 72 65  , or . * require
0dd0: 73 20 74 68 65 20 23 69 6e 63 6c 75 64 65 20 6f  s the #include o
0de0: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0df0: 72 73 20 77 68 69 63 68 20 64 69 66 66 65 72 73  rs which differs
0e00: 20 62 65 74 77 65 65 6e 0a 20 2a 20 70 6c 61 74   between. * plat
0e10: 66 6f 72 6d 73 2e 0a 20 2a 2f 0a 23 64 65 66 69  forms.. */.#defi
0e20: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0e30: 5f 50 54 52 28 58 29 20 20 20 28 28 76 6f 69 64  _PTR(X)   ((void
0e40: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0e50: 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
0e60: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0e70: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
0e80: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 0a 2f  X)-(char*)0))../
0e90: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0ea0: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0eb0: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0ec0: 6f 72 74 20 6f 6e 20 50 6f 73 69 78 20 69 66 20  ort on Posix if 
0ed0: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0ee0: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0ef0: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
0f00: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
0f10: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
0f20: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
0f30: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
0f40: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
0f50: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0f60: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0f70: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0f80: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0f90: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0fa0: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0fb0: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0fc0: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0fd0: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0fe0: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0ff0: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
1000: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
1010: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
1020: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
1030: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
1040: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
1050: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
1060: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
1070: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
1080: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
1090: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
10a0: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
10b0: 69 6e 65 20 28 65 78 3a 20 52 65 64 48 61 74 20  ine (ex: RedHat 
10c0: 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e  7.2) but you wan
10d0: 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77  t your code to w
10e0: 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64  ork.** on an old
10f0: 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20  er machine (ex: 
1100: 52 65 64 48 61 74 20 36 2e 30 29 2e 20 20 49 66  RedHat 6.0).  If
1110: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
1120: 52 65 64 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69  RedHat 7.2.** wi
1130: 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69 6f  thout this optio
1140: 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c 65  n, LFS is enable
1150: 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73 20  .  But LFS does 
1160: 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  not exist in the
1170: 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65   kernel.** in Re
1180: 64 48 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65  dHat 6.0, so the
1190: 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b   code won't work
11a0: 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61  .  Hence, for ma
11b0: 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20  ximum binary.** 
11c0: 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20  portability you 
11d0: 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e  should omit LFS.
11e0: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
11f0: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 4f 53  s true for MacOS
1200: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
1210: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 4f  upported on MacO
1220: 53 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  S 9 and later..*
1230: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1240: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
1250: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
1260: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
1270: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
1280: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
1290: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
12a0: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
12b0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
12c0: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
12d0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  .../*.** The SQL
12e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d  ITE_THREADSAFE m
12f0: 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66  acro must be def
1300: 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30  ined as either 0
1310: 20 6f 72 20 31 2e 0a 2a 2a 20 4f 6c 64 65 72 20   or 1..** Older 
1320: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1330: 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f  te used an optio
1340: 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d  nal THREADSAFE m
1350: 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70  acro..** We supp
1360: 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67  ort that for leg
1370: 61 63 79 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  acy.*/.#if !defi
1380: 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41  ned(SQLITE_THREA
1390: 44 53 41 46 45 29 0a 23 69 66 20 64 65 66 69 6e  DSAFE).#if defin
13a0: 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23  ed(THREADSAFE).#
13b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
13c0: 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44  HREADSAFE THREAD
13d0: 53 41 46 45 0a 23 65 6c 73 65 0a 23 20 64 65 66  SAFE.#else.# def
13e0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
13f0: 44 53 41 46 45 20 31 0a 23 65 6e 64 69 66 0a 23  DSAFE 1.#endif.#
1400: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1410: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1420: 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f 20  MEMSTATUS macro 
1430: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
1440: 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  as either 0 or 1
1450: 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69 6e  ..** It determin
1460: 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
1470: 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20 72  t the features r
1480: 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53 51  elated to .** SQ
1490: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53  LITE_CONFIG_MEMS
14a0: 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c 61  TATUS are availa
14b0: 62 65 20 62 79 20 64 65 66 61 75 6c 74 20 6f 72  be by default or
14c0: 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c 75 65   not. This value
14d0: 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72   can.** be overr
14e0: 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69 6d 65  idden at runtime
14f0: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
1500: 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50 49 2e  e3_config() API.
1510: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1520: 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1530: 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66  MEMSTATUS).# def
1540: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
1550: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23  LT_MEMSTATUS 1.#
1560: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61  endif../*.** Exa
1570: 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  ctly one of the 
1580: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1590: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
15a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
15b0: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65  specify which me
15c0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
15d0: 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65  subsystem to use
15e0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ..**.**     SQLI
15f0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1600: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1610: 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d   normal system m
1620: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53  alloc().**     S
1630: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1650: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
1660: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
1670: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
1680: 54 45 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 20 20  TE_MEMORY_SIZE  
1690: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 6e 74            // int
16a0: 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 6f 72 20  ernal allocator 
16b0: 23 31 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  #1.**     SQLITE
16c0: 5f 4d 4d 41 50 5f 48 45 41 50 5f 53 49 5a 45 20  _MMAP_HEAP_SIZE 
16d0: 20 20 20 20 20 20 20 20 2f 2f 20 69 6e 74 65 72          // inter
16e0: 6e 61 6c 20 6d 6d 61 70 28 29 20 61 6c 6c 6f 63  nal mmap() alloc
16f0: 61 74 6f 72 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ator.**     SQLI
1700: 54 45 5f 50 4f 57 32 5f 4d 45 4d 4f 52 59 5f 53  TE_POW2_MEMORY_S
1710: 49 5a 45 20 20 20 20 20 20 20 2f 2f 20 69 6e 74  IZE       // int
1720: 65 72 6e 61 6c 20 70 6f 77 65 72 2d 6f 66 2d 74  ernal power-of-t
1730: 77 6f 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 0a  wo allocator.**.
1740: 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ** If none of th
1750: 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69  e above are defi
1760: 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51  ned, then set SQ
1770: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1780: 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66  OC as.** the def
1790: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ault..*/.#if def
17a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
17b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 2b 64 65 66 69 6e  EM_MALLOC)+defin
17c0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
17d0: 55 47 29 2b 5c 0a 20 20 20 20 64 65 66 69 6e 65  UG)+\.    define
17e0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 4f 52 59 5f  d(SQLITE_MEMORY_
17f0: 53 49 5a 45 29 2b 64 65 66 69 6e 65 64 28 53 51  SIZE)+defined(SQ
1800: 4c 49 54 45 5f 4d 4d 41 50 5f 48 45 41 50 5f 53  LITE_MMAP_HEAP_S
1810: 49 5a 45 29 2b 5c 0a 20 20 20 20 64 65 66 69 6e  IZE)+\.    defin
1820: 65 64 28 53 51 4c 49 54 45 5f 50 4f 57 32 5f 4d  ed(SQLITE_POW2_M
1830: 45 4d 4f 52 59 5f 53 49 5a 45 29 3e 31 0a 23 20  EMORY_SIZE)>1.# 
1840: 65 72 72 6f 72 20 22 41 74 20 6d 6f 73 74 20 6f  error "At most o
1850: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1860: 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ing compile-time
1870: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
1880: 70 74 69 6f 6e 73 5c 0a 20 69 73 20 61 6c 6c 6f  ptions\. is allo
1890: 77 73 3a 20 53 51 4c 49 54 45 5f 53 59 53 54 45  ws: SQLITE_SYSTE
18a0: 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  M_MALLOC, SQLITE
18b0: 5f 4d 45 4d 44 45 42 55 47 2c 20 53 51 4c 49 54  _MEMDEBUG, SQLIT
18c0: 45 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 2c 5c 0a  E_MEMORY_SIZE,\.
18d0: 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 48 45 41   SQLITE_MMAP_HEA
18e0: 50 5f 53 49 5a 45 2c 20 53 51 4c 49 54 45 5f 50  P_SIZE, SQLITE_P
18f0: 4f 57 32 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 22  OW2_MEMORY_SIZE"
1900: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1910: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1920: 4d 5f 4d 41 4c 4c 4f 43 29 2b 64 65 66 69 6e 65  M_MALLOC)+define
1930: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
1940: 47 29 2b 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  G)+\.    defined
1950: 28 53 51 4c 49 54 45 5f 4d 45 4d 4f 52 59 5f 53  (SQLITE_MEMORY_S
1960: 49 5a 45 29 2b 64 65 66 69 6e 65 64 28 53 51 4c  IZE)+defined(SQL
1970: 49 54 45 5f 4d 4d 41 50 5f 48 45 41 50 5f 53 49  ITE_MMAP_HEAP_SI
1980: 5a 45 29 2b 5c 0a 20 20 20 20 64 65 66 69 6e 65  ZE)+\.    define
1990: 64 28 53 51 4c 49 54 45 5f 50 4f 57 32 5f 4d 45  d(SQLITE_POW2_ME
19a0: 4d 4f 52 59 5f 53 49 5a 45 29 3d 3d 30 0a 23 20  MORY_SIZE)==0.# 
19b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59  define SQLITE_SY
19c0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65  STEM_MALLOC 1.#e
19d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53  ndif../*.** If S
19e0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
19f0: 54 5f 4c 49 4d 49 54 20 69 73 20 64 65 66 69 6e  T_LIMIT is defin
1a00: 65 64 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ed, then try to 
1a10: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
1a20: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
1a30: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
1a40: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
1a50: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
1a60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 50  defined(SQLITE_P
1a70: 4f 57 32 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 29  OW2_MEMORY_SIZE)
1a80: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1a90: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1aa0: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
1ab0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
1ac0: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
1ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
1ae0: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
1af0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
1b00: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
1b10: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
1b20: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
1b30: 6e 20 6d 6f 73 74 20 75 6e 69 78 20 73 79 73 74  n most unix syst
1b40: 65 6d 73 2e 20 20 42 75 74 20 4d 61 63 20 4f 53  ems.  But Mac OS
1b50: 20 58 20 69 73 20 64 69 66 66 65 72 65 6e 74 2e   X is different.
1b60: 0a 2a 2a 20 54 68 65 20 5f 58 4f 50 45 4e 5f 53  .** The _XOPEN_S
1b70: 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61 75  OURCE define cau
1b80: 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72  ses problems for
1b90: 20 4d 61 63 20 4f 53 20 58 20 77 65 20 61 72 65   Mac OS X we are
1ba0: 20 74 6f 6c 64 2c 0a 2a 2a 20 73 6f 20 69 74 20   told,.** so it 
1bb0: 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72 65  is omitted there
1bc0: 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 23 32  .  See ticket #2
1bd0: 36 37 33 2e 0a 2a 2a 0a 2a 2a 20 4c 61 74 65 72  673..**.** Later
1be0: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 5f   we learn that _
1bf0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 69 73 20  XOPEN_SOURCE is 
1c00: 70 6f 6f 72 6c 79 20 6f 72 20 69 6e 63 6f 72 72  poorly or incorr
1c10: 65 63 74 6c 79 0a 2a 2a 20 69 6d 70 6c 65 6d 65  ectly.** impleme
1c20: 6e 74 65 64 20 6f 6e 20 73 6f 6d 65 20 73 79 73  nted on some sys
1c30: 74 65 6d 73 2e 20 20 53 6f 20 77 65 20 61 76 6f  tems.  So we avo
1c40: 69 64 20 64 65 66 69 6e 69 6e 67 20 69 74 20 61  id defining it a
1c50: 74 20 61 6c 6c 0a 2a 2a 20 69 66 20 69 74 20 69  t all.** if it i
1c60: 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e 65  s already define
1c70: 64 20 6f 72 20 69 66 20 69 74 20 69 73 20 75 6e  d or if it is un
1c80: 6e 65 65 64 65 64 20 62 65 63 61 75 73 65 20 77  needed because w
1c90: 65 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 64 6f 69  e are.** not doi
1ca0: 6e 67 20 61 20 74 68 72 65 61 64 73 61 66 65 20  ng a threadsafe 
1cb0: 62 75 69 6c 64 2e 20 20 54 69 63 6b 65 74 20 23  build.  Ticket #
1cc0: 32 36 38 31 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  2681..**.** See 
1cd0: 61 6c 73 6f 20 74 69 63 6b 65 74 20 23 32 37 34  also ticket #274
1ce0: 31 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  1..*/.#if !defin
1cf0: 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ed(_XOPEN_SOURCE
1d00: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f  ) && !defined(__
1d10: 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65  DARWIN__) && !de
1d20: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
1d30: 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41   && SQLITE_THREA
1d40: 44 53 41 46 45 0a 23 20 20 64 65 66 69 6e 65 20  DSAFE.#  define 
1d50: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 35 30  _XOPEN_SOURCE 50
1d60: 30 20 20 2f 2a 20 4e 65 65 64 65 64 20 74 6f 20  0  /* Needed to 
1d70: 65 6e 61 62 6c 65 20 70 74 68 72 65 61 64 20 72  enable pthread r
1d80: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
1d90: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
1da0: 2a 20 54 68 65 20 54 43 4c 20 68 65 61 64 65 72  * The TCL header
1db0: 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65 65 64 65  s are only neede
1dc0: 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67  d when compiling
1dd0: 20 74 68 65 20 54 43 4c 20 62 69 6e 64 69 6e 67   the TCL binding
1de0: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
1df0: 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c 7c  d(SQLITE_TCL) ||
1e00: 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29 0a   defined(TCLSH).
1e10: 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e 68  # include <tcl.h
1e20: 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
1e30: 4d 61 6e 79 20 70 65 6f 70 6c 65 20 61 72 65 20  Many people are 
1e40: 66 61 69 6c 69 6e 67 20 74 6f 20 73 65 74 20 2d  failing to set -
1e50: 44 4e 44 45 42 55 47 3d 31 20 77 68 65 6e 20 63  DNDEBUG=1 when c
1e60: 6f 6d 70 69 6c 69 6e 67 20 53 51 4c 69 74 65 2e  ompiling SQLite.
1e70: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
1e80: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
1e90: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 72 75  e smaller and ru
1ea0: 6e 20 66 61 73 74 65 72 2e 20 20 53 6f 20 74 68  n faster.  So th
1eb0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6c  e following.** l
1ec0: 69 6e 65 73 20 61 72 65 20 61 64 64 65 64 20 74  ines are added t
1ed0: 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
1ee0: 73 65 74 20 4e 44 45 42 55 47 20 75 6e 6c 65 73  set NDEBUG unles
1ef0: 73 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  s the -DSQLITE_D
1f00: 45 42 55 47 3d 31 0a 2a 2a 20 6f 70 74 69 6f 6e  EBUG=1.** option
1f10: 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e   is set.  Thus N
1f20: 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e  DEBUG becomes an
1f30: 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74   opt-in rather t
1f40: 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a  han an opt-out.*
1f50: 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69  * feature..*/.#i
1f60: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
1f70: 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  G) && !defined(S
1f80: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20  QLITE_DEBUG) .# 
1f90: 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a  define NDEBUG 1.
1fa0: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
1fb0: 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e   "sqlite3.h".#in
1fc0: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
1fd0: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
1fe0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
1ff0: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
2000: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
2010: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
2020: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
2030: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
2040: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
2050: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
2060: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
2070: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
2080: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
2090: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
20a0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
20b0: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
20c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
20d0: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
20e0: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
20f0: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
2100: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
2110: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
2120: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
2130: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
2140: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
2150: 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
2160: 66 66 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  ff).# endif.# de
2170: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2180: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
2190: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
21a0: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
21b0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
21c0: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
21d0: 5f 46 4c 4f 41 54 0a 23 65 6e 64 69 66 0a 23 69  _FLOAT.#endif.#i
21e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
21f0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
2200: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
2210: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
2220: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
2230: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
2240: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
2250: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
2260: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
2270: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
2280: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
2290: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
22a0: 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63  er .** to omit c
22b0: 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50  ode used by TEMP
22c0: 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20   tables without 
22d0: 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74  messy #ifndef st
22e0: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66  atements..*/.#if
22f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2300: 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f  TEMPDB.#define O
2310: 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c  MIT_TEMPDB 1.#el
2320: 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  se.#define OMIT_
2330: 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a  TEMPDB 0.#endif.
2340: 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f  ./*.** If the fo
2350: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
2360: 20 73 65 74 20 74 6f 20 31 2c 20 74 68 65 6e 20   set to 1, then 
2370: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
2380: 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 64 69  considered.** di
2390: 73 74 69 6e 63 74 20 77 68 65 6e 20 64 65 74 65  stinct when dete
23a0: 72 6d 69 6e 69 6e 67 20 77 68 65 74 68 65 72 20  rmining whether 
23b0: 6f 72 20 6e 6f 74 20 74 77 6f 20 65 6e 74 72 69  or not two entri
23c0: 65 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 0a  es are the same.
23d0: 2a 2a 20 69 6e 20 61 20 55 4e 49 51 55 45 20 69  ** in a UNIQUE i
23e0: 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 74  ndex.  This is t
23f0: 68 65 20 77 61 79 20 50 6f 73 74 67 72 65 53 51  he way PostgreSQ
2400: 4c 2c 20 4f 72 61 63 6c 65 2c 20 44 42 32 2c 20  L, Oracle, DB2, 
2410: 4d 79 53 51 4c 2c 0a 2a 2a 20 4f 43 45 4c 4f 54  MySQL,.** OCELOT
2420: 2c 20 61 6e 64 20 46 69 72 65 62 69 72 64 20 61  , and Firebird a
2430: 6c 6c 20 77 6f 72 6b 2e 20 20 54 68 65 20 53 51  ll work.  The SQ
2440: 4c 39 32 20 73 70 65 63 20 65 78 70 6c 69 63 69  L92 spec explici
2450: 74 6c 79 20 73 61 79 73 20 74 68 69 73 0a 2a 2a  tly says this.**
2460: 20 69 73 20 74 68 65 20 77 61 79 20 74 68 69 6e   is the way thin
2470: 67 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74  gs are suppose t
2480: 6f 20 77 6f 72 6b 2e 0a 2a 2a 0a 2a 2a 20 49 66  o work..**.** If
2490: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
24a0: 61 63 72 6f 20 69 73 20 73 65 74 20 74 6f 20 30  acro is set to 0
24b0: 2c 20 74 68 65 20 4e 55 4c 4c 73 20 61 72 65 20  , the NULLs are 
24c0: 69 6e 64 69 73 74 69 6e 63 74 20 66 6f 72 0a 2a  indistinct for.*
24d0: 2a 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  * a UNIQUE index
24e0: 2e 20 20 49 6e 20 74 68 69 73 20 6d 6f 64 65 2c  .  In this mode,
24f0: 20 79 6f 75 20 63 61 6e 20 6f 6e 6c 79 20 68 61   you can only ha
2500: 76 65 20 61 20 73 69 6e 67 6c 65 20 4e 55 4c 4c  ve a single NULL
2510: 20 65 6e 74 72 79 0a 2a 2a 20 66 6f 72 20 61 20   entry.** for a 
2520: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 65 64 20  column declared 
2530: 55 4e 49 51 55 45 2e 20 20 54 68 69 73 20 69 73  UNIQUE.  This is
2540: 20 74 68 65 20 77 61 79 20 49 6e 66 6f 72 6d 69   the way Informi
2550: 78 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72  x and SQL Server
2560: 0a 2a 2a 20 77 6f 72 6b 2e 0a 2a 2f 0a 23 64 65  .** work..*/.#de
2570: 66 69 6e 65 20 4e 55 4c 4c 5f 44 49 53 54 49 4e  fine NULL_DISTIN
2580: 43 54 5f 46 4f 52 5f 55 4e 49 51 55 45 20 31 0a  CT_FOR_UNIQUE 1.
2590: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65  ./*.** The "file
25a0: 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20   format" number 
25b0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
25c0: 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  at is incremente
25d0: 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68  d whenever.** th
25e0: 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c  e VDBE-level fil
25f0: 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73  e format changes
2600: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
2610: 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74   macros define t
2620: 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c  he.** the defaul
2630: 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f  t file format fo
2640: 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  r new databases 
2650: 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  and the maximum 
2660: 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74  file format.** t
2670: 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20  hat the library 
2680: 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65  can read..*/.#de
2690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
26a0: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69  FILE_FORMAT 4.#i
26b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
26c0: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
26d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26e0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
26f0: 52 4d 41 54 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RMAT 1.#endif../
2700: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
2710: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
2720: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
2730: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
2740: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
2750: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
2760: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
2770: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
2780: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
2790: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
27a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43  #endif../*.** GC
27b0: 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  C does not defin
27c0: 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29  e the offsetof()
27d0: 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20   macro so we'll 
27e0: 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a  have to do it.**
27f0: 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23   ourselves..*/.#
2800: 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a  ifndef offsetof.
2810: 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66  #define offsetof
2820: 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44  (STRUCTURE,FIELD
2830: 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29  ) ((int)((char*)
2840: 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29  &((STRUCTURE*)0)
2850: 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66  ->FIELD)).#endif
2860: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
2870: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
2880: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
2890: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
28a0: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
28b0: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
28c0: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
28d0: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
28e0: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
28f0: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
2900: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
2910: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
2920: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
2930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
2940: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
2950: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
2960: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
2970: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
2980: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
2990: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
29a0: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
29b0: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
29c0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
29d0: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
29e0: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
29f0: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
2a00: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
2a10: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
2a20: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
2a30: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
2a40: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
2a50: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
2a60: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
2a70: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
2a80: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
2a90: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
2aa0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
2ab0: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
2ac0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
2ad0: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
2ae0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
2af0: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
2b00: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
2b10: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
2b20: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
2b30: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
2b40: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
2b50: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
2b60: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
2b70: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
2b80: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
2b90: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
2ba0: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
2bb0: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
2bc0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
2bd0: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
2be0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
2bf0: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
2c00: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
2c10: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
2c20: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
2c30: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
2c40: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
2c50: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
2c60: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
2c70: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
2c80: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
2c90: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
2ca0: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
2cb0: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
2cc0: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
2cd0: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
2ce0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
2cf0: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
2d00: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
2d10: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
2d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
2d30: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
2d40: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
2d50: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
2d60: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
2d70: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
2d80: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
2d90: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
2da0: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
2db0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
2dc0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
2dd0: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
2de0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
2df0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
2e00: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
2e10: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
2e20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
2e30: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
2e40: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
2e50: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
2e60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
2e70: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
2e80: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
2e90: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
2ea0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
2eb0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
2ec0: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ger */../*.** Ma
2ed0: 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
2ee0: 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61  e whether the ma
2ef0: 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20  chine is big or 
2f00: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a  little endian,.*
2f10: 2a 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72  * evaluated at r
2f20: 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65  untime..*/.#ifde
2f30: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2f40: 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20  ATION.const int 
2f50: 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6c 73  sqlite3one;.#els
2f60: 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69  e.extern const i
2f70: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23  nt sqlite3one;.#
2f80: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2f90: 64 28 69 33 38 36 29 20 7c 7c 20 64 65 66 69 6e  d(i386) || defin
2fa0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20  ed(__i386__) || 
2fb0: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
2fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2fd0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
2fe0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2ff0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
3000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
3010: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
3020: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73 65  TE_UTF16LE.#else
3030: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3040: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
3050: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
3060: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
3070: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
3080: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
3090: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
30a0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
30b0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 28  TE_UTF16NATIVE (
30c0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
30d0: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
30e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
30f0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
3100: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
3110: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
3120: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
3130: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
3140: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
3150: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
3160: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
3170: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
3180: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
3190: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
31a0: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
31b0: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
31c0: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
31d0: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
31e0: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
31f0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
3200: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
3210: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
3220: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
3230: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
3240: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
3250: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
3260: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
3270: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
3280: 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65  ndle. .**.** The
3290: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
32a0: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
32b0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
32c0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
32d0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
32e0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
32f0: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
3300: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
3310: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
3320: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
3330: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
3340: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
3350: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
3360: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
3370: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
3380: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
3390: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
33a0: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
33b0: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
33c0: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
33d0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
33e0: 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69  *xFunc)(void *,i
33f0: 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73  nt);  /* The bus
3400: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
3410: 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20  void *pArg;     
3420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
3430: 72 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20  rst arg to busy 
3440: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
3450: 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20  t nBusy;        
3460: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
3470: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
3480: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d  h busy call */.}
3490: 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66  ;../*.** Name of
34a0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
34b0: 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65  base table.  The
34c0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
34d0: 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73   table.** is a s
34e0: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61  pecial table tha
34f0: 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
3500: 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73  s and attributes
3510: 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20   of all.** user 
3520: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
3530: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
3540: 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20  ASTER_NAME      
3550: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
3560: 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41  .#define TEMP_MA
3570: 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69  STER_NAME  "sqli
3580: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a  te_temp_master".
3590: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d  ./*.** The root-
35a0: 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74  page of the mast
35b0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
35c0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  e..*/.#define MA
35d0: 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20  STER_ROOT       
35e0: 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d  1../*.** The nam
35f0: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  e of the schema 
3600: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
3610: 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78  e SCHEMA_TABLE(x
3620: 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44  )  ((!OMIT_TEMPD
3630: 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f  B)&&(x==1)?TEMP_
3640: 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54  MASTER_NAME:MAST
3650: 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20  ER_NAME)../*.** 
3660: 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61  A convenience ma
3670: 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73  cro that returns
3680: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
3690: 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e  lements in.** an
36a0: 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69   array..*/.#defi
36b0: 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20  ne ArraySize(X) 
36c0: 20 20 20 28 73 69 7a 65 6f 66 28 58 29 2f 73 69     (sizeof(X)/si
36d0: 7a 65 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a  zeof(X[0]))../*.
36e0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
36f0: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
3700: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
3710: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
3720: 65 28 29 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  e()..** This is 
3730: 61 6e 20 69 6e 74 65 72 6e 61 6c 20 65 78 74 65  an internal exte
3740: 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 49 54 45 5f  nsion to SQLITE_
3750: 53 54 41 54 49 43 20 61 6e 64 20 53 51 4c 49 54  STATIC and SQLIT
3760: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
3770: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
3780: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
3790: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
37a0: 70 65 29 73 71 6c 69 74 65 33 44 62 46 72 65 65  pe)sqlite3DbFree
37b0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
37c0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
37d0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
37e0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
37f0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
3800: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
3810: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
3820: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
3830: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
3840: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
3850: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
3860: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
3870: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
3880: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
3890: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
38a0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
38b0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
38c0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
38d0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
38e0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
38f0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
3900: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
3910: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
3920: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
3930: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
3940: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
3950: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
3960: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
3970: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
3980: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
3990: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
39a0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
39b0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
39c0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
39d0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
39e0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
39f0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
3a00: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
3a10: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
3a20: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
3a30: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
3a40: 49 6e 20 74 68 65 20 75 73 75 61 6c 6c 79 20 63  In the usually c
3a50: 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73  ase where WSD is
3a60: 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20   supported, the 
3a70: 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47  SQLITE_WSD and G
3a80: 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20  LOBAL.** macros 
3a90: 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e  become no-ops an
3aa0: 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66  d have zero perf
3ab0: 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a  ormance impact..
3ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3ad0: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66  _OMIT_WSD.  #def
3ae0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63  ine SQLITE_WSD c
3af0: 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47  onst.  #define G
3b00: 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a  LOBAL(t,v) (*(t*
3b10: 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  )sqlite3_wsd_fin
3b20: 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73  d((void*)&(v), s
3b30: 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65  izeof(v))).  #de
3b40: 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62  fine sqlite3Glob
3b50: 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28  alConfig GLOBAL(
3b60: 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
3b70: 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e  nfig, sqlite3Con
3b80: 66 69 67 29 0a 23 65 6c 73 65 0a 20 20 23 64 65  fig).#else.  #de
3b90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
3ba0: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
3bb0: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
3bc0: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
3bd0: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
3be0: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
3bf0: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
3c00: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
3c10: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
3c20: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
3c30: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
3c40: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
3c50: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
3c60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
3c70: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
3c80: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
3c90: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
3ca0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
3cb0: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
3cc0: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
3cd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
3ce0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
3cf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
3d00: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
3d10: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
3d20: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
3d30: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
3d40: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
3d50: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
3d60: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
3d70: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
3d80: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
3d90: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
3da0: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
3db0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
3dc0: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
3dd0: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
3de0: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
3df0: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
3e00: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
3e10: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
3e20: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
3e30: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
3e40: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
3e50: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
3e60: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
3e70: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
3e80: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
3e90: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
3ea0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
3eb0: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
3ec0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
3ed0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
3ee0: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
3ef0: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
3f00: 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d   struct StrAccum
3f10: 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64   StrAccum;.typed
3f20: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
3f30: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
3f40: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
3f50: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
3f60: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
3f70: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
3f80: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 61  truct TriggerSta
3f90: 63 6b 20 54 72 69 67 67 65 72 53 74 61 63 6b 3b  ck TriggerStack;
3fa0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
3fb0: 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67  TriggerStep Trig
3fc0: 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66  gerStep;.typedef
3fd0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
3fe0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
3ff0: 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64   struct Unpacked
4000: 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52  Record UnpackedR
4010: 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73  ecord;.typedef s
4020: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
4030: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
4040: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
4050: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
4060: 20 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76   struct WhereLev
4070: 65 6c 20 57 68 65 72 65 4c 65 76 65 6c 3b 0a 0a  el WhereLevel;..
4080: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
4090: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
40a0: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
40b0: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
40c0: 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65   .** "BusyHandle
40d0: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
40e0: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
40f0: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
4100: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
4110: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
4120: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
4130: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
4140: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
4150: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
4160: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
4170: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
4180: 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f  .h"..#include "o
4190: 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d  s.h".#include "m
41a0: 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20  utex.h".../*.** 
41b0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
41c0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
41d0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
41e0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
41f0: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
4200: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
4210: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
4220: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
4230: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
4240: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
4250: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
4260: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
4270: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
4280: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
4290: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
42a0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
42b0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
42c0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
42d0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
42e0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
42f0: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  Db {.  char *zNa
4300: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
4310: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
4320: 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20  base */.  Btree 
4330: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
4340: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
4350: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
4360: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
4370: 0a 20 20 75 38 20 69 6e 54 72 61 6e 73 3b 20 20  .  u8 inTrans;  
4380: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f          /* 0: no
4390: 74 20 77 72 69 74 61 62 6c 65 2e 20 20 31 3a 20  t writable.  1: 
43a0: 54 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 32 3a  Transaction.  2:
43b0: 20 43 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20   Checkpoint */. 
43c0: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
43d0: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
43e0: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 68  ressive at synch
43f0: 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b  ing data to disk
4400: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
4410: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4420: 2f 2a 20 41 75 78 69 6c 69 61 72 79 20 64 61 74  /* Auxiliary dat
4430: 61 2e 20 20 55 73 75 61 6c 6c 79 20 4e 55 4c 4c  a.  Usually NULL
4440: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 72   */.  void (*xFr
4450: 65 65 41 75 78 29 28 76 6f 69 64 2a 29 3b 20 20  eeAux)(void*);  
4460: 2f 2a 20 52 6f 75 74 69 6e 65 20 74 6f 20 66 72  /* Routine to fr
4470: 65 65 20 70 41 75 78 20 2a 2f 0a 20 20 53 63 68  ee pAux */.  Sch
4480: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
4490: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
44a0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
44b0: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
44c0: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
44d0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
44e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
44f0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
4500: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
4510: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
4520: 72 65 20 6e 6f 20 76 69 72 74 75 61 6c 20 74 61  re no virtual ta
4530: 62 6c 65 73 20 63 6f 6e 66 69 67 75 72 65 64 20  bles configured 
4540: 69 6e 20 74 68 69 73 20 73 63 68 65 6d 61 2c 20  in this schema, 
4550: 74 68 65 0a 2a 2a 20 53 63 68 65 6d 61 2e 64 62  the.** Schema.db
4560: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
4570: 20 74 6f 20 4e 55 4c 4c 2e 20 41 66 74 65 72 20   to NULL. After 
4580: 74 68 65 20 66 69 72 73 74 20 76 69 72 74 75 61  the first virtua
4590: 6c 20 74 61 62 6c 65 0a 2a 2a 20 68 61 73 20 62  l table.** has b
45a0: 65 65 6e 20 61 64 64 65 64 2c 20 69 74 20 69 73  een added, it is
45b0: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
45c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
45d0: 6e 6e 65 63 74 69 6f 6e 20 0a 2a 2a 20 75 73 65  nnection .** use
45e0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
45f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 4f 6e 63 65  connection. Once
4600: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
4610: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 61 64 64   has been.** add
4620: 65 64 20 74 6f 20 74 68 65 20 53 63 68 65 6d 61  ed to the Schema
4630: 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 74   structure and t
4640: 68 65 20 53 63 68 65 6d 61 2e 64 62 20 76 61 72  he Schema.db var
4650: 69 61 62 6c 65 20 70 6f 70 75 6c 61 74 65 64 2c  iable populated,
4660: 20 0a 2a 2a 20 6f 6e 6c 79 20 74 68 61 74 20 64   .** only that d
4670: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4680: 6f 6e 20 6d 61 79 20 75 73 65 20 74 68 65 20 53  on may use the S
4690: 63 68 65 6d 61 20 74 6f 20 70 72 65 70 61 72 65  chema to prepare
46a0: 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 2e   .** statements.
46b0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
46c0: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
46d0: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
46e0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
46f0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
4700: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
4710: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
4720: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
4730: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
4740: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
4750: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
4760: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
4770: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
4780: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
4790: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
47a0: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
47b0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
47c0: 0a 20 20 48 61 73 68 20 61 46 4b 65 79 3b 20 20  .  Hash aFKey;  
47d0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
47e0: 67 6e 20 6b 65 79 73 20 69 6e 64 65 78 65 64 20  gn keys indexed 
47f0: 62 79 20 74 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  by to-table */. 
4800: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
4810: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
4820: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
4830: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
4840: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
4850: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
4860: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
4870: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
4880: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
4890: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
48a0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
48b0: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
48c0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
48d0: 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
48e0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
48f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
4900: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
4910: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
4920: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4930: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
4940: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 23 69   the cache */.#i
4950: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4960: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
4970: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
4980: 20 20 20 20 20 20 2f 2a 20 22 4f 77 6e 65 72 22        /* "Owner"
4990: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 53 65 65   connection. See
49a0: 20 63 6f 6d 6d 65 6e 74 20 61 62 6f 76 65 20 2a   comment above *
49b0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
49c0: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
49d0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
49e0: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
49f0: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
4a00: 2a 2a 20 44 62 2e 66 6c 61 67 73 20 66 69 65 6c  ** Db.flags fiel
4a10: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62  d..*/.#define Db
4a20: 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  HasProperty(D,I,
4a30: 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44  P)     (((D)->aD
4a40: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
4a50: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
4a60: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
4a70: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
4a80: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
4a90: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29  chema->flags&(P)
4aa0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
4ab0: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
4ac0: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
4ad0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
4ae0: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
4af0: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
4b00: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
4b10: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
4b20: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
4b30: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
4b40: 6f 72 20 74 68 65 20 44 42 2e 66 6c 61 67 73 20  or the DB.flags 
4b50: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
4b60: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
4b70: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
4b80: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
4b90: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
4ba0: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
4bb0: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
4bc0: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
4bd0: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
4be0: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
4bf0: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
4c00: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
4c10: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
4c20: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
4c30: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
4c40: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
4c50: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
4c60: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
4c70: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
4c80: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
4c90: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
4ca0: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
4cb0: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
4cc0: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
4cd0: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
4ce0: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
4cf0: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
4d00: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
4d10: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
4d20: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
4d30: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
4d40: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
4d50: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
4d60: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
4d70: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
4d80: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
4d90: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
4da0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
4db0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
4dc0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
4dd0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
4de0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
4df0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52  SQLITE_LIMIT_VAR
4e00: 49 41 42 4c 45 5f 4e 55 4d 42 45 52 2b 31 29 0a  IABLE_NUMBER+1).
4e10: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
4e20: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
4e30: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
4e40: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
4e50: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
4e60: 74 69 73 69 66 79 20 73 6d 61 6c 6c 20 74 72 61  tisify small tra
4e70: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
4e80: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
4e90: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
4ea0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
4eb0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
4ec0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4ed0: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
4ee0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
4ef0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
4f00: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
4f10: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
4f20: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
4f30: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
4f40: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
4f50: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
4f60: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
4f70: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
4f80: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
4f90: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
4fa0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
4fb0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
4fc0: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
4fd0: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
4fe0: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
4ff0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
5000: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
5010: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
5020: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
5030: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
5040: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
5050: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ** objects..*/.s
5060: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
5070: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
5080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
5090: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
50a0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
50b0: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
50c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
50d0: 20 69 66 20 75 73 65 20 6c 6f 6f 6b 61 73 69 64   if use lookasid
50e0: 65 2e 20 20 46 61 6c 73 65 20 74 6f 20 69 67 6e  e.  False to ign
50f0: 6f 72 65 20 69 74 20 2a 2f 0a 20 20 75 38 20 62  ore it */.  u8 b
5100: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
5110: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
5120: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
5130: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
5140: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
5150: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
5160: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
5170: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
5180: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
5190: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
51a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
51b0: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
51c0: 6e 4f 75 74 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  nOut */.  Lookas
51d0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
51e0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
51f0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
5200: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
5210: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
5220: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
5230: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
5240: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
5250: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
5260: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
5270: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
5280: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
5290: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
52a0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
52b0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
52c0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
52d0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
52e0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
52f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
5300: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
5310: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
5320: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
5330: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
5340: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
5350: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
5360: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
5370: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
5380: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
5390: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
53a0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
53b0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
53c0: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
53d0: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
53e0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
53f0: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
5400: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
5410: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5420: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
5430: 20 54 68 65 20 73 71 6c 69 74 65 2e 6c 61 73 74   The sqlite.last
5440: 52 6f 77 69 64 20 72 65 63 6f 72 64 73 20 74 68  Rowid records th
5450: 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f  e last insert ro
5460: 77 69 64 20 67 65 6e 65 72 61 74 65 64 20 62 79  wid generated by
5470: 20 61 6e 0a 2a 2a 20 69 6e 73 65 72 74 20 73 74   an.** insert st
5480: 61 74 65 6d 65 6e 74 2e 20 20 49 6e 73 65 72 74  atement.  Insert
5490: 73 20 6f 6e 20 76 69 65 77 73 20 64 6f 20 6e 6f  s on views do no
54a0: 74 20 61 66 66 65 63 74 20 69 74 73 20 76 61 6c  t affect its val
54b0: 75 65 2e 20 20 45 61 63 68 0a 2a 2a 20 74 72 69  ue.  Each.** tri
54c0: 67 67 65 72 20 68 61 73 20 69 74 73 20 6f 77 6e  gger has its own
54d0: 20 63 6f 6e 74 65 78 74 2c 20 73 6f 20 74 68 61   context, so tha
54e0: 74 20 6c 61 73 74 52 6f 77 69 64 20 63 61 6e 20  t lastRowid can 
54f0: 62 65 20 75 70 64 61 74 65 64 20 69 6e 73 69 64  be updated insid
5500: 65 0a 2a 2a 20 74 72 69 67 67 65 72 73 20 61 73  e.** triggers as
5510: 20 75 73 75 61 6c 2e 20 20 54 68 65 20 70 72 65   usual.  The pre
5520: 76 69 6f 75 73 20 76 61 6c 75 65 20 77 69 6c 6c  vious value will
5530: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 63   be restored onc
5540: 65 20 74 68 65 20 74 72 69 67 67 65 72 0a 2a 2a  e the trigger.**
5550: 20 65 78 69 74 73 2e 20 20 55 70 6f 6e 20 65 6e   exits.  Upon en
5560: 74 65 72 69 6e 67 20 61 20 62 65 66 6f 72 65 20  tering a before 
5570: 6f 72 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72  or instead of tr
5580: 69 67 67 65 72 2c 20 6c 61 73 74 52 6f 77 69 64  igger, lastRowid
5590: 20 69 73 20 6e 6f 0a 2a 2a 20 6c 6f 6e 67 65 72   is no.** longer
55a0: 20 28 73 69 6e 63 65 20 61 66 74 65 72 20 76 65   (since after ve
55b0: 72 73 69 6f 6e 20 32 2e 38 2e 31 32 29 20 72 65  rsion 2.8.12) re
55c0: 73 65 74 20 74 6f 20 2d 31 2e 0a 2a 2a 0a 2a 2a  set to -1..**.**
55d0: 20 54 68 65 20 73 71 6c 69 74 65 2e 6e 43 68 61   The sqlite.nCha
55e0: 6e 67 65 20 64 6f 65 73 20 6e 6f 74 20 63 6f 75  nge does not cou
55f0: 6e 74 20 63 68 61 6e 67 65 73 20 77 69 74 68 69  nt changes withi
5600: 6e 20 74 72 69 67 67 65 72 73 20 61 6e 64 20 6b  n triggers and k
5610: 65 65 70 73 20 6e 6f 0a 2a 2a 20 63 6f 6e 74 65  eeps no.** conte
5620: 78 74 2e 20 20 49 74 20 69 73 20 72 65 73 65 74  xt.  It is reset
5630: 20 61 74 20 73 74 61 72 74 20 6f 66 20 73 71 6c   at start of sql
5640: 69 74 65 33 5f 65 78 65 63 2e 0a 2a 2a 20 54 68  ite3_exec..** Th
5650: 65 20 73 71 6c 69 74 65 2e 6c 73 43 68 61 6e 67  e sqlite.lsChang
5660: 65 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  e represents the
5670: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
5680: 65 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 6c  es made by the l
5690: 61 73 74 0a 2a 2a 20 69 6e 73 65 72 74 2c 20 75  ast.** insert, u
56a0: 70 64 61 74 65 2c 20 6f 72 20 64 65 6c 65 74 65  pdate, or delete
56b0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 74 20   statement.  It 
56c0: 72 65 6d 61 69 6e 73 20 63 6f 6e 73 74 61 6e 74  remains constant
56d0: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 0a   throughout the.
56e0: 2a 2a 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73  ** length of a s
56f0: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 69 73 20  tatement and is 
5700: 74 68 65 6e 20 75 70 64 61 74 65 64 20 62 79 20  then updated by 
5710: 4f 50 5f 53 65 74 43 6f 75 6e 74 73 2e 20 20 49  OP_SetCounts.  I
5720: 74 20 6b 65 65 70 73 20 61 0a 2a 2a 20 63 6f 6e  t keeps a.** con
5730: 74 65 78 74 20 73 74 61 63 6b 20 6a 75 73 74 20  text stack just 
5740: 6c 69 6b 65 20 6c 61 73 74 52 6f 77 69 64 20 73  like lastRowid s
5750: 6f 20 74 68 61 74 20 74 68 65 20 63 6f 75 6e 74  o that the count
5760: 20 6f 66 20 63 68 61 6e 67 65 73 0a 2a 2a 20 77   of changes.** w
5770: 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 20  ithin a trigger 
5780: 69 73 20 6e 6f 74 20 73 65 65 6e 20 6f 75 74 73  is not seen outs
5790: 69 64 65 20 74 68 65 20 74 72 69 67 67 65 72 2e  ide the trigger.
57a0: 20 20 43 68 61 6e 67 65 73 20 74 6f 20 76 69 65    Changes to vie
57b0: 77 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 61 66 66  ws do not.** aff
57c0: 65 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ect the value of
57d0: 20 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 20 54 68   lsChange..** Th
57e0: 65 20 73 71 6c 69 74 65 2e 63 73 43 68 61 6e 67  e sqlite.csChang
57f0: 65 20 6b 65 65 70 73 20 74 72 61 63 6b 20 6f 66  e keeps track of
5800: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
5810: 75 72 72 65 6e 74 20 63 68 61 6e 67 65 73 20 28  urrent changes (
5820: 73 69 6e 63 65 0a 2a 2a 20 74 68 65 20 6c 61 73  since.** the las
5830: 74 20 73 74 61 74 65 6d 65 6e 74 29 20 61 6e 64  t statement) and
5840: 20 69 73 20 75 73 65 64 20 74 6f 20 75 70 64 61   is used to upda
5850: 74 65 20 73 71 6c 69 74 65 5f 6c 73 43 68 61 6e  te sqlite_lsChan
5860: 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ge..**.** The me
5870: 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 73  mber variables s
5880: 71 6c 69 74 65 2e 65 72 72 43 6f 64 65 2c 20 73  qlite.errCode, s
5890: 71 6c 69 74 65 2e 7a 45 72 72 4d 73 67 20 61 6e  qlite.zErrMsg an
58a0: 64 20 73 71 6c 69 74 65 2e 7a 45 72 72 4d 73 67  d sqlite.zErrMsg
58b0: 31 36 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  16.** store the 
58c0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  most recent erro
58d0: 72 20 63 6f 64 65 20 61 6e 64 2c 20 69 66 20 61  r code and, if a
58e0: 70 70 6c 69 63 61 62 6c 65 2c 20 73 74 72 69 6e  pplicable, strin
58f0: 67 2e 20 54 68 65 0a 2a 2a 20 69 6e 74 65 72 6e  g. The.** intern
5900: 61 6c 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  al function sqli
5910: 74 65 33 45 72 72 6f 72 28 29 20 69 73 20 75 73  te3Error() is us
5920: 65 64 20 74 6f 20 73 65 74 20 74 68 65 73 65 20  ed to set these 
5930: 76 61 72 69 61 62 6c 65 73 0a 2a 2a 20 63 6f 6e  variables.** con
5940: 73 69 73 74 65 6e 74 6c 79 2e 0a 2a 2f 0a 73 74  sistently..*/.st
5950: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
5960: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
5970: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
5980: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
5990: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
59c0: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
59d0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 44 62  y in use */.  Db
59e0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
5a00: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
5a10: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
5a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5a30: 2a 20 4d 69 73 63 65 6c 6c 61 6e 6f 75 73 20 66  * Miscellanous f
5a40: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
5a50: 2a 2f 0a 20 20 69 6e 74 20 6f 70 65 6e 46 6c 61  */.  int openFla
5a60: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
5a70: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
5a80: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
5a90: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
5aa0: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5ac0: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
5ad0: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
5ae0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
5af0: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
5b00: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
5b10: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
5b20: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
5b30: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
5b40: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
5b50: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
5b60: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
5b70: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
5b80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5b90: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
5ba0: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
5bb0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
5bc0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
5bd0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
5be0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
5bf0: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
5c00: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
5c10: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
5c20: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
5c30: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
5c40: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 75 38  ched dbs */.  u8
5c50: 20 64 66 6c 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65   dfltJournalMode
5c60: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
5c70: 65 66 61 75 6c 74 20 6a 6f 75 72 6e 61 6c 20 6d  efault journal m
5c80: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
5c90: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
5ca0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
5cb0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
5cc0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
5cd0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
5ce0: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
5cf0: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
5d00: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
5d10: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
5d20: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65   */.  int nTable
5d30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5d40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
5d50: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
5d60: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 43 6f 6c  atabase */.  Col
5d70: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
5d80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
5d90: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
5da0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
5db0: 4e 41 52 59 29 20 2a 2f 0a 20 20 69 36 34 20 6c  NARY) */.  i64 l
5dc0: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
5dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
5de0: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
5df0: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
5e00: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 70 72 69  ve) */.  i64 pri
5e10: 6f 72 4e 65 77 52 6f 77 69 64 3b 20 20 20 20 20  orNewRowid;     
5e20: 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 72         /* Last r
5e30: 61 6e 64 6f 6d 6c 79 20 67 65 6e 65 72 61 74 65  andomly generate
5e40: 64 20 52 4f 57 49 44 20 2a 2f 0a 20 20 69 6e 74  d ROWID */.  int
5e50: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
5e60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
5e70: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
5e80: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
5e90: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
5ea0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
5eb0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
5ec0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
5ed0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
5ee0: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
5ef0: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
5f00: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
5f10: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
5f20: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
5f30: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
5f40: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
5f50: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
5f60: 6d 75 74 65 78 20 2a 2f 0a 20 20 69 6e 74 20 61  mutex */.  int a
5f70: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
5f80: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
5f90: 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ts */.  struct s
5fa0: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
5fb0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
5fc0: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
5fd0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
5fe0: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 62 3b 20  */.    int iDb; 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6000: 20 20 20 2f 2a 20 57 68 65 6e 20 62 61 63 6b 20     /* When back 
6010: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
6020: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ized */.    int 
6030: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
6040: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
6050: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
6060: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
6070: 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20  /.    u8 busy;  
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6090: 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72    /* TRUE if cur
60a0: 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a  rently initializ
60b0: 69 6e 67 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ing */.  } init;
60c0: 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f  .  int nExtensio
60d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
60e0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
60f0: 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20  aded extensions 
6100: 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74  */.  void **aExt
6110: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
6120: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73     /* Array of s
6130: 68 61 72 65 64 20 6c 69 62 72 61 72 61 79 20 68  hared libraray h
6140: 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 73 74 72 75  andles */.  stru
6150: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
6160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
6170: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
6180: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
6190: 20 20 69 6e 74 20 61 63 74 69 76 65 56 64 62 65    int activeVdbe
61a0: 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cnt;            
61b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 64 62  /* Number of vdb
61c0: 65 73 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  es currently exe
61d0: 63 75 74 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  cuting */.  void
61e0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
61f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
6200: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
6210: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
6220: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
6230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6240: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
6250: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
6260: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
6270: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
6280: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
6290: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
62a0: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
62b0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
62c0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
62e0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
62f0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
6300: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
6310: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
6320: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
6330: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
6340: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
6350: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
6360: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
6370: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
6380: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
6390: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
63a0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
63b0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
63c0: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
63d0: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69  ck() */   .  voi
63e0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
63f0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
6400: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
6410: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
6420: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
6430: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
6440: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
6450: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
6460: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
6470: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 20 20  qlite_int64);.  
6480: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
6490: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
64a0: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
64b0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
64c0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
64d0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
64e0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
64f0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
6500: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
6510: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
6520: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
6530: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
6540: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
6550: 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  ge */.  char *zE
6560: 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20  rrMsg;          
6570: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
6580: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
6590: 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64 65  ge (UTF-8 encode
65a0: 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  d) */.  char *zE
65b0: 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20 20  rrMsg16;        
65c0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
65d0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
65e0: 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f 64  ge (UTF-16 encod
65f0: 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ed) */.  union {
6600: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
6610: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
6620: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
6630: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
6640: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
6650: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
6660: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
6670: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
6680: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
6690: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
66a0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
66b0: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
66c0: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
66d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
66e0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
66f0: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
6700: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
6710: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
6720: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
6730: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6750: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
6760: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
6770: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
6780: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
6790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
67a0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
67b0: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
67c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
67d0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
67e0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
67f0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
6800: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
6810: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
6820: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6830: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
6840: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
6850: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
6860: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
6870: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
6880: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
6890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
68a0: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
68b0: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
68c0: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
68d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
68e0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
68f0: 45 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  E.  Hash aModule
6900: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6910: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
6920: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
6930: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 54  _module() */.  T
6940: 61 62 6c 65 20 2a 70 56 54 61 62 3b 20 20 20 20  able *pVTab;    
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6960: 76 74 61 62 20 77 69 74 68 20 61 63 74 69 76 65  vtab with active
6970: 20 43 6f 6e 6e 65 63 74 2f 43 72 65 61 74 65 20   Connect/Create 
6980: 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 73 71 6c 69  method */.  sqli
6990: 74 65 33 5f 76 74 61 62 20 2a 2a 61 56 54 72 61  te3_vtab **aVTra
69a0: 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 56 69 72  ns;       /* Vir
69b0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
69c0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
69d0: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 54 72  ns */.  int nVTr
69e0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
69f0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
6a00: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
6a10: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  ns */.#endif.  F
6a20: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
6a30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
6a40: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
6a50: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
6a60: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
6a70: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
6a80: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
6a90: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
6aa0: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
6ab0: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
6ac0: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
6ad0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 62 75  back */.  int bu
6ae0: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
6af0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
6b00: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
6b10: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 44 62   in msec */.  Db
6b20: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
6b40: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
6b50: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
6b60: 63 6b 65 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  ckends */.#ifdef
6b70: 20 53 51 4c 49 54 45 5f 53 53 45 0a 20 20 73 71   SQLITE_SSE.  sq
6b80: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 65 74  lite3_stmt *pFet
6b90: 63 68 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 55  ch;         /* U
6ba0: 73 65 64 20 62 79 20 53 53 45 20 74 6f 20 66 65  sed by SSE to fe
6bb0: 74 63 68 20 73 74 6f 72 65 64 20 73 74 61 74 65  tch stored state
6bc0: 6d 65 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  ments */.#endif.
6bd0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
6be0: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
6bf0: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
6c00: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
6c10: 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28 28 64  fine ENC(db) ((d
6c20: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
6c30: 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  ma->enc)../*.** 
6c40: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
6c50: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 66  for the sqlite.f
6c60: 6c 61 67 73 20 61 6e 64 20 6f 72 20 44 62 2e 66  lags and or Db.f
6c70: 6c 61 67 73 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  lags fields..**.
6c80: 2a 2a 20 4f 6e 20 73 71 6c 69 74 65 2e 66 6c 61  ** On sqlite.fla
6c90: 67 73 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49  gs, the SQLITE_I
6ca0: 6e 54 72 61 6e 73 20 76 61 6c 75 65 20 6d 65 61  nTrans value mea
6cb0: 6e 73 20 74 68 61 74 20 77 65 20 68 61 76 65 0a  ns that we have.
6cc0: 2a 2a 20 65 78 65 63 75 74 65 64 20 61 20 42 45  ** executed a BE
6cd0: 47 49 4e 2e 20 20 4f 6e 20 44 62 2e 66 6c 61 67  GIN.  On Db.flag
6ce0: 73 2c 20 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e  s, SQLITE_InTran
6cf0: 73 20 6d 65 61 6e 73 20 61 20 73 74 61 74 65 6d  s means a statem
6d00: 65 6e 74 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ent.** transacti
6d10: 6f 6e 20 69 73 20 61 63 74 69 76 65 20 6f 6e 20  on is active on 
6d20: 74 68 61 74 20 70 61 72 74 69 63 75 6c 61 72 20  that particular 
6d30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
6d40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6d50: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
6d60: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
6d70: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
6d80: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
6d90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
6da0: 54 72 61 6e 73 20 20 20 20 20 20 20 20 30 78 30  Trans        0x0
6db0: 30 30 30 30 30 30 38 20 20 2f 2a 20 54 72 75 65  0000008  /* True
6dc0: 20 69 66 20 69 6e 20 61 20 74 72 61 6e 73 61 63   if in a transac
6dd0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
6de0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
6df0: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 31 30  nges  0x00000010
6e00: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
6e10: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
6e20: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
6e30: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
6e40: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
6e50: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
6e60: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
6e70: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
6e80: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
6e90: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
6ea0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
6eb0: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
6ec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
6ed0: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
6ee0: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
6ef0: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
6f00: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f30: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
6f40: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
6f50: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f80: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
6f90: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
6fa0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
6fb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
6fc0: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
6fd0: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
6fe0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
6ff0: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7020: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
7030: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
7040: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
7050: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
7060: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
7070: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
7080: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
7090: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
70a0: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
70b0: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
70c0: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
70d0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
70e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
70f0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
7100: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
7110: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
7120: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
7130: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61  ine SQLITE_NoRea
7140: 64 6c 6f 63 6b 20 20 20 20 20 30 78 30 30 30 30  dlock     0x0000
7150: 31 30 30 30 20 20 2f 2a 20 52 65 61 64 6c 6f 63  1000  /* Readloc
7160: 6b 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 77  ks are omitted w
7170: 68 65 6e 20 0a 20 20 20 20 20 20 20 20 20 20 20  hen .           
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
71a0: 2a 20 61 63 63 65 73 73 69 6e 67 20 72 65 61 64  * accessing read
71b0: 2d 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 73 20  -only databases 
71c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
71d0: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
71e0: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
71f0: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
7200: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
7210: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
7220: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
7230: 65 64 20 30 78 30 30 30 30 34 30 30 30 20 2f 2a  ed 0x00004000 /*
7240: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
7250: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
7260: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
7270: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
7280: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
7290: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
72a0: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
72b0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
72c0: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 31 30  ync      0x00010
72d0: 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  000  /* Use full
72e0: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
72f0: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
7300: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
7310: 6e 73 69 6f 6e 20 20 30 78 30 30 30 32 30 30 30  nsion  0x0002000
7320: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
7330: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 0a  d_extension */..
7340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
7350: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
7360: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 49 67 6e  00040000  /* Ign
7370: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
7380: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
7390: 49 54 45 5f 53 68 61 72 65 64 43 61 63 68 65 20  ITE_SharedCache 
73a0: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
73b0: 2a 20 43 61 63 68 65 20 73 68 61 72 69 6e 67 20  * Cache sharing 
73c0: 69 73 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 23 64  is enabled */.#d
73d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 74 61  efine SQLITE_Vta
73e0: 62 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  b           0x00
73f0: 31 30 30 30 30 30 20 20 2f 2a 20 54 68 65 72 65  100000  /* There
7400: 20 65 78 69 73 74 73 20 61 20 76 69 72 74 75 61   exists a virtua
7410: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
7420: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
7430: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
7440: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
7450: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
7460: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
7470: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
7480: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
7490: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
74a0: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
74b0: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
74c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
74d0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
74e0: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
74f0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
7500: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
7510: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
7520: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
7530: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
7540: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
7550: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
7560: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
7570: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
7580: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
7590: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
75a0: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
75b0: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
75c0: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
75d0: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
75e0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
75f0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
7600: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
7610: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
7620: 63 75 72 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  curred */../*.**
7630: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
7640: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
7650: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
7660: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
7670: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
7680: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
7690: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
76a0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
76b0: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
76c0: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
76d0: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
76e0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
76f0: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
7700: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
7710: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
7720: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
7730: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
7740: 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b  Def {.  i8 nArg;
7750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7760: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
7770: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
7780: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38  nlimited */.  u8
7790: 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20   iPrefEnc;      
77a0: 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20     /* Preferred 
77b0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53  text encoding (S
77c0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45  QLITE_UTF8, 16LE
77d0: 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20  , 16BE) */.  u8 
77e0: 6e 65 65 64 43 6f 6c 6c 53 65 71 3b 20 20 20 20  needCollSeq;    
77f0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c    /* True if sql
7800: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
7810: 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61  eq() might be ca
7820: 6c 6c 65 64 20 2a 2f 0a 20 20 75 38 20 66 6c 61  lled */.  u8 fla
7830: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  gs;            /
7840: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
7850: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
7860: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
7870: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
7880: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
7890: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
78a0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
78b0: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
78c0: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
78d0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  /.  void (*xFunc
78e0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
78f0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
7900: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75  alue**); /* Regu
7910: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  lar function */.
7920: 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28    void (*xStep)(
7930: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
7940: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
7950: 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67  ue**); /* Aggreg
7960: 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f  ate step */.  vo
7970: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
7980: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
7990: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
79a0: 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
79b0: 69 6e 69 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  inializer */.  c
79c0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
79d0: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
79e0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
79f0: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
7a00: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
7a10: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
7a20: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
7a30: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 7d 3b   same hash */.};
7a40: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
7a50: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
7a60: 44 65 66 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65  Def.flags.*/.#de
7a70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
7a80: 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 31 20 20  _LIKE     0x01  
7a90: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
7aa0: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
7ab0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
7ac0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
7ad0: 53 45 20 20 20 20 20 30 78 30 32 20 20 2f 2a 20  SE     0x02  /* 
7ae0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
7af0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
7b00: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
7b10: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
7b20: 20 20 30 78 30 34 20 20 2f 2a 20 45 70 68 65 72    0x04  /* Epher
7b30: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
7b40: 69 74 68 20 56 44 42 45 20 2a 2f 0a 0a 2f 2a 0a  ith VDBE */../*.
7b50: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
7b60: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
7b70: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
7b80: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
7b90: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
7ba0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
7bb0: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
7bc0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
7bd0: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
7be0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
7bf0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
7c00: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
7c10: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
7c20: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
7c30: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
7c40: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
7c50: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
7c60: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
7c70: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
7c80: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
7c90: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
7ca0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
7cb0: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
7cc0: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
7cd0: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
7ce0: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
7cf0: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
7d00: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
7d10: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20  he function. If 
7d20: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
7d30: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
7d40: 65 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 6e  en the FuncDef.n
7d50: 65 65 64 43 6f 6c 6c 61 74 65 20 66 6c 61 67 20  eedCollate flag 
7d60: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
7d70: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
7d80: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
7d90: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
7da0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
7db0: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
7dc0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
7dd0: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
7de0: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
7df0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
7e00: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
7e10: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
7e20: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
7e30: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
7e40: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
7e50: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
7e60: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
7e70: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
7e80: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
7e90: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
7ea0: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
7eb0: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
7ec0: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
7ed0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
7ee0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
7ef0: 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  me .**     that 
7f00: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
7f10: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
7f20: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
7f30: 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20  all to C .**    
7f40: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
7f50: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
7f60: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
7f70: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
7f80: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
7f90: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
7fa0: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
7fb0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
7fc0: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
7fd0: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
7fe0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
7ff0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
8000: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
8010: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
8020: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
8030: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
8040: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
8050: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
8060: 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2c 20 30  ITE_UTF8, bNC, 0
8070: 2c 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  , SQLITE_INT_TO_
8080: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
8090: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
80a0: 65 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46  e}.#define LIKEF
80b0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
80c0: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
80d0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
80e0: 54 46 38 2c 20 30 2c 20 66 6c 61 67 73 2c 20 28  TF8, 0, flags, (
80f0: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
8100: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  ikeFunc, 0, 0, #
8110: 7a 4e 61 6d 65 7d 0a 23 64 65 66 69 6e 65 20 41  zName}.#define A
8120: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
8130: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
8140: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
8150: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
8160: 55 54 46 38 2c 20 6e 63 2c 20 30 2c 20 53 51 4c  UTF8, nc, 0, SQL
8170: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
8180: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
8190: 2c 78 46 69 6e 61 6c 2c 20 23 7a 4e 61 6d 65 7d  ,xFinal, #zName}
81a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
81b0: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
81c0: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
81d0: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
81e0: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
81f0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
8200: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
8210: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
8220: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
8230: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
8240: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
8250: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
8260: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
8270: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
8280: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
8290: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
82a0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
82b0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
82c0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
82d0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
82e0: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8300: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
8310: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
8320: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
8330: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
8340: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
8350: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
8360: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
8370: 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
8380: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
8390: 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
83a0: 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
83b0: 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
83c0: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
83d0: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
83e0: 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
83f0: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
8400: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
8410: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
8420: 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
8430: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
8440: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
8450: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
8460: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
8470: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
8480: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
8490: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
84a0: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
84b0: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
84c0: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
84d0: 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
84e0: 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
84f0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
8500: 20 2a 2f 0a 20 20 75 38 20 69 73 50 72 69 6d 4b   */.  u8 isPrimK
8510: 65 79 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ey;    /* True i
8520: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69 73  f this column is
8530: 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49   part of the PRI
8540: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 63 68  MARY KEY */.  ch
8550: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
8560: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
8570: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
8580: 65 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  es */.#ifndef SQ
8590: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
85a0: 4c 54 41 42 4c 45 0a 20 20 75 38 20 69 73 48 69  LTABLE.  u8 isHi
85b0: 64 64 65 6e 3b 20 20 20 20 20 2f 2a 20 54 72 75  dden;     /* Tru
85c0: 65 20 69 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e if this column
85d0: 20 69 73 20 27 68 69 64 64 65 6e 27 20 2a 2f 0a   is 'hidden' */.
85e0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
85f0: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
8600: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
8610: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
8620: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
8630: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
8640: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
8650: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
8660: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
8670: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
8680: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
8690: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
86a0: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
86b0: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
86c0: 2a 20 54 68 65 72 65 20 6d 61 79 20 74 77 6f 20  * There may two 
86d0: 73 65 70 65 72 61 74 65 20 69 6d 70 6c 65 6d 65  seperate impleme
86e0: 6e 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  ntations of the 
86f0: 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69  collation functi
8700: 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20 74 68 61 74 20  on, one.** that 
8710: 70 72 6f 63 65 73 73 65 73 20 74 65 78 74 20 69  processes text i
8720: 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  n UTF-8 encoding
8730: 20 28 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 29 20   (CollSeq.xCmp) 
8740: 61 6e 64 20 61 6e 6f 74 68 65 72 20 74 68 61 74  and another that
8750: 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 74 65  .** processes te
8760: 78 74 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  xt encoded in UT
8770: 46 2d 31 36 20 28 43 6f 6c 6c 53 65 71 2e 78 43  F-16 (CollSeq.xC
8780: 6d 70 31 36 29 2c 20 75 73 69 6e 67 20 74 68 65  mp16), using the
8790: 20 6d 61 63 68 69 6e 65 0a 2a 2a 20 6e 61 74 69   machine.** nati
87a0: 76 65 20 62 79 74 65 20 6f 72 64 65 72 2e 20 57  ve byte order. W
87b0: 68 65 6e 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  hen a collation 
87c0: 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 76 6f  sequence is invo
87d0: 6b 65 64 2c 20 53 51 4c 69 74 65 20 73 65 6c 65  ked, SQLite sele
87e0: 63 74 73 0a 2a 2a 20 74 68 65 20 76 65 72 73 69  cts.** the versi
87f0: 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 72 65 71  on that will req
8800: 75 69 72 65 20 74 68 65 20 6c 65 61 73 74 20 65  uire the least e
8810: 78 70 65 6e 73 69 76 65 20 65 6e 63 6f 64 69 6e  xpensive encodin
8820: 67 0a 2a 2a 20 74 72 61 6e 73 6c 61 74 69 6f 6e  g.** translation
8830: 73 2c 20 69 66 20 61 6e 79 2e 0a 2a 2a 0a 2a 2a  s, if any..**.**
8840: 20 54 68 65 20 43 6f 6c 6c 53 65 71 2e 70 55 73   The CollSeq.pUs
8850: 65 72 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  er member variab
8860: 6c 65 20 69 73 20 61 6e 20 65 78 74 72 61 20 70  le is an extra p
8870: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 70 61  arameter that pa
8880: 73 73 65 64 20 69 6e 0a 2a 2a 20 61 73 20 74 68  ssed in.** as th
8890: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
88a0: 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 63 6f   to the UTF-8 co
88b0: 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
88c0: 6e 2c 20 78 43 6d 70 2e 0a 2a 2a 20 43 6f 6c 6c  n, xCmp..** Coll
88d0: 53 65 71 2e 70 55 73 65 72 31 36 20 69 73 20 74  Seq.pUser16 is t
88e0: 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 66 6f  he equivalent fo
88f0: 72 20 74 68 65 20 55 54 46 2d 31 36 20 63 6f 6d  r the UTF-16 com
8900: 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
8910: 2c 0a 2a 2a 20 78 43 6d 70 31 36 2e 0a 2a 2a 0a  ,.** xCmp16..**.
8920: 2a 2a 20 49 66 20 62 6f 74 68 20 43 6f 6c 6c 53  ** If both CollS
8930: 65 71 2e 78 43 6d 70 20 61 6e 64 20 43 6f 6c 6c  eq.xCmp and Coll
8940: 53 65 71 2e 78 43 6d 70 31 36 20 61 72 65 20 4e  Seq.xCmp16 are N
8950: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
8960: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
8970: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
8980: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
8990: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
89a0: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
89b0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
89c0: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
89d0: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
89e0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
89f0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
8a00: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
8a10: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
8a20: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
8a30: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
8a40: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
8a50: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
8a60: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
8a70: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 75 38 20 74  xCmp() */.  u8 t
8a80: 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ype;            
8a90: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
8aa0: 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 2e 2e 2e 20  SQLITE_COLL_... 
8ab0: 76 61 6c 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  values below */.
8ac0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
8ad0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
8ae0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
8af0: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
8b00: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
8b10: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
8b20: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
8b30: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
8b40: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
8b50: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
8b60: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
8b70: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 43  owed values of C
8b80: 6f 6c 6c 53 65 71 2e 74 79 70 65 3a 0a 2a 2f 0a  ollSeq.type:.*/.
8b90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
8ba0: 4f 4c 4c 5f 42 49 4e 41 52 59 20 20 31 20 20 2f  OLL_BINARY  1  /
8bb0: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 65  * The default me
8bc0: 6d 63 6d 70 28 29 20 63 6f 6c 6c 61 74 69 6e 67  mcmp() collating
8bd0: 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65   sequence */.#de
8be0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c  fine SQLITE_COLL
8bf0: 5f 4e 4f 43 41 53 45 20 20 32 20 20 2f 2a 20 54  _NOCASE  2  /* T
8c00: 68 65 20 62 75 69 6c 74 2d 69 6e 20 4e 4f 43 41  he built-in NOCA
8c10: 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  SE collating seq
8c20: 75 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65  uence */.#define
8c30: 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 52 45 56   SQLITE_COLL_REV
8c40: 45 52 53 45 20 33 20 20 2f 2a 20 54 68 65 20 62  ERSE 3  /* The b
8c50: 75 69 6c 74 2d 69 6e 20 52 45 56 45 52 53 45 20  uilt-in REVERSE 
8c60: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
8c70: 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ce */.#define SQ
8c80: 4c 49 54 45 5f 43 4f 4c 4c 5f 55 53 45 52 20 20  LITE_COLL_USER  
8c90: 20 20 30 20 20 2f 2a 20 41 6e 79 20 6f 74 68 65    0  /* Any othe
8ca0: 72 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 63  r user-defined c
8cb0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
8cc0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  e */../*.** A so
8cd0: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
8ce0: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
8cf0: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
8d00: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
8d10: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
8d20: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
8d30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8d40: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
8d50: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
8d60: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
8d70: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
8d80: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
8d90: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
8da0: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
8db0: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
8dc0: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
8dd0: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
8de0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
8df0: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
8e00: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
8e10: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
8e20: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
8e30: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
8e40: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
8e50: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
8e60: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
8e70: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
8e80: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
8e90: 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68  in with 'a'.  Th
8ea0: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
8eb0: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
8ec0: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
8ed0: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
8ee0: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
8ef0: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
8f00: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
8f10: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
8f20: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
8f30: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
8f40: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
8f50: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
8f60: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
8f70: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
8f80: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
8f90: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23  comparison..*/.#
8fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
8fb0: 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23  F_TEXT     'a'.#
8fc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
8fd0: 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23  F_NONE     'b'.#
8fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
8ff0: 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23  F_NUMERIC  'c'.#
9000: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
9010: 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23  F_INTEGER  'd'.#
9020: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
9030: 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a  F_REAL     'e'..
9040: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
9050: 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
9060: 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
9070: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
9080: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
9090: 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
90a0: 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
90b0: 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
90c0: 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
90d0: 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65  y value. .*/.#de
90e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
90f0: 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f  MASK     0x67../
9100: 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
9110: 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
9120: 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
9130: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
9140: 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
9150: 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
9160: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9170: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
9180: 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  08  /* jumps if 
9190: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
91a0: 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
91b0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
91c0: 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53        0x10  /* S
91d0: 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
91e0: 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
91f0: 61 6e 20 6a 75 6d 70 20 2a 2f 0a 0a 2f 2a 0a 2a  an jump */../*.*
9200: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
9210: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
9220: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
9230: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
9240: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
9250: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
9260: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
9270: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
9280: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
9290: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
92a0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
92b0: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
92c0: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
92d0: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
92e0: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
92f0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
9300: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
9310: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
9320: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
9330: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
9340: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
9350: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
9360: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
9370: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
9380: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
9390: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
93a0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
93b0: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
93c0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
93d0: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
93e0: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
93f0: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
9400: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
9410: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
9420: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
9430: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
9440: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
9450: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
9460: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
9470: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
9480: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
9490: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
94a0: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
94b0: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
94c0: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
94d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
94e0: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
94f0: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
9500: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
9510: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
9520: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
9530: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
9540: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
9550: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
9560: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
9570: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
9580: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
9590: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
95a0: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
95b0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
95c0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
95d0: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
95e0: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
95f0: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
9600: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
9610: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
9620: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
9630: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
9640: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
9650: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
9660: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
9670: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
9680: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
9690: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
96a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
96b0: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
96c0: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
96d0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
96e0: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
96f0: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
9700: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
9710: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
9720: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
9730: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
9740: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
9750: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
9760: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
9770: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
9780: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
9790: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
97a0: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
97b0: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
97c0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
97d0: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
97e0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
97f0: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
9800: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
9810: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
9820: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  ct Table {.  sql
9830: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
9840: 20 20 2f 2a 20 41 73 73 6f 63 69 61 74 65 64 20    /* Associated 
9850: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9860: 69 6f 6e 2e 20 20 4d 69 67 68 74 20 62 65 20 4e  ion.  Might be N
9870: 55 4c 4c 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ULL. */.  char *
9880: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
9890: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
98a0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
98b0: 20 69 6e 74 20 69 50 4b 65 79 3b 20 20 20 20 20   int iPKey;     
98c0: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
98d0: 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
98e0: 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
98f0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
9900: 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
9910: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9920: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
9930: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 43  his table */.  C
9940: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
9950: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
9960: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
9970: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
9980: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
9990: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
99a0: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
99b0: 62 6c 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ble. */.  int tn
99c0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
99d0: 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64  * Root BTree nod
99e0: 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
99f0: 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65   (see note above
9a00: 29 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  ) */.  Select *p
9a10: 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
9a20: 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
9a30: 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
9a40: 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
9a50: 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20   */.  u16 nRef; 
9a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9a70: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
9a80: 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
9a90: 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  /.  u8 tabFlags;
9aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
9ab0: 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
9ac0: 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
9ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
9ae0: 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
9af0: 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
9b00: 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
9b10: 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
9b20: 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
9b30: 74 20 6f 66 20 53 51 4c 20 74 72 69 67 67 65 72  t of SQL trigger
9b40: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s on this table 
9b50: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
9b60: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
9b70: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
9b80: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
9b90: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
9ba0: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
9bb0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
9bc0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
9bd0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
9be0: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
9bf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
9c00: 0a 20 20 45 78 70 72 20 2a 70 43 68 65 63 6b 3b  .  Expr *pCheck;
9c10: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 41          /* The A
9c20: 4e 44 20 6f 66 20 61 6c 6c 20 43 48 45 43 4b 20  ND of all CHECK 
9c30: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
9c40: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
9c50: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
9c60: 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
9c70: 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
9c80: 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
9c90: 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
9ca0: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
9cb0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9cc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
9cd0: 54 55 41 4c 54 41 42 4c 45 0a 20 20 4d 6f 64 75  TUALTABLE.  Modu
9ce0: 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
9cf0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
9d00: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
9d10: 6e 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  n of the module 
9d20: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
9d30: 62 20 2a 70 56 74 61 62 3b 20 2f 2a 20 50 6f 69  b *pVtab; /* Poi
9d40: 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 6f 64 75  nter to the modu
9d50: 6c 65 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  le instance */. 
9d60: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
9d70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9d80: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
9d90: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
9da0: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
9db0: 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  rg;  /* Text of 
9dc0: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
9dd0: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
9de0: 61 6d 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ame */.#endif.  
9df0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
9e00: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
9e10: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
9e20: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
9e30: 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
9e40: 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
9e50: 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
9e60: 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
9e70: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
9e80: 65 73 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46  es for Tabe.tabF
9e90: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
9ea0: 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
9eb0: 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
9ec0: 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
9ed0: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
9ee0: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
9ef0: 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
9f00: 6e 20 65 6d 70 68 65 72 6d 61 6c 20 74 61 62 6c  n emphermal tabl
9f10: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
9f20: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
9f30: 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
9f40: 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
9f50: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
9f60: 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
9f70: 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
9f80: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
9f90: 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
9fa0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
9fb0: 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
9fc0: 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
9fd0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
9fe0: 23 64 65 66 69 6e 65 20 54 46 5f 4e 65 65 64 4d  #define TF_NeedM
9ff0: 65 74 61 64 61 74 61 20 20 20 20 30 78 32 30 20  etadata    0x20 
a000: 20 20 20 2f 2a 20 61 43 6f 6c 5b 5d 2e 7a 54 79     /* aCol[].zTy
a010: 70 65 20 61 6e 64 20 61 43 6f 6c 5b 5d 2e 70 43  pe and aCol[].pC
a020: 6f 6c 6c 20 6d 69 73 73 69 6e 67 20 2a 2f 0a 0a  oll missing */..
a030: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
a040: 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
a050: 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
a060: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
a070: 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
a080: 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
a090: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
a0a0: 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
a0b0: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
a0c0: 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
a0d0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
a0e0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
a0f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
a100: 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
a110: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
a120: 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
a130: 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61  lags & TF_Virtua
a140: 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  l)!=0).#  define
a150: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
a160: 58 29 20 28 28 58 29 2d 3e 69 73 48 69 64 64 65  X) ((X)->isHidde
a170: 6e 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  n).#else.#  defi
a180: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
a190: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
a1a0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
a1b0: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  X) 0.#endif../*.
a1c0: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
a1d0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
a1e0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
a1f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
a200: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
a210: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
a220: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a230: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
a240: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
a250: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
a260: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
a270: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
a280: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
a290: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
a2a0: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
a2b0: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
a2c0: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
a2d0: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
a2e0: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
a2f0: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
a300: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
a310: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
a320: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
a330: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
a340: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
a350: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
a360: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
a370: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
a380: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
a390: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
a3a0: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
a3b0: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
a3c0: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
a3d0: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
a3e0: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
a3f0: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
a400: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
a410: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
a420: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
a430: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
a440: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
a450: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
a460: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
a470: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
a480: 64 2e 20 20 54 68 65 20 65 78 69 73 74 61 6e 63  d.  The existanc
a490: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
a4a0: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
a4b0: 0a 2a 2a 20 75 6e 74 69 6c 20 61 6e 20 61 74 74  .** until an att
a4c0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
a4d0: 69 6e 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f  insert data into
a4e0: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
a4f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  .**.** The sqlit
a500: 65 2e 61 46 4b 65 79 20 68 61 73 68 20 74 61 62  e.aFKey hash tab
a510: 6c 65 20 73 74 6f 72 65 73 20 70 6f 69 6e 74 65  le stores pointe
a520: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
a530: 74 75 72 65 0a 2a 2a 20 67 69 76 65 6e 20 74 68  ture.** given th
a540: 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 6f 2d 74  e name of a to-t
a550: 61 62 6c 65 2e 20 20 46 6f 72 20 65 61 63 68 20  able.  For each 
a560: 74 6f 2d 74 61 62 6c 65 2c 20 61 6c 6c 20 66 6f  to-table, all fo
a570: 72 65 69 67 6e 20 6b 65 79 73 0a 2a 2a 20 61 73  reign keys.** as
a580: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
a590: 61 74 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 20  at table are on 
a5a0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 75 73  a linked list us
a5b0: 69 6e 67 20 74 68 65 20 46 4b 65 79 2e 70 4e 65  ing the FKey.pNe
a5c0: 78 74 54 6f 0a 2a 2a 20 66 69 65 6c 64 2e 0a 2a  xtTo.** field..*
a5d0: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
a5e0: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
a5f0: 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
a600: 20 74 68 61 74 20 63 6f 6e 73 74 61 69 6e 73 20   that constains 
a610: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
a620: 6c 61 75 73 65 20 2a 2f 0a 20 20 46 4b 65 79 20  lause */.  FKey 
a630: 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
a640: 4e 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79  Next foreign key
a650: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   in pFrom */.  c
a660: 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
a670: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
a680: 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
a690: 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 46 4b  oints to */.  FK
a6a0: 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
a6b0: 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20  /* Next foreign 
a6c0: 6b 65 79 20 74 68 61 74 20 70 6f 69 6e 74 73 20  key that points 
a6d0: 74 6f 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  to zTo */.  int 
a6e0: 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
a6f0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
a700: 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
a710: 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
a720: 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67  ap {  /* Mapping
a730: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
a740: 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
a750: 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
a760: 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
a770: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
a780: 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
a790: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
a7a0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
a7b0: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
a7c0: 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d 41    If 0 use PRIMA
a7d0: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 2a 61  RY KEY */.  } *a
a7e0: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
a7f0: 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
a800: 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
a810: 6d 6e 20 73 20 2a 2f 0a 20 20 75 38 20 69 73 44  mn s */.  u8 isD
a820: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
a830: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
a840: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
a850: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
a860: 49 54 20 2a 2f 0a 20 20 75 38 20 75 70 64 61 74  IT */.  u8 updat
a870: 65 43 6f 6e 66 3b 20 20 20 20 2f 2a 20 48 6f 77  eConf;    /* How
a880: 20 74 6f 20 72 65 73 6f 6c 76 65 20 63 6f 6e 66   to resolve conf
a890: 6c 69 63 74 73 20 74 68 61 74 20 6f 63 63 75 72  licts that occur
a8a0: 20 6f 6e 20 55 50 44 41 54 45 20 2a 2f 0a 20 20   on UPDATE */.  
a8b0: 75 38 20 64 65 6c 65 74 65 43 6f 6e 66 3b 20 20  u8 deleteConf;  
a8c0: 20 20 2f 2a 20 48 6f 77 20 74 6f 20 72 65 73 6f    /* How to reso
a8d0: 6c 76 65 20 63 6f 6e 66 6c 69 63 74 73 20 74 68  lve conflicts th
a8e0: 61 74 20 6f 63 63 75 72 20 6f 6e 20 44 45 4c 45  at occur on DELE
a8f0: 54 45 20 2a 2f 0a 20 20 75 38 20 69 6e 73 65 72  TE */.  u8 inser
a900: 74 43 6f 6e 66 3b 20 20 20 20 2f 2a 20 48 6f 77  tConf;    /* How
a910: 20 74 6f 20 72 65 73 6f 6c 76 65 20 63 6f 6e 66   to resolve conf
a920: 6c 69 63 74 73 20 74 68 61 74 20 6f 63 63 75 72  licts that occur
a930: 20 6f 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 7d 3b   on INSERT */.};
a940: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
a950: 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
a960: 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
a970: 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
a980: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
a990: 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
a9a0: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
a9b0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
a9c0: 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
a9d0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
a9e0: 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
a9f0: 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
aa00: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
aa10: 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
aa20: 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
aa30: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
aa40: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
aa50: 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
aa60: 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
aa70: 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
aa80: 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
aa90: 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
aaa0: 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
aab0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
aac0: 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
aad0: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
aae0: 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
aaf0: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
ab00: 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
ab10: 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
ab20: 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
ab30: 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
ab40: 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
ab50: 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
ab60: 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
ab70: 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
ab80: 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
ab90: 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
aba0: 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
abb0: 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
abc0: 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
abd0: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
abe0: 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
abf0: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
ac00: 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
ac10: 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
ac20: 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
ac30: 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
ac40: 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
ac50: 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
ac60: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
ac70: 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
ac80: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
ac90: 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
aca0: 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
acb0: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
acc0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
acd0: 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
ace0: 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
acf0: 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
ad00: 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
ad10: 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
ad20: 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
ad30: 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
ad40: 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
ad50: 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
ad60: 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
ad70: 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
ad80: 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
ad90: 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
ada0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
adb0: 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
adc0: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
add0: 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
ade0: 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
adf0: 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
ae00: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
ae10: 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
ae20: 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
ae30: 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
ae40: 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
ae50: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
ae60: 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
ae70: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
ae80: 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
ae90: 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
aea0: 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
aeb0: 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
aec0: 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
aed0: 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
aee0: 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
aef0: 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
af00: 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
af10: 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
af20: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
af30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
af40: 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
af50: 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
af60: 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
af70: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
af80: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
af90: 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
afa0: 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
afb0: 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
afc0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
afd0: 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
afe0: 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
aff0: 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
b000: 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
b010: 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
b020: 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
b030: 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
b040: 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
b050: 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
b060: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
b070: 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
b080: 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
b090: 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
b0a0: 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
b0b0: 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
b0c0: 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
b0d0: 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
b0e0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
b0f0: 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
b100: 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
b110: 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
b120: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
b130: 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
b140: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
b150: 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
b160: 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
b170: 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
b180: 4f 45 5f 44 65 66 61 75 6c 74 20 20 39 39 20 20  OE_Default  99  
b190: 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
b1a0: 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
b1b0: 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
b1c0: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
b1d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
b1e0: 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
b1f0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
b200: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
b210: 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
b220: 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
b230: 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
b240: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
b250: 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
b260: 79 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  ys..*/.struct Ke
b270: 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65  yInfo {.  sqlite
b280: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
b290: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
b2a0: 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
b2b0: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
b2c0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
b2d0: 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
b2e0: 54 45 58 54 5f 55 74 66 2a 20 76 61 6c 75 65 73  TEXT_Utf* values
b2f0: 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
b300: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
b310: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
b320: 6e 20 61 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75  n aColl[] */.  u
b330: 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
b340: 20 20 20 2f 2a 20 49 66 20 64 65 66 69 6e 65 64     /* If defined
b350: 20 61 6e 20 61 53 6f 72 74 4f 72 64 65 72 5b 69   an aSortOrder[i
b360: 5d 20 69 73 20 74 72 75 65 2c 20 73 6f 72 74 20  ] is true, sort 
b370: 44 45 53 43 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  DESC */.  CollSe
b380: 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
b390: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
b3a0: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
b3b0: 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
b3c0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
b3d0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
b3e0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
b3f0: 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
b400: 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69  on about a.** si
b410: 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72  ngle index recor
b420: 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
b430: 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  dy been parsed o
b440: 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
b450: 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  al.** values..**
b460: 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
b470: 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
b480: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
b490: 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
b4a0: 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
b4b0: 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
b4c0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
b4d0: 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
b4e0: 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
b4f0: 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
b500: 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
b510: 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
b520: 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
b530: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
b540: 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
b550: 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
b560: 73 65 6d 62 6c 69 65 64 20 62 79 20 74 68 65 0a  semblied by the.
b570: 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
b580: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
b590: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
b5a0: 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
b5b0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
b5c0: 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
b5d0: 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
b5e0: 74 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a  tent fields..*/.
b5f0: 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
b600: 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
b610: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
b620: 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
b630: 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
b640: 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e  ation */.  u16 n
b650: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
b660: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
b670: 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
b680: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
b690: 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65          /* Boole
b6a0: 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e  an settings.  UN
b6b0: 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77  PACKED_... below
b6c0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
b6d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
b6e0: 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ues */.};../*.**
b6f0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
b700: 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of UnpackedRecor
b710: 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  d.flags.*/.#defi
b720: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 4e 45 45 44  ne UNPACKED_NEED
b730: 5f 46 52 45 45 20 20 20 20 20 30 78 30 30 30 31  _FREE     0x0001
b740: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 69 73 20 66    /* Memory is f
b750: 72 6f 6d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  rom sqlite3Mallo
b760: 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  c() */.#define U
b770: 4e 50 41 43 4b 45 44 5f 4e 45 45 44 5f 44 45 53  NPACKED_NEED_DES
b780: 54 52 4f 59 20 20 30 78 30 30 30 32 20 20 2f 2a  TROY  0x0002  /*
b790: 20 61 70 4d 65 6d 5b 5d 73 20 73 68 6f 75 6c 64   apMem[]s should
b7a0: 20 61 6c 6c 20 62 65 20 64 65 73 74 72 6f 79 65   all be destroye
b7b0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50  d */.#define UNP
b7c0: 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57  ACKED_IGNORE_ROW
b7d0: 49 44 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49  ID  0x0004  /* I
b7e0: 67 6e 6f 72 65 20 74 72 61 69 6c 69 6e 67 20 72  gnore trailing r
b7f0: 6f 77 69 64 20 6f 6e 20 6b 65 79 31 20 2a 2f 0a  owid on key1 */.
b800: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
b810: 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20 20 30  _INCRKEY       0
b820: 78 30 30 30 38 20 20 2f 2a 20 4d 61 6b 65 20 74  x0008  /* Make t
b830: 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c  his key an epsil
b840: 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65  on larger */.#de
b850: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
b860: 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78 30 30  EFIX_MATCH  0x00
b870: 31 30 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20  10  /* A prefix 
b880: 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65  match is conside
b890: 72 65 64 20 4f 4b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  red OK */../*.**
b8a0: 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
b8b0: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
b8c0: 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
b8d0: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
b8e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
b8f0: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
b900: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
b910: 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
b920: 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
b930: 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
b940: 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
b950: 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
b960: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
b970: 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
b980: 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
b990: 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
b9a0: 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
b9b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
b9c0: 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
b9d0: 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
b9e0: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
b9f0: 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
ba00: 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
ba10: 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
ba20: 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
ba30: 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
ba40: 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
ba50: 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
ba60: 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
ba70: 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
ba80: 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
ba90: 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
baa0: 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
bab0: 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
bac0: 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
bad0: 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
bae0: 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
baf0: 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
bb00: 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a  2 because the .*
bb10: 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
bb20: 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
bb30: 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
bb40: 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
bb50: 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
bb60: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
bb70: 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
bb80: 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
bb90: 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
bba0: 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
bbb0: 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
bbc0: 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
bbd0: 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
bbe0: 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
bbf0: 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
bc00: 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
bc10: 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
bc20: 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
bc30: 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
bc40: 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
bc50: 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
bc60: 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
bc70: 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
bc80: 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
bc90: 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
bca0: 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
bcb0: 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
bcc0: 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
bcd0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
bce0: 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74  tion .** algorit
bcf0: 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
bd00: 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
bd10: 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
bd20: 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
bd30: 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73  ** element..*/.s
bd40: 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20  truct Index {.  
bd50: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
bd60: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
bd70: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
bd80: 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  nColumn;     /* 
bd90: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
bda0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 75  s in the table u
bdb0: 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
bdc0: 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f  x */.  int *aiCo
bdd0: 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 69 63 68  lumn;   /* Which
bde0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
bdf0: 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
be00: 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
be10: 75 6e 73 69 67 6e 65 64 20 2a 61 69 52 6f 77 45  unsigned *aiRowE
be20: 73 74 3b 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  st; /* Result of
be30: 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
be40: 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
be50: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
be60: 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
be70: 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
be80: 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
be90: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
bea0: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
beb0: 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
bec0: 66 20 74 68 69 73 20 69 6e 64 65 78 20 69 6e 20  f this index in 
bed0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
bee0: 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
bef0: 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
bf00: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
bf10: 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
bf20: 6e 65 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 49  ne */.  u8 autoI
bf30: 6e 64 65 78 3b 20 20 20 20 2f 2a 20 54 72 75 65  ndex;    /* True
bf40: 20 69 66 20 69 73 20 61 75 74 6f 6d 61 74 69 63   if is automatic
bf50: 61 6c 6c 79 20 63 72 65 61 74 65 64 20 28 65 78  ally created (ex
bf60: 3a 20 62 79 20 55 4e 49 51 55 45 29 20 2a 2f 0a  : by UNIQUE) */.
bf70: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
bf80: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
bf90: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
bfa0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
bfb0: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
bfc0: 65 78 74 3b 20 20 20 20 2f 2a 20 54 68 65 20 6e  ext;    /* The n
bfd0: 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
bfe0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
bff0: 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
c000: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 2f  hema *pSchema; /
c010: 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
c020: 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
c030: 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
c040: 65 72 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66  er;  /* Array of
c050: 20 73 69 7a 65 20 49 6e 64 65 78 2e 6e 43 6f 6c   size Index.nCol
c060: 75 6d 6e 2e 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn. True==DESC,
c070: 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
c080: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20   char **azColl; 
c090: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
c0a0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c0b0: 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
c0c0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
c0d0: 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
c0e0: 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
c0f0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
c100: 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
c110: 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
c120: 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
c130: 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
c140: 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
c150: 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
c160: 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
c170: 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
c180: 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
c190: 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
c1a0: 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
c1b0: 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 70  t make any assup
c1c0: 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
c1d0: 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
c1e0: 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
c1f0: 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
c200: 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
c210: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
c220: 3b 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65  ; /* Text of the
c230: 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
c240: 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
c250: 0a 20 20 75 6e 73 69 67 6e 65 64 20 64 79 6e 20  .  unsigned dyn 
c260: 20 3a 20 31 3b 20 20 20 20 20 20 2f 2a 20 54 72   : 1;      /* Tr
c270: 75 65 20 66 6f 72 20 6d 61 6c 6c 6f 63 65 64 20  ue for malloced 
c280: 6d 65 6d 6f 72 79 2c 20 66 61 6c 73 65 20 66 6f  memory, false fo
c290: 72 20 73 74 61 74 69 63 20 2a 2f 0a 20 20 75 6e  r static */.  un
c2a0: 73 69 67 6e 65 64 20 6e 20 20 20 20 3a 20 33 31  signed n    : 31
c2b0: 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
c2c0: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
c2d0: 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
c2e0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
c2f0: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
c300: 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
c310: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
c320: 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
c330: 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
c340: 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
c350: 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
c360: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
c370: 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
c380: 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
c390: 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
c3a0: 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
c3b0: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
c3c0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
c3d0: 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
c3e0: 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
c3f0: 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
c400: 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
c410: 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
c420: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
c430: 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
c440: 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
c450: 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
c460: 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
c470: 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
c480: 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
c490: 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
c4a0: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
c4b0: 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
c4c0: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
c4d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
c4e0: 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
c4f0: 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
c500: 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
c510: 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
c520: 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
c530: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
c540: 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
c550: 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
c560: 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
c570: 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
c580: 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
c590: 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
c5b0: 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
c5c0: 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
c5d0: 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
c5e0: 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
c5f0: 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
c600: 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
c610: 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
c620: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
c630: 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
c650: 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
c660: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
c670: 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
c680: 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
c690: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
c6a0: 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
c6b0: 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
c6c0: 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
c6d0: 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
c6e0: 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
c6f0: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
c700: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
c710: 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
c720: 69 6e 64 65 78 20 2a 2f 0a 20 20 73 74 72 75 63  index */.  struc
c730: 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
c740: 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
c750: 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
c760: 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
c770: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
c780: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
c790: 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
c7a0: 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
c7c0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
c7d0: 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
c7e0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
c7f0: 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
c800: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
c810: 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
c820: 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
c830: 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
c840: 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
c850: 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
c860: 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
c870: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
c8a0: 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
c8b0: 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
c8c0: 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c8e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
c8f0: 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
c900: 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
c910: 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
c920: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
c930: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
c940: 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  [] */.  int nCol
c950: 75 6d 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  umnAlloc;       
c960: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
c970: 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
c980: 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
c990: 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
c9a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c9b0: 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
c9c0: 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
c9d0: 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
ca00: 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
ca10: 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
ca20: 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
ca50: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
ca60: 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
ca70: 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
ca80: 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
ca90: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
caa0: 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
cab0: 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
cac0: 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
cad0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
cae0: 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
caf0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
cb00: 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
cb10: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
cb20: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
cb30: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
cb40: 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
cb50: 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
cb60: 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
cb70: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
cb80: 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
cb90: 2f 2a 20 45 70 68 65 72 6d 65 72 61 6c 20 74 61  /* Ephermeral ta
cba0: 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
cbb0: 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
cbc0: 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
cbd0: 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
cbe0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cbf0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
cc00: 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  unc[] */.  int n
cc10: 46 75 6e 63 41 6c 6c 6f 63 3b 20 20 20 20 20 20  FuncAlloc;      
cc20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cc30: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
cc40: 66 6f 72 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d  for aFunc[] */.}
cc50: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  ;../*.** Each no
cc60: 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
cc70: 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
cc80: 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
cc90: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
cca0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
ccb0: 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
ccc0: 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 69 6e 74  opcode.  The int
ccd0: 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
cce0: 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
ccf0: 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
cd00: 20 68 65 72 65 2e 20 20 46 6f 72 20 65 78 61 6d   here.  For exam
cd10: 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
cd20: 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
cd30: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
cd40: 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
cd50: 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
cd60: 72 61 74 6f 72 2e 20 20 54 68 69 73 20 73 61 6d  rator.  This sam
cd70: 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
cd80: 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
cd90: 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
cda0: 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
cdb0: 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
cdc0: 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
cdd0: 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
cde0: 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
cdf0: 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 73  Expr.pLeft are s
ce00: 75 62 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  ubexpressions.  
ce10: 45 78 70 72 2e 70 4c 69 73 74 20 69 73 20 61 20  Expr.pList is a 
ce20: 6c 69 73 74 0a 2a 2a 20 6f 66 20 61 72 67 75 6d  list.** of argum
ce30: 65 6e 74 20 69 66 20 74 68 65 20 65 78 70 72 65  ent if the expre
ce40: 73 73 69 6f 6e 20 69 73 20 61 20 66 75 6e 63 74  ssion is a funct
ce50: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
ce60: 74 6f 6b 65 6e 20 69 73 20 74 68 65 20 6f 70 65  token is the ope
ce70: 72 61 74 6f 72 20 74 6f 6b 65 6e 20 66 6f 72 20  rator token for 
ce80: 74 68 69 73 20 6e 6f 64 65 2e 20 20 46 6f 72 20  this node.  For 
ce90: 73 6f 6d 65 20 65 78 70 72 65 73 73 69 6f 6e 73  some expressions
cea0: 0a 2a 2a 20 74 68 61 74 20 68 61 76 65 20 73 75  .** that have su
ceb0: 62 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78  bexpressions, Ex
cec0: 70 72 2e 74 6f 6b 65 6e 20 63 61 6e 20 62 65 20  pr.token can be 
ced0: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
cee0: 74 20 74 68 61 74 20 67 61 76 65 0a 2a 2a 20 72  t that gave.** r
cef0: 69 73 65 20 74 6f 20 74 68 65 20 45 78 70 72 2e  ise to the Expr.
cf00: 20 20 49 6e 20 74 68 65 20 6c 61 74 74 65 72 20    In the latter 
cf10: 63 61 73 65 2c 20 74 68 65 20 74 6f 6b 65 6e 20  case, the token 
cf20: 69 73 20 6d 61 72 6b 65 64 20 61 73 20 62 65 69  is marked as bei
cf30: 6e 67 0a 2a 2a 20 61 20 63 6f 6d 70 6f 75 6e 64  ng.** a compound
cf40: 20 74 6f 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 41 6e   token..**.** An
cf50: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
cf60: 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
cf70: 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
cf80: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
cf90: 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
cfa0: 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
cfb0: 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
cfc0: 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
cfd0: 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
cfe0: 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
cff0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
d000: 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
d010: 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
d020: 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
d030: 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
d040: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
d050: 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
d060: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
d070: 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
d080: 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
d090: 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
d0a0: 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
d0b0: 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
d0c0: 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
d0d0: 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
d0e0: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
d0f0: 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
d100: 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
d110: 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
d120: 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
d130: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
d140: 65 73 73 69 6f 6e 20 69 73 20 61 20 66 75 6e 63  ession is a func
d150: 74 69 6f 6e 2c 20 74 68 65 20 45 78 70 72 2e 69  tion, the Expr.i
d160: 54 61 62 6c 65 20 69 73 20 61 6e 20 69 6e 74 65  Table is an inte
d170: 67 65 72 20 63 6f 64 65 0a 2a 2a 20 72 65 70 72  ger code.** repr
d180: 65 73 65 6e 74 69 6e 67 20 77 68 69 63 68 20 66  esenting which f
d190: 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  unction.  If the
d1a0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
d1b0: 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
d1c0: 6c 65 0a 2a 2a 20 6d 61 72 6b 65 72 20 28 61 20  le.** marker (a 
d1d0: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 63 68  question mark ch
d1e0: 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
d1f0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
d200: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 45 78 70   then the.** Exp
d210: 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
d220: 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
d230: 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
d240: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
d250: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
d260: 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
d270: 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
d280: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
d290: 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
d2a0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
d2b0: 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
d2c0: 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
d2d0: 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
d2e0: 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
d2f0: 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
d300: 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
d310: 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
d320: 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
d330: 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
d340: 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
d350: 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
d360: 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
d370: 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
d380: 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
d390: 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
d3a0: 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
d3b0: 2a 20 54 68 65 20 45 78 70 72 2e 70 53 65 6c 65  * The Expr.pSele
d3c0: 63 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  ct field points 
d3d0: 74 6f 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  to a SELECT stat
d3e0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 53 45 4c 45  ement.  The SELE
d3f0: 43 54 20 6d 69 67 68 74 0a 2a 2a 20 62 65 20 74  CT might.** be t
d400: 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
d410: 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74   of an IN operat
d420: 6f 72 2e 20 20 4f 72 2c 20 69 66 20 61 20 73 63  or.  Or, if a sc
d430: 61 6c 61 72 20 53 45 4c 45 43 54 20 61 70 70 65  alar SELECT appe
d440: 61 72 73 0a 2a 2a 20 69 6e 20 61 6e 20 65 78 70  ars.** in an exp
d450: 72 65 73 73 69 6f 6e 20 74 68 65 20 6f 70 63 6f  ression the opco
d460: 64 65 20 69 73 20 54 4b 5f 53 45 4c 45 43 54 20  de is TK_SELECT 
d470: 61 6e 64 20 45 78 70 72 2e 70 53 65 6c 65 63 74  and Expr.pSelect
d480: 20 69 73 20 74 68 65 20 6f 6e 6c 79 0a 2a 2a 20   is the only.** 
d490: 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  operand..**.** I
d4a0: 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
d4b0: 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
d4c0: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
d4d0: 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
d4e0: 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
d4f0: 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
d500: 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
d510: 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
d520: 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
d530: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
d540: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
d550: 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
d560: 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
d570: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
d580: 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
d590: 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
d5a0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
d5b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
d5c0: 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
d5d0: 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
d5e0: 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
d5f0: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
d600: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
d610: 75 73 20 66 6c 61 67 73 2e 20 20 53 65 65 20 62  us flags.  See b
d620: 65 6c 6f 77 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  elow */.  CollSe
d630: 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20 20  q *pColl;       
d640: 20 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f   /* The collatio
d650: 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  n type of the co
d660: 6c 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 20 20 45  lumn or 0 */.  E
d670: 78 70 72 20 2a 70 4c 65 66 74 2c 20 2a 70 52 69  xpr *pLeft, *pRi
d680: 67 68 74 3b 20 20 2f 2a 20 4c 65 66 74 20 61 6e  ght;  /* Left an
d690: 64 20 72 69 67 68 74 20 73 75 62 6e 6f 64 65 73  d right subnodes
d6a0: 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
d6b0: 70 4c 69 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  pList;       /* 
d6c0: 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
d6d0: 73 69 6f 6e 73 20 75 73 65 64 20 61 73 20 66 75  sions used as fu
d6e0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
d6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d700: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20            ** or 
d710: 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c  in "<expr> IN (<
d720: 65 78 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20  expr-list)" */. 
d730: 20 54 6f 6b 65 6e 20 74 6f 6b 65 6e 3b 20 20 20   Token token;   
d740: 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f 70          /* An op
d750: 65 72 61 6e 64 20 74 6f 6b 65 6e 20 2a 2f 0a 20  erand token */. 
d760: 20 54 6f 6b 65 6e 20 73 70 61 6e 3b 20 20 20 20   Token span;    
d770: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
d780: 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
d790: 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
d7a0: 69 6e 74 20 69 54 61 62 6c 65 2c 20 69 43 6f 6c  int iTable, iCol
d7b0: 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 65 6e 20 6f  umn;   /* When o
d7c0: 70 3d 3d 54 4b 5f 43 4f 4c 55 4d 4e 2c 20 74 68  p==TK_COLUMN, th
d7d0: 65 6e 20 74 68 69 73 20 65 78 70 72 20 6e 6f 64  en this expr nod
d7e0: 65 20 6d 65 61 6e 73 20 74 68 65 0a 20 20 20 20  e means the.    
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 2a 2a 20 69 43 6f 6c 75 6d 6e 2d       ** iColumn-
d810: 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  th field of the 
d820: 69 54 61 62 6c 65 2d 74 68 20 74 61 62 6c 65 2e  iTable-th table.
d830: 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
d840: 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
d850: 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
d860: 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
d870: 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 69  _FUNCTION */.  i
d880: 6e 74 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  nt iAgg;        
d890: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
d8a0: 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
d8b0: 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
d8c0: 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  unc[] */.  int i
d8d0: 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
d8e0: 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
d8f0: 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
d900: 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
d910: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
d920: 65 6c 65 63 74 3b 20 20 20 20 20 20 20 2f 2a 20  elect;       /* 
d930: 57 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  When the express
d940: 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
d950: 65 63 74 2e 20 20 41 6c 73 6f 20 74 68 65 0a 20  ect.  Also the. 
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 20 20 20 20 20 20 20 20 2a 2a 20 72 69 67 68 74          ** right
d980: 20 73 69 64 65 20 6f 66 20 22 3c 65 78 70 72 3e   side of "<expr>
d990: 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20   IN (<select>)" 
d9a0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
d9b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
d9c0: 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
d9d0: 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
d9e0: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
d9f0: 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
da00: 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
da10: 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
da20: 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
da30: 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
da40: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  e */.#endif.};..
da50: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
da60: 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
da70: 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
da80: 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
da90: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
daa0: 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30   EP_FromJoin   0
dab0: 78 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e  x0001  /* Origin
dac0: 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
dad0: 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
dae0: 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
daf0: 45 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78  EP_Agg        0x
db00: 30 30 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0002  /* Contain
db10: 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
db20: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
db30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
db40: 52 65 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30  Resolved   0x000
db50: 34 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  4  /* IDs have b
db60: 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
db70: 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
db80: 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
db90: 20 30 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72   0x0008  /* Expr
dba0: 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
dbb0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
dbc0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
dbd0: 5f 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30  _Distinct   0x00
dbe0: 31 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  10  /* Aggregate
dbf0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
dc00: 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
dc10: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
dc20: 72 53 65 6c 65 63 74 20 20 30 78 30 30 32 30 20  rSelect  0x0020 
dc30: 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
dc40: 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
dc50: 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
dc60: 6e 65 20 45 50 5f 44 65 71 75 6f 74 65 64 20 20  ne EP_Dequoted  
dc70: 20 30 78 30 30 34 30 20 20 2f 2a 20 54 72 75 65   0x0040  /* True
dc80: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 20 68   if the string h
dc90: 61 73 20 62 65 65 6e 20 64 65 71 75 6f 74 65 64  as been dequoted
dca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
dcb0: 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
dcc0: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
dcd0: 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
dce0: 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
dcf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
dd00: 78 70 43 6f 6c 6c 61 74 65 20 30 78 30 31 30 30  xpCollate 0x0100
dd10: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
dd20: 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
dd30: 64 20 65 78 70 6c 69 63 69 74 6c 79 20 2a 2f 0a  d explicitly */.
dd40: 23 64 65 66 69 6e 65 20 45 50 5f 41 6e 79 41 66  #define EP_AnyAf
dd50: 66 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a  f     0x0200  /*
dd60: 20 43 61 6e 20 74 61 6b 65 20 61 20 63 61 63 68   Can take a cach
dd70: 65 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 79  ed column of any
dd80: 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65   affinity */.#de
dd90: 66 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73  fine EP_FixedDes
dda0: 74 20 20 30 78 30 34 30 30 20 20 2f 2a 20 52 65  t  0x0400  /* Re
ddb0: 73 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61  sult needed in a
ddc0: 20 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74   specific regist
ddd0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  er */.#define EP
dde0: 5f 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 38  _IntValue   0x08
ddf0: 30 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  00  /* Integer v
de00: 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
de10: 6e 20 69 54 61 62 6c 65 20 2a 2f 0a 2f 2a 0a 2a  n iTable */./*.*
de20: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
de30: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
de40: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
de50: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
de60: 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
de70: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
de80: 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
de90: 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
dea0: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
deb0: 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
dec0: 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  nyProperty(E,P) 
ded0: 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
dee0: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
def0: 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
df00: 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
df10: 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
df20: 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
df30: 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
df40: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
df50: 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
df60: 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
df70: 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
df80: 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
df90: 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
dfa0: 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
dfb0: 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
dfc0: 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
dfd0: 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
dfe0: 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
dff0: 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
e000: 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
e010: 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
e020: 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
e030: 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
e040: 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
e050: 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
e060: 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
e070: 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
e080: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
e090: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
e0a0: 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
e0b0: 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2f   is not used..*/
e0c0: 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
e0d0: 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e0f0: 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
e100: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
e110: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63   */.  int nAlloc
e120: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
e130: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
e140: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 65 6c 6f  s allocated belo
e150: 77 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72  w */.  int iECur
e160: 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  sor;          /*
e170: 20 56 44 42 45 20 43 75 72 73 6f 72 20 61 73 73   VDBE Cursor ass
e180: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
e190: 73 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20  s ExprList */.  
e1a0: 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
e1b0: 69 74 65 6d 20 7b 0a 20 20 20 20 45 78 70 72 20  item {.    Expr 
e1c0: 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
e1d0: 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
e1e0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
e1f0: 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
e200: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
e210: 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
e220: 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
e230: 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
e240: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
e250: 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
e260: 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
e270: 20 20 20 20 75 38 20 64 6f 6e 65 3b 20 20 20 20      u8 done;    
e280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
e290: 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
e2a0: 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
e2b0: 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
e2c0: 20 20 20 20 75 31 36 20 69 43 6f 6c 3b 20 20 20      u16 iCol;   
e2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
e2e0: 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
e2f0: 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
e300: 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75  ult set */.    u
e310: 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
e320: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
e330: 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
e340: 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
e350: 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
e360: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
e370: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 65  entry for each e
e380: 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a  xpression */.};.
e390: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
e3a0: 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
e3b0: 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
e3c0: 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
e3d0: 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
e3e0: 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
e3f0: 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
e400: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
e410: 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
e420: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
e430: 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
e440: 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
e450: 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
e460: 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
e470: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
e480: 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
e490: 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
e4a0: 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
e4b0: 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
e4c0: 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
e4d0: 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
e4e0: 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
e4f0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
e500: 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
e510: 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
e520: 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
e530: 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
e540: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
e550: 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
e560: 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
e570: 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
e580: 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
e590: 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
e5a0: 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
e5b0: 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
e5c0: 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
e5d0: 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
e5e0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
e5f0: 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
e600: 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
e610: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
e620: 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
e630: 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
e640: 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
e650: 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
e660: 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
e670: 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
e680: 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
e690: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63   */.  int nAlloc
e6a0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
e6b0: 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
e6c0: 63 61 74 65 64 20 66 6f 72 20 61 5b 5d 20 62 65  cated for a[] be
e6d0: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
e6e0: 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
e6f0: 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
e700: 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
e710: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
e720: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
e730: 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
e740: 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
e750: 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
e760: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
e770: 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
e780: 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
e790: 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
e7a0: 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
e7b0: 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
e7c0: 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
e7d0: 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
e7e0: 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
e7f0: 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
e800: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e810: 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
e820: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
e830: 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
e840: 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
e850: 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
e860: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
e870: 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
e880: 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
e890: 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
e8a0: 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
e8b0: 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
e8c0: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
e8d0: 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
e8e0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e8f0: 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
e900: 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
e910: 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
e920: 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
e930: 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
e940: 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
e950: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
e960: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
e970: 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
e980: 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
e990: 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
e9a0: 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
e9b0: 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
e9c0: 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
e9d0: 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
e9e0: 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
e9f0: 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
ea00: 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
ea10: 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
ea20: 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
ea30: 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
ea40: 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
ea50: 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
ea60: 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
ea70: 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
ea80: 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
ea90: 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
eaa0: 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
eab0: 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
eac0: 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
ead0: 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
eae0: 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
eaf0: 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
eb00: 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
eb10: 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
eb20: 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
eb30: 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
eb40: 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  ious table..*/.s
eb50: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
eb60: 20 20 69 31 36 20 6e 53 72 63 3b 20 20 20 20 20    i16 nSrc;     
eb70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
eb80: 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
eb90: 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
eba0: 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31 36   clause */.  i16
ebb0: 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
ebc0: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
ebd0: 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
ebe0: 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
ebf0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
ec00: 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
ec10: 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
ec20: 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
ec30: 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
ec40: 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
ec50: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
ec60: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
ec70: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
ec80: 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
ec90: 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
eca0: 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
ecb0: 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
ecc0: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
ecd0: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
ece0: 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
ecf0: 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
ed00: 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
ed10: 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
ed20: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
ed30: 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
ed40: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
ed50: 0a 20 20 20 20 75 38 20 69 73 50 6f 70 75 6c 61  .    u8 isPopula
ed60: 74 65 64 3b 20 20 20 2f 2a 20 54 65 6d 70 6f 72  ted;   /* Tempor
ed70: 61 72 79 20 74 61 62 6c 65 20 61 73 73 6f 63 69  ary table associ
ed80: 61 74 65 64 20 77 69 74 68 20 53 45 4c 45 43 54  ated with SELECT
ed90: 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 2a 2f   is populated */
eda0: 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65  .    u8 jointype
edb0: 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
edc0: 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
edd0: 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65  his able and the
ede0: 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
edf0: 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
ee00: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
ee10: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
ee20: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
ee30: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
ee40: 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
ee50: 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
ee60: 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
ee70: 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
ee80: 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
ee90: 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
eea0: 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
eeb0: 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
eec0: 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
eed0: 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 72 20 70 54  f column N or pT
eee0: 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
eef0: 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
ef00: 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
ef10: 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
ef20: 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
ef30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
ef40: 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
ef50: 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
ef60: 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
ef70: 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
ef80: 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
ef90: 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
efa0: 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
efb0: 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
efc0: 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
efd0: 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
efe0: 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
eff0: 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
f000: 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
f010: 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
f020: 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
f030: 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
f040: 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
f050: 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
f060: 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
f070: 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
f080: 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
f090: 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
f0a0: 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
f0b0: 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
f0c0: 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
f0d0: 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
f0e0: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
f0f0: 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
f100: 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
f110: 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
f120: 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
f130: 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63  /../*.** For eac
f140: 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e  h nested loop in
f150: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
f160: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
f170: 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a  the WhereInfo.**
f180: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
f190: 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ins a single ins
f1a0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
f1b0: 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73  ructure.  This s
f1c0: 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69  tructure.** is i
f1d0: 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72  ntended to be pr
f1e0: 69 76 61 74 65 20 74 68 65 20 74 68 65 20 77 68  ivate the the wh
f1f0: 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64  ere.c module and
f200: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
f210: 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69  * access or modi
f220: 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f  fied by other mo
f230: 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  dules..**.** The
f240: 20 70 49 64 78 49 6e 66 6f 20 61 6e 64 20 70 42   pIdxInfo and pB
f250: 65 73 74 49 64 78 20 66 69 65 6c 64 73 20 61 72  estIdx fields ar
f260: 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70  e used to help p
f270: 69 63 6b 20 74 68 65 20 62 65 73 74 0a 2a 2a 20  ick the best.** 
f280: 69 6e 64 65 78 20 6f 6e 20 61 20 76 69 72 74 75  index on a virtu
f290: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70  al table.  The p
f2a0: 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20  IdxInfo pointer 
f2b0: 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e  contains indexin
f2c0: 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  g.** information
f2d0: 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61   for the i-th ta
f2e0: 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ble in the FROM 
f2f0: 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72 65  clause before re
f300: 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c  ordering..** All
f310: 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f   the pIdxInfo po
f320: 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65 64  inters are freed
f330: 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65   by whereInfoFre
f340: 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a  e() in where.c..
f350: 2a 2a 20 54 68 65 20 70 42 65 73 74 49 64 78 20  ** The pBestIdx 
f360: 70 6f 69 6e 74 65 72 20 69 73 20 61 20 63 6f 70  pointer is a cop
f370: 79 20 6f 66 20 70 49 64 78 49 6e 66 6f 20 66 6f  y of pIdxInfo fo
f380: 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65  r the i-th table
f390: 20 61 66 74 65 72 0a 2a 2a 20 46 52 4f 4d 20 63   after.** FROM c
f3a0: 6c 61 75 73 65 20 6f 72 64 65 72 69 6e 67 2e 20  lause ordering. 
f3b0: 20 54 68 69 73 20 69 73 20 61 20 6c 69 74 74 6c   This is a littl
f3c0: 65 20 63 6f 6e 66 75 73 69 6e 67 20 73 6f 20 49  e confusing so I
f3d0: 20 77 69 6c 6c 20 72 65 70 65 61 74 0a 2a 2a 20   will repeat.** 
f3e0: 69 74 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20  it in different 
f3f0: 77 6f 72 64 73 2e 20 20 57 68 65 72 65 49 6e 66  words.  WhereInf
f400: 6f 2e 61 5b 69 5d 2e 70 49 64 78 49 6e 66 6f 20  o.a[i].pIdxInfo 
f410: 69 73 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61  is index informa
f420: 74 69 6f 6e 20 0a 2a 2a 20 66 6f 72 20 57 68 65  tion .** for Whe
f430: 72 65 49 6e 66 6f 2e 70 54 61 62 4c 69 73 74 2e  reInfo.pTabList.
f440: 61 5b 69 5d 2e 20 20 57 68 65 72 65 49 6e 66 6f  a[i].  WhereInfo
f450: 2e 61 5b 69 5d 2e 70 42 65 73 74 49 6e 66 6f 20  .a[i].pBestInfo 
f460: 69 73 20 74 68 65 0a 2a 2a 20 69 6e 64 65 78 20  is the.** index 
f470: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
f480: 74 68 65 20 69 2d 74 68 20 6c 6f 6f 70 20 6f 66  the i-th loop of
f490: 20 74 68 65 20 6a 6f 69 6e 2e 20 20 70 42 65 73   the join.  pBes
f4a0: 74 49 6e 66 6f 20 69 73 20 61 6c 77 61 79 73 0a  tInfo is always.
f4b0: 2a 2a 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  ** either NULL o
f4c0: 72 20 61 20 63 6f 70 79 20 6f 66 20 73 6f 6d 65  r a copy of some
f4d0: 20 70 49 64 78 49 6e 66 6f 2e 20 20 53 6f 20 66   pIdxInfo.  So f
f4e0: 6f 72 20 63 6c 65 61 6e 75 70 20 69 74 20 69 73  or cleanup it is
f4f0: 20 0a 2a 2a 20 73 75 66 66 69 63 69 65 6e 74 20   .** sufficient 
f500: 74 6f 20 66 72 65 65 20 61 6c 6c 20 6f 66 20 74  to free all of t
f510: 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e  he pIdxInfo poin
f520: 74 65 72 73 2e 0a 2a 2a 20 0a 2a 2f 0a 73 74 72  ters..** .*/.str
f530: 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b  uct WhereLevel {
f540: 0a 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20  .  int iFrom;   
f550: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
f560: 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 46  h entry in the F
f570: 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
f580: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
f590: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61        /* Flags a
f5a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f5b0: 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  his level */.  i
f5c0: 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
f5d0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6d 65       /* First me
f5e0: 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65 64 20 62  mory cell used b
f5f0: 79 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  y this level */.
f600: 20 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b    int iLeftJoin;
f610: 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
f620: 79 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69  y cell used to i
f630: 6d 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55  mplement LEFT OU
f640: 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 49 6e  TER JOIN */.  In
f650: 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20  dex *pIdx;      
f660: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 75 73 65      /* Index use
f670: 64 2e 20 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 69  d.  NULL if no i
f680: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 54  ndex */.  int iT
f690: 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  abCur;          
f6a0: 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
f6b0: 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  or used to acces
f6c0: 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  s the table */. 
f6d0: 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20   int iIdxCur;   
f6e0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
f6f0: 42 45 20 63 75 72 73 6f 72 20 75 73 65 64 20 74  BE cursor used t
f700: 6f 20 61 63 65 73 73 73 20 70 49 64 78 20 2a 2f  o acesss pIdx */
f710: 0a 20 20 69 6e 74 20 62 72 6b 3b 20 20 20 20 20  .  int brk;     
f720: 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
f730: 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f   here to break o
f740: 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  ut of the loop *
f750: 2f 0a 20 20 69 6e 74 20 6e 78 74 3b 20 20 20 20  /.  int nxt;    
f760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
f770: 70 20 68 65 72 65 20 74 6f 20 73 74 61 72 74 20  p here to start 
f780: 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62  the next IN comb
f790: 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  ination */.  int
f7a0: 20 63 6f 6e 74 3b 20 20 20 20 20 20 20 20 20 20   cont;          
f7b0: 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
f7c0: 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  to continue with
f7d0: 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63   the next loop c
f7e0: 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6f  ycle */.  int to
f7f0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
f800: 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75 63  /* First instruc
f810: 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72  tion of interior
f820: 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
f830: 20 20 69 6e 74 20 6f 70 2c 20 70 31 2c 20 70 32    int op, p1, p2
f840: 3b 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64  ;       /* Opcod
f850: 65 20 75 73 65 64 20 74 6f 20 74 65 72 6d 69 6e  e used to termin
f860: 61 74 65 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a  ate the loop */.
f870: 20 20 69 6e 74 20 6e 45 71 3b 20 20 20 20 20 20    int nEq;      
f880: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f890: 72 20 6f 66 20 3d 3d 20 6f 72 20 49 4e 20 63 6f  r of == or IN co
f8a0: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74 68 69  nstraints on thi
f8b0: 73 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20  s loop */.  int 
f8c0: 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  nIn;            
f8d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 49    /* Number of I
f8e0: 4e 20 6f 70 65 72 61 74 6f 72 73 20 63 6f 6e 73  N operators cons
f8f0: 74 72 61 69 6e 69 6e 67 20 74 68 69 73 20 6c 6f  training this lo
f900: 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 49  op */.  struct I
f910: 6e 4c 6f 6f 70 20 7b 0a 20 20 20 20 69 6e 74 20  nLoop {.    int 
f920: 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
f930: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
f940: 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
f950: 69 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a  is IN operator *
f960: 2f 0a 20 20 20 20 69 6e 74 20 74 6f 70 41 64 64  /.    int topAdd
f970: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
f980: 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f  Top of the IN lo
f990: 6f 70 20 2a 2f 0a 20 20 7d 20 2a 61 49 6e 4c 6f  op */.  } *aInLo
f9a0: 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
f9b0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
f9c0: 75 74 20 65 61 63 68 20 6e 65 73 74 65 64 20 49  ut each nested I
f9d0: 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20  N operator */.  
f9e0: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
f9f0: 66 6f 20 2a 70 42 65 73 74 49 64 78 3b 20 20 2f  fo *pBestIdx;  /
fa00: 2a 20 49 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74  * Index informat
fa10: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 6c 65 76  ion for this lev
fa20: 65 6c 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20  el */..  /* The 
fa30: 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 20  following field 
fa40: 69 73 20 72 65 61 6c 6c 79 20 6e 6f 74 20 70 61  is really not pa
fa50: 72 74 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  rt of the curren
fa60: 74 20 6c 65 76 65 6c 2e 20 20 42 75 74 0a 20 20  t level.  But.  
fa70: 2a 2a 20 77 65 20 6e 65 65 64 20 61 20 70 6c 61  ** we need a pla
fa80: 63 65 20 74 6f 20 63 61 63 68 65 20 69 6e 64 65  ce to cache inde
fa90: 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  x information fo
faa0: 72 20 65 61 63 68 20 74 61 62 6c 65 20 69 6e 20  r each table in 
fab0: 74 68 65 0a 20 20 2a 2a 20 46 52 4f 4d 20 63 6c  the.  ** FROM cl
fac0: 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68 65  ause and the Whe
fad0: 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75 72  reLevel structur
fae0: 65 20 69 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e  e is a convenien
faf0: 74 20 70 6c 61 63 65 2e 0a 20 20 2a 2f 0a 20 20  t place..  */.  
fb00: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
fb10: 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20 2f  fo *pIdxInfo;  /
fb20: 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f 72  * Index info for
fb30: 20 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61 62   n-th source tab
fb40: 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
fb50: 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
fb60: 65 20 66 6f 72 20 74 68 65 20 77 66 6c 61 67 73  e for the wflags
fb70: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
fb80: 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
fb90: 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  )..*/.#define WH
fba0: 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
fbb0: 41 4c 20 20 20 20 20 30 20 20 20 2f 2a 20 4e 6f  AL     0   /* No
fbc0: 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
fbd0: 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
fbe0: 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f          1   /* O
fbf0: 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
fc00: 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
fc10: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
fc20: 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
fc30: 20 20 20 20 20 20 32 20 20 20 2f 2a 20 4f 52 44        2   /* ORD
fc40: 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
fc50: 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
fc60: 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
fc70: 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
fc80: 20 20 20 20 34 20 20 20 2f 2a 20 57 61 6e 74 20      4   /* Want 
fc90: 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
fca0: 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
fcb0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52 45  ./*.** The WHERE
fcc0: 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
fcd0: 6e 67 20 72 6f 75 74 69 6e 65 20 68 61 73 20 74  ng routine has t
fce0: 77 6f 20 68 61 6c 76 65 73 2e 20 20 54 68 65 0a  wo halves.  The.
fcf0: 2a 2a 20 66 69 72 73 74 20 70 61 72 74 20 64 6f  ** first part do
fd00: 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  es the start of 
fd10: 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 61  the WHERE loop a
fd20: 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a  nd the second.**
fd30: 20 68 61 6c 66 20 64 6f 65 73 20 74 68 65 20 74   half does the t
fd40: 61 69 6c 20 6f 66 20 74 68 65 20 57 48 45 52 45  ail of the WHERE
fd50: 20 6c 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61   loop.  An insta
fd60: 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
fd70: 74 72 75 63 74 75 72 65 20 69 73 20 72 65 74 75  tructure is retu
fd80: 72 6e 65 64 20 62 79 20 74 68 65 20 66 69 72 73  rned by the firs
fd90: 74 20 68 61 6c 66 20 61 6e 64 20 70 61 73 73 65  t half and passe
fda0: 64 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 65  d.** into the se
fdb0: 63 6f 6e 64 20 68 61 6c 66 20 74 6f 20 67 69 76  cond half to giv
fdc0: 65 20 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74  e some continuit
fdd0: 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65  y..*/.struct Whe
fde0: 72 65 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65  reInfo {.  Parse
fdf0: 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
fe00: 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e 64 20 63  /* Parsing and c
fe10: 6f 64 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63  ode generating c
fe20: 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 75 38 20 6f  ontext */.  u8 o
fe30: 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20 20 20 20  kOnePass;       
fe40: 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e   /* Ok to use on
fe50: 65 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d  e-pass algorithm
fe60: 20 66 6f 72 20 55 50 44 41 54 45 20 6f 72 20 44   for UPDATE or D
fe70: 45 4c 45 54 45 20 2a 2f 0a 20 20 53 72 63 4c 69  ELETE */.  SrcLi
fe80: 73 74 20 2a 70 54 61 62 4c 69 73 74 3b 20 20 20  st *pTabList;   
fe90: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62 6c 65  /* List of table
fea0: 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  s in the join */
feb0: 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20 20 20 20  .  int iTop;    
fec0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
fed0: 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  ery beginning of
fee0: 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
fef0: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e  */.  int iContin
ff00: 75 65 3b 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d  ue;       /* Jum
ff10: 70 20 68 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e  p here to contin
ff20: 75 65 20 77 69 74 68 20 6e 65 78 74 20 72 65 63  ue with next rec
ff30: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 69 42 72  ord */.  int iBr
ff40: 65 61 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  eak;          /*
ff50: 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72   Jump here to br
ff60: 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  eak out of the l
ff70: 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65  oop */.  int nLe
ff80: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  vel;          /*
ff90: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
ffa0: 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 71 6c 69  d loop */.  sqli
ffb0: 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
ffc0: 2a 61 70 49 6e 66 6f 3b 20 20 2f 2a 20 41 72 72  *apInfo;  /* Arr
ffd0: 61 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  ay of pointers t
ffe0: 6f 20 69 6e 64 65 78 20 69 6e 66 6f 20 73 74 72  o index info str
fff0: 75 63 74 75 72 65 73 20 2a 2f 0a 20 20 57 68 65  uctures */.  Whe
10000 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20  reLevel a[1];   
10010 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
10020 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74   about each nest
10030 20 6c 6f 6f 70 20 69 6e 20 74 68 65 20 57 48 45   loop in the WHE
10040 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  RE */.};../*.** 
10050 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
10060 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
10070 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
10080 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
10090 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
100a0 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
100b0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
100c0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
100d0 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
100e0 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
100f0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
10100 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
10110 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
10120 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
10130 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
10140 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
10150 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
10160 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
10170 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
10180 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
10190 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
101a0 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
101b0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
101c0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
101d0 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
101e0 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
101f0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
10200 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
10210 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
10220 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
10230 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
10240 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
10250 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
10260 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
10270 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
10280 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
10290 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
102a0 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
102b0 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
102c0 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
102d0 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
102e0 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
102f0 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
10300 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
10310 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
10320 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
10330 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
10340 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
10350 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
10360 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
10370 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
10380 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
10390 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
103a0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
103b0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
103c0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
103d0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
103e0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
103f0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
10400 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
10410 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
10420 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
10430 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
10440 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
10450 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
10460 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
10470 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
10480 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
10490 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
104a0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
104b0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
104c0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
104d0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
104e0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
104f0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
10500 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
10510 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
10520 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
10530 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
10540 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d  onal list of nam
10550 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  ed expressions *
10560 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
10570 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10580 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
10590 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
105a0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
105b0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
105c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
105d0 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
105e0 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
105f0 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 61 6c 6c  ames */.  u8 all
10600 6f 77 41 67 67 3b 20 20 20 20 20 20 20 20 20 2f  owAgg;         /
10610 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
10620 74 69 6f 6e 73 20 61 6c 6c 6f 77 65 64 20 68 65  tions allowed he
10630 72 65 20 2a 2f 0a 20 20 75 38 20 68 61 73 41 67  re */.  u8 hasAg
10640 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
10650 54 72 75 65 20 69 66 20 61 67 67 72 65 67 61 74  True if aggregat
10660 65 73 20 61 72 65 20 73 65 65 6e 20 2a 2f 0a 20  es are seen */. 
10670 20 75 38 20 69 73 43 68 65 63 6b 3b 20 20 20 20   u8 isCheck;    
10680 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
10690 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
106a0 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
106b0 74 72 61 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  traint */.  int 
106c0 6e 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  nDepth;         
106d0 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 73 75 62   /* Depth of sub
106e0 71 75 65 72 79 20 72 65 63 75 72 73 69 6f 6e 2e  query recursion.
106f0 20 31 20 66 6f 72 20 6e 6f 20 72 65 63 75 72 73   1 for no recurs
10700 69 6f 6e 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  ion */.  AggInfo
10710 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
10720 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
10730 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
10740 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
10750 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
10760 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
10770 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
10780 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
10790 72 6d 6f 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  rmost */.};../*.
107a0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
107b0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
107c0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
107d0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
107e0 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
107f0 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
10800 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
10810 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
10820 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
10830 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
10840 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
10850 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
10860 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
10870 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
10880 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
10890 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
108a0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
108b0 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
108c0 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
108d0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
108e0 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
108f0 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
10900 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
10910 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
10920 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
10930 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
10940 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
10950 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
10960 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
10970 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
10980 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
10990 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
109a0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
109b0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
109c0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
109d0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
109e0 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
109f0 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
10a00 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
10a10 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
10a20 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
10a30 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
10a40 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
10a50 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
10a60 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10a70 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
10a80 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
10a90 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
10aa0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
10ab0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
10ac0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
10ad0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
10ae0 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
10af0 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
10b00 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
10b10 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
10b20 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
10b30 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
10b40 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
10b50 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
10b60 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
10b70 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
10b80 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
10b90 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
10ba0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
10bb0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
10bc0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
10bd0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
10be0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
10bf0 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
10c00 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
10c10 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
10c40 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
10c50 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
10c60 54 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  T */.  char affi
10c70 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
10c80 20 4d 61 6b 65 52 65 63 6f 72 64 20 77 69 74 68   MakeRecord with
10c90 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 66   this affinity f
10ca0 6f 72 20 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  or SRT_Set */.  
10cb0 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
10cc0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
10cd0 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
10ce0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
10cf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
10d00 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
10d10 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
10d20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
10d30 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
10d40 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
10d50 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
10d60 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
10d70 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
10d80 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
10d90 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
10da0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
10db0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
10dc0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
10dd0 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
10de0 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
10df0 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
10e00 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
10e10 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
10e20 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
10e30 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
10e40 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
10e50 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
10e60 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  und */.  Select 
10e70 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20  *pRightmost;    
10e80 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65  /* Right-most se
10e90 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
10ea0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
10eb0 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ent */.  Expr *p
10ec0 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
10ed0 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
10ee0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
10ef0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
10f00 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
10f10 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
10f20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
10f30 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
10f40 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
10f50 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
10f60 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
10f70 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
10f80 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
10f90 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
10fa0 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20  enEphm[3];   /* 
10fb0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
10fc0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
10fd0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 7d  this select */.}
10fe0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
10ff0 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
11000 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
11010 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
11020 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
11030 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64  ect Flag"..*/.#d
11040 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
11050 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  t        0x0001 
11060 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
11070 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
11080 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
11090 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30 30  lved        0x00
110a0 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  02  /* Identifie
110b0 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
110c0 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
110d0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
110e0 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43      0x0004  /* C
110f0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
11100 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
11110 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70  define SF_UsesEp
11120 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30 38  hemeral   0x0008
11130 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70    /* Uses the Op
11140 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
11150 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  de */.#define SF
11160 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20  _Expanded       
11170 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c 69   0x0010  /* sqli
11180 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28  te3SelectExpand(
11190 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73  ) called on this
111a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
111b0 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30  asTypeInfo     0
111c0 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73  x0020  /* FROM s
111d0 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54  ubqueries have T
111e0 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f  able metadata */
111f0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
11200 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74  ults of a select
11210 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
11220 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
11230 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52  ays.  The.** "SR
11240 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
11250 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54  "SELECT Result T
11260 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ype"..*/.#define
11270 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
11280 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
11290 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
112a0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
112b0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
112c0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
112d0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
112e0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
112f0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
11300 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
11310 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
11320 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
11330 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
11340 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
11350 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
11360 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
11370 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  ere */../* The O
11380 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
11390 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
113a0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
113b0 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
113c0 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
113d0 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
113e0 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65  iscard)..#define
113f0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
11400 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    5  /* Output e
11410 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
11420 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
11430 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20  _Mem          6 
11440 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
11450 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
11460 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
11470 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20  _Set          7 
11480 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
11490 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
114a0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
114b0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
114c0 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    8  /* Store re
114d0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
114e0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
114f0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
11500 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
11510 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72   9  /* Create tr
11520 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
11530 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
11540 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
11550 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
11560 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  10  /* Generate 
11570 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
11580 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  result */../*.**
11590 20 41 20 73 74 72 75 63 74 75 72 65 20 75 73 65   A structure use
115a0 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74  d to customize t
115b0 68 65 20 62 65 68 61 76 69 6f 75 72 20 6f 66 20  he behaviour of 
115c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 29 2e  sqlite3Select().
115d0 20 53 65 65 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 73   See.** comments
115e0 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 53 65   above sqlite3Se
115f0 6c 65 63 74 28 29 20 66 6f 72 20 64 65 74 61 69  lect() for detai
11600 6c 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ls..*/.typedef s
11610 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
11620 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 73 74 72   SelectDest;.str
11630 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
11640 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
11650 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
11660 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
11670 73 75 6c 74 73 20 2a 2f 0a 20 20 75 38 20 61 66  sults */.  u8 af
11680 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
11690 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
116a0 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
116b0 74 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 6d  t */.  int iParm
116c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61  ;        /* A pa
116d0 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
116e0 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
116f0 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
11700 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
11710 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
11720 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
11730 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
11740 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
11750 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11760 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
11770 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ted */.};../*.**
11780 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
11790 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
117a0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
117b0 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
117c0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
117d0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
117e0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
117f0 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
11800 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
11810 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
11820 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
11830 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
11840 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
11850 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
11860 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
11870 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
11880 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
11890 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
118a0 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
118b0 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
118c0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
118d0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
118e0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
118f0 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
11900 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
11910 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
11920 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
11930 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
11940 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
11950 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
11960 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
11970 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
11980 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
11990 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
119a0 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
119b0 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
119c0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
119d0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
119e0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
119f0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
11a00 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
11a10 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
11a20 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
11a30 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
11a40 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
11a50 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
11a60 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
11a70 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
11a80 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
11a90 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
11aa0 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
11ab0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
11ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
11ad0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
11ae0 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 63 68  xecution */.  ch
11af0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
11b00 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
11b10 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
11b20 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
11b30 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
11b40 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
11b50 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
11b60 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
11b70 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
11b80 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
11b90 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
11ba0 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
11bb0 20 20 75 38 20 6e 61 6d 65 43 6c 61 73 68 3b 20    u8 nameClash; 
11bc0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 65 72 6d         /* A perm
11bd0 61 6e 65 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65  anent table name
11be0 20 63 6c 61 73 68 65 73 20 77 69 74 68 20 74 65   clashes with te
11bf0 6d 70 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f  mp table name */
11c00 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
11c10 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
11c20 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
11c30 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
11c40 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
11c50 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
11c60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
11c70 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
11c80 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
11c90 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 70 61  rator */.  u8 pa
11ca0 72 73 65 45 72 72 6f 72 3b 20 20 20 20 20 20 20  rseError;       
11cb0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 61 20  /* True after a 
11cc0 70 61 72 73 69 6e 67 20 65 72 72 6f 72 2e 20 20  parsing error.  
11cd0 54 69 63 6b 65 74 20 23 31 37 39 34 20 2a 2f 0a  Ticket #1794 */.
11ce0 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
11cf0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11d00 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
11d10 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
11d20 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54  Reg[] */.  u8 nT
11d30 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20  empInUse;       
11d40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65  /* Number of aTe
11d50 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c  mpReg[] currentl
11d60 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
11d70 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
11d80 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
11d90 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
11da0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
11db0 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
11dc0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
11dd0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
11de0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
11df0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
11e00 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
11e10 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
11e20 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
11e30 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
11e40 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
11e50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11e60 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
11e70 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
11e80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11e90 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
11ea0 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
11eb0 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
11ec0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
11ed0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
11ee0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
11ef0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
11f00 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
11f10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
11f20 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
11f30 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
11f40 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
11f50 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
11f60 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
11f70 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
11f80 6e 74 20 64 69 73 61 62 6c 65 43 6f 6c 43 61 63  nt disableColCac
11f90 68 65 3b 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  he; /* True to d
11fa0 69 73 61 62 6c 65 20 61 64 64 69 6e 67 20 74 6f  isable adding to
11fb0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   column cache */
11fc0 0a 20 20 69 6e 74 20 6e 43 6f 6c 43 61 63 68 65  .  int nColCache
11fd0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
11fe0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
11ff0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
12000 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6c 43 61   */.  int iColCa
12010 63 68 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65  che;       /* Ne
12020 78 74 20 65 6e 74 72 79 20 6f 66 20 74 68 65 20  xt entry of the 
12030 63 61 63 68 65 20 74 6f 20 72 65 70 6c 61 63 65  cache to replace
12040 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f   */.  struct yCo
12050 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
12060 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
12070 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
12080 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
12090 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
120a0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
120b0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
120c0 0a 20 20 20 20 63 68 61 72 20 61 66 66 43 68 61  .    char affCha
120d0 6e 67 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  nge;       /* Tr
120e0 75 65 20 69 66 20 74 68 69 73 20 72 65 67 69 73  ue if this regis
120f0 74 65 72 20 68 61 73 20 68 61 64 20 61 6e 20 61  ter has had an a
12100 66 66 69 6e 69 74 79 20 63 68 61 6e 67 65 20 2a  ffinity change *
12110 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
12120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
12130 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
12140 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
12150 6c 75 6d 6e 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  lumn */.  } aCol
12160 43 61 63 68 65 5b 31 30 5d 3b 20 20 20 20 20 2f  Cache[10];     /
12170 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 76  * One for each v
12180 61 6c 69 64 20 63 6f 6c 75 6d 6e 20 63 61 63 68  alid column cach
12190 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 75 33 32  e entry */.  u32
121a0 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 20 20   writeMask;     
121b0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
121c0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
121d0 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
121e0 73 20 2a 2f 0a 20 20 75 33 32 20 63 6f 6f 6b 69  s */.  u32 cooki
121f0 65 4d 61 73 6b 3b 20 20 20 20 20 20 2f 2a 20 42  eMask;      /* B
12200 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
12210 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
12220 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f  ses */.  int coo
12230 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a  kieGoto;      /*
12240 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47   Address of OP_G
12250 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65  oto to cookie ve
12260 72 69 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e  rifier subroutin
12270 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  e */.  int cooki
12280 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
12290 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
122a0 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
122b0 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
122c0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
122d0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
122e0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
122f0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
12300 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
12310 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
12320 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
12330 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
12340 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
12350 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
12360 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
12370 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
12380 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
12390 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
123a0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
123b0 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
123c0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
123d0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
123e0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
123f0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
12400 62 6a 65 63 74 73 20 2a 2f 0a 0a 20 20 2f 2a 20  bjects */..  /* 
12410 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
12420 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
12430 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
12440 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
12450 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
12460 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20   recursion */.. 
12470 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
12480 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12490 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
124a0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
124b0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
124c0 20 6e 56 61 72 45 78 70 72 3b 20 20 20 20 20 20   nVarExpr;      
124d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
124e0 73 65 64 20 73 6c 6f 74 73 20 69 6e 20 61 70 56  sed slots in apV
124f0 61 72 45 78 70 72 5b 5d 20 2a 2f 0a 20 20 69 6e  arExpr[] */.  in
12500 74 20 6e 56 61 72 45 78 70 72 41 6c 6c 6f 63 3b  t nVarExprAlloc;
12510 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12520 61 6c 6c 6f 63 61 74 65 64 20 73 6c 6f 74 73 20  allocated slots 
12530 69 6e 20 61 70 56 61 72 45 78 70 72 5b 5d 20 2a  in apVarExpr[] *
12540 2f 0a 20 20 45 78 70 72 20 2a 2a 61 70 56 61 72  /.  Expr **apVar
12550 45 78 70 72 3b 20 20 20 20 2f 2a 20 50 6f 69 6e  Expr;    /* Poin
12560 74 65 72 73 20 74 6f 20 3a 61 61 61 20 61 6e 64  ters to :aaa and
12570 20 24 61 61 61 61 20 77 69 6c 64 63 61 72 64 20   $aaaa wildcard 
12580 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
12590 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
125a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
125b0 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
125c0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
125d0 0a 20 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20  .  int *aAlias; 
125e0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
125f0 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ter used to hold
12600 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
12610 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
12620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
12630 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
12640 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
12650 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 20  n the query */. 
12660 20 54 6f 6b 65 6e 20 73 45 72 72 54 6f 6b 65 6e   Token sErrToken
12670 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 74 6f 6b  ;     /* The tok
12680 65 6e 20 61 74 20 77 68 69 63 68 20 74 68 65 20  en at which the 
12690 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
126a0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
126b0 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 6f 6b 65  oken;    /* Toke
126c0 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
126d0 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
126e0 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
126f0 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
12700 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
12710 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 63 6f  n parsed */.  co
12720 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20  nst char *zSql; 
12730 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
12740 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
12750 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 2f 2a 20  ar *zTail;   /* 
12760 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
12770 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
12780 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
12790 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
127a0 65 3b 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65  e;    /* A table
127b0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
127c0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
127d0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
127e0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
127f0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
12800 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
12810 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
12820 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 61   */.  TriggerSta
12830 63 6b 20 2a 74 72 69 67 53 74 61 63 6b 3b 20 20  ck *trigStack;  
12840 2f 2a 20 54 72 69 67 67 65 72 20 61 63 74 69 6f  /* Trigger actio
12850 6e 73 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a  ns being coded *
12860 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
12870 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
12880 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
12890 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
128a0 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
128b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
128c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
128d0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
128e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
128f0 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
12900 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
12910 20 2a 2f 0a 20 20 75 38 20 64 65 63 6c 61 72 65   */.  u8 declare
12920 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
12930 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
12940 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
12950 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
12960 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
12970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12980 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
12990 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
129a0 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
129b0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  bLock;        /*
129c0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
129d0 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
129e0 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
129f0 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67  ndif.  int nHeig
12a00 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ht;            /
12a10 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
12a20 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
12a30 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
12a40 2f 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  /.  Table *pZomb
12a50 69 65 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 4c  ieTab;      /* L
12a60 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
12a70 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
12a80 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
12a90 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
12aa0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12ab0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
12ac0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
12ad0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
12ae0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
12af0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
12b00 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
12b10 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
12b20 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
12b30 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
12b40 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
12b50 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
12b60 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
12b70 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
12b80 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
12b90 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
12ba0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
12bb0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
12bc0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
12bd0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
12be0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
12bf0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
12c00 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
12c10 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
12c20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
12c30 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
12c40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
12c50 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 32 20  ld flags for P2 
12c60 76 61 6c 75 65 20 69 6e 20 4f 50 5f 49 6e 73 65  value in OP_Inse
12c70 72 74 20 61 6e 64 20 4f 50 5f 44 65 6c 65 74 65  rt and OP_Delete
12c80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
12c90 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 31 20 20  AG_NCHANGE   1  
12ca0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
12cb0 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
12cc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
12cd0 5f 4c 41 53 54 52 4f 57 49 44 20 32 20 20 20 20  _LASTROWID 2    
12ce0 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
12cf0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
12d00 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
12d10 5f 49 53 55 50 44 41 54 45 20 20 34 20 20 20 20  _ISUPDATE  4    
12d20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
12d30 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
12d40 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
12d50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 38  FLAG_APPEND    8
12d60 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
12d70 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
12d80 70 70 65 6e 64 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  ppend */../*. * 
12d90 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
12da0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
12db0 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
12dc0 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
12dd0 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
12de0 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20  t Trigger. . *. 
12df0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
12e00 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
12e10 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
12e20 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
12e30 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
12e40 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
12e50 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
12e60 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
12e70 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a  represents the .
12e80 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
12e90 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
12ea0 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
12eb0 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
12ec0 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
12ed0 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
12ee0 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
12ef0 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
12f00 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
12f10 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
12f20 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
12f30 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
12f40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
12f50 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
12f60 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
12f70 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
12f80 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
12f90 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
12fa0 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
12fb0 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
12fc0 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
12fd0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
12fe0 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
12ff0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
13000 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
13010 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
13020 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
13030 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
13040 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
13050 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
13060 7b 0a 20 20 63 68 61 72 20 2a 6e 61 6d 65 3b 20  {.  char *name; 
13070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
13080 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
13090 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
130b0 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
130c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
130d0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
130e0 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
130f0 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
13100 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
13110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
13120 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
13130 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
13140 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
13150 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
13160 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
13170 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
13180 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
13190 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
131a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
131b0 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
131c0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 69 6f   of the expresio
131d0 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
131e0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
131f0 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
13200 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
13210 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
13220 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
13250 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
13260 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
13270 20 20 54 6f 6b 65 6e 20 6e 61 6d 65 54 6f 6b 65    Token nameToke
13280 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  n;        /* Tok
13290 65 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 7a 4e  en containing zN
132a0 61 6d 65 2e 20 55 73 65 20 64 75 72 69 6e 67 20  ame. Use during 
132b0 70 61 72 73 69 6e 67 20 6f 6e 6c 79 20 2a 2f 0a  parsing only */.
132c0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
132d0 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
132e0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
132f0 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
13300 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
13310 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
13320 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
13330 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
13340 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
13350 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
13360 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
13370 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
13380 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
13390 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
133a0 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
133b0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
133c0 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
133d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
133e0 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
133f0 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
13400 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
13410 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
13420 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
13430 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
13440 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
13450 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
13460 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
13470 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
13480 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
13490 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
134a0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
134b0 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
134c0 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
134d0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
134e0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
134f0 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
13500 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
13510 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
13520 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
13530 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
13540 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
13550 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
13560 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
13570 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
13580 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
13590 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
135a0 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
135b0 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
135c0 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
135d0 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
135e0 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
135f0 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
13600 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
13610 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
13620 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
13630 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
13640 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
13650 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
13660 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
13670 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
13680 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
13690 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
136a0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
136b0 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
136c0 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
136d0 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
136e0 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
136f0 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
13700 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
13710 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
13720 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
13730 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
13740 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
13750 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
13760 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
13770 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
13780 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
13790 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
137a0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
137b0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
137c0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
137d0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
137e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
137f0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
13800 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
13810 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
13820 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72  ise NULL.. * tar
13830 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
13840 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 61  n holding the na
13850 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
13860 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
13870 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
13880 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
13890 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
138a0 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
138b0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
138c0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
138d0 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
138e0 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
138f0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
13900 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
13910 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
13920 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
13930 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
13940 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20  S ... . *       
13950 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
13960 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
13970 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
13980 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
13990 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
139a0 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
139b0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
139c0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
139d0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
139e0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
139f0 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
13a00 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
13a10 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
13a20 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
13a30 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
13a40 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
13a50 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
13a60 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
13a70 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
13a80 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
13a90 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
13aa0 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
13ab0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
13ac0 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f  ble to update ro
13ad0 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65  ws of.. * pWhere
13ae0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
13af0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
13b00 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
13b10 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
13b20 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
13b30 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
13b40 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
13b50 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
13b60 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
13b70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
13b80 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
13b90 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
13ba0 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
13bb0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
13bc0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
13bd0 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
13be0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
13bf0 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
13c00 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
13c10 20 7b 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20   {.  int op;    
13c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
13c30 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
13c40 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
13c50 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
13c60 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
13c70 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
13c80 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
13c90 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
13ca0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
13cb0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
13cc0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
13cd0 66 20 2a 2f 0a 0a 20 20 53 65 6c 65 63 74 20 2a  f */..  Select *
13ce0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
13cf0 56 61 6c 69 64 20 66 6f 72 20 53 45 4c 45 43 54  Valid for SELECT
13d00 20 61 6e 64 20 73 6f 6d 65 74 69 6d 65 73 20 0a   and sometimes .
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54            INSERT
13d30 20 73 74 65 70 73 20 28 77 68 65 6e 20 70 45 78   steps (when pEx
13d40 70 72 4c 69 73 74 20 3d 3d 20 30 29 20 2a 2f 0a  prList == 0) */.
13d50 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
13d60 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 20         /* Valid 
13d70 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
13d80 54 45 2c 20 49 4e 53 45 52 54 20 73 74 65 70 73  TE, INSERT steps
13d90 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
13da0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61  re;        /* Va
13db0 6c 69 64 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  lid for DELETE, 
13dc0 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
13dd0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
13de0 72 4c 69 73 74 3b 20 2f 2a 20 56 61 6c 69 64 20  rList; /* Valid 
13df0 66 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65  for UPDATE state
13e00 6d 65 6e 74 73 20 61 6e 64 20 73 6f 6d 65 74 69  ments and someti
13e10 6d 65 73 20 0a 20 20 20 20 20 20 20 20 20 20 20  mes .           
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 49 4e 53 45 52 54 20 73 74 65 70 73 20 28 77 68  INSERT steps (wh
13e40 65 6e 20 70 53 65 6c 65 63 74 20 3d 3d 20 30 29  en pSelect == 0)
13e50 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 49 64           */.  Id
13e60 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
13e70 20 20 20 2f 2a 20 56 61 6c 69 64 20 66 6f 72 20     /* Valid for 
13e80 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
13e90 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 54 72 69 67  s only */.  Trig
13ea0 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
13eb0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
13ec0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
13ed0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
13ee0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
13ef0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
13f00 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
13f10 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
13f20 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
13f30 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
13f40 67 67 65 72 53 74 61 63 6b 20 73 74 6f 72 65 73  ggerStack stores
13f50 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65 71   information req
13f60 75 69 72 65 64 20 64 75 72 69 6e 67 20 63 6f 64  uired during cod
13f70 65 0a 20 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20  e. * generation 
13f80 6f 66 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  of a single trig
13f90 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 57 68 69  ger program. Whi
13fa0 6c 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  le the trigger p
13fb0 72 6f 67 72 61 6d 20 69 73 20 62 65 69 6e 67 0a  rogram is being.
13fc0 20 2a 20 63 6f 64 65 64 2c 20 69 74 73 20 61 73   * coded, its as
13fd0 73 6f 63 69 61 74 65 64 20 54 72 69 67 67 65 72  sociated Trigger
13fe0 53 74 61 63 6b 20 69 6e 73 74 61 6e 63 65 20 69  Stack instance i
13ff0 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  s pointed to by 
14000 74 68 65 0a 20 2a 20 22 70 54 72 69 67 67 65 72  the. * "pTrigger
14010 53 74 61 63 6b 22 20 6d 65 6d 62 65 72 20 6f 66  Stack" member of
14020 20 74 68 65 20 50 61 72 73 65 20 73 74 72 75 63   the Parse struc
14030 74 75 72 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  ture.. *. * The 
14040 70 54 61 62 20 6d 65 6d 62 65 72 20 70 6f 69 6e  pTab member poin
14050 74 73 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ts to the table 
14060 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72  that triggers ar
14070 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 6f 6e  e being coded on
14080 2e 20 54 68 65 20 0a 20 2a 20 6e 65 77 49 64 78  . The . * newIdx
14090 20 6d 65 6d 62 65 72 20 63 6f 6e 74 61 69 6e 73   member contains
140a0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
140b0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 74 68  e vdbe cursor th
140c0 61 74 20 70 6f 69 6e 74 73 20 61 74 20 74 68 65  at points at the
140d0 20 74 65 6d 70 0a 20 2a 20 74 61 62 6c 65 20 74   temp. * table t
140e0 68 61 74 20 73 74 6f 72 65 73 20 74 68 65 20 6e  hat stores the n
140f0 65 77 2e 2a 20 72 65 66 65 72 65 6e 63 65 73 2e  ew.* references.
14100 20 49 66 20 6e 65 77 2e 2a 20 72 65 66 65 72 65   If new.* refere
14110 6e 63 65 73 20 61 72 65 20 6e 6f 74 20 76 61 6c  nces are not val
14120 69 64 0a 20 2a 20 66 6f 72 20 74 68 65 20 74 72  id. * for the tr
14130 69 67 67 65 72 20 62 65 69 6e 67 20 63 6f 64 65  igger being code
14140 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 61  d (for example a
14150 6e 20 4f 4e 20 44 45 4c 45 54 45 20 74 72 69 67  n ON DELETE trig
14160 67 65 72 29 2c 20 74 68 65 6e 20 6e 65 77 49 64  ger), then newId
14170 78 0a 20 2a 20 69 73 20 73 65 74 20 74 6f 20 2d  x. * is set to -
14180 31 2e 20 54 68 65 20 6f 6c 64 49 64 78 20 6d 65  1. The oldIdx me
14190 6d 62 65 72 20 69 73 20 61 6e 61 6c 6f 67 6f 75  mber is analogou
141a0 73 20 74 6f 20 6e 65 77 49 64 78 2c 20 66 6f 72  s to newIdx, for
141b0 20 6f 6c 64 2e 2a 20 72 65 66 65 72 65 6e 63 65   old.* reference
141c0 73 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 4f 4e 20  s.. *. * The ON 
141d0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
141e0 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  to be used for t
141f0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
14200 61 6d 20 73 74 65 70 73 20 69 73 20 73 74 6f 72  am steps is stor
14210 65 64 20 0a 20 2a 20 61 73 20 74 68 65 20 6f 72  ed . * as the or
14220 63 6f 6e 66 20 6d 65 6d 62 65 72 2e 20 49 66 20  conf member. If 
14230 74 68 69 73 20 69 73 20 4f 45 5f 44 65 66 61 75  this is OE_Defau
14240 6c 74 2c 20 74 68 65 6e 20 74 68 65 20 4f 4e 20  lt, then the ON 
14250 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
14260 0a 20 2a 20 73 70 65 63 69 66 69 65 64 20 66 6f  . * specified fo
14270 72 20 69 6e 64 69 76 69 64 75 61 6c 20 74 72 69  r individual tri
14280 67 67 65 72 73 20 73 74 65 70 73 20 69 73 20 75  ggers steps is u
14290 73 65 64 2e 0a 20 2a 0a 20 2a 20 73 74 72 75 63  sed.. *. * struc
142a0 74 20 54 72 69 67 67 65 72 53 74 61 63 6b 20 68  t TriggerStack h
142b0 61 73 20 61 20 22 70 4e 65 78 74 22 20 6d 65 6d  as a "pNext" mem
142c0 62 65 72 2c 20 74 6f 20 61 6c 6c 6f 77 20 6c 69  ber, to allow li
142d0 6e 6b 65 64 20 6c 69 73 74 73 20 74 6f 20 62 65  nked lists to be
142e0 0a 20 2a 20 63 6f 6e 73 74 72 75 63 74 65 64 2e  . * constructed.
142f0 20 57 68 65 6e 20 63 6f 64 69 6e 67 20 6e 65 73   When coding nes
14300 74 65 64 20 74 72 69 67 67 65 72 73 20 28 74 72  ted triggers (tr
14310 69 67 67 65 72 73 20 66 69 72 65 64 20 62 79 20  iggers fired by 
14320 6f 74 68 65 72 20 74 72 69 67 67 65 72 73 29 0a  other triggers).
14330 20 2a 20 65 61 63 68 20 6e 65 73 74 65 64 20 74   * each nested t
14340 72 69 67 67 65 72 20 73 74 6f 72 65 73 20 69 74  rigger stores it
14350 73 20 70 61 72 65 6e 74 20 74 72 69 67 67 65 72  s parent trigger
14360 27 73 20 54 72 69 67 67 65 72 53 74 61 63 6b 20  's TriggerStack 
14370 61 73 20 74 68 65 20 22 70 4e 65 78 74 22 20 0a  as the "pNext" .
14380 20 2a 20 70 6f 69 6e 74 65 72 2e 20 4f 6e 63 65   * pointer. Once
14390 20 74 68 65 20 6e 65 73 74 65 64 20 74 72 69 67   the nested trig
143a0 67 65 72 20 68 61 73 20 62 65 65 6e 20 63 6f 64  ger has been cod
143b0 65 64 2c 20 74 68 65 20 70 4e 65 78 74 20 76 61  ed, the pNext va
143c0 6c 75 65 20 69 73 20 72 65 73 74 6f 72 65 64 0a  lue is restored.
143d0 20 2a 20 74 6f 20 74 68 65 20 70 54 72 69 67 67   * to the pTrigg
143e0 65 72 53 74 61 63 6b 20 6d 65 6d 62 65 72 20 6f  erStack member o
143f0 66 20 74 68 65 20 50 61 72 73 65 20 73 74 75 63  f the Parse stuc
14400 74 75 72 65 20 61 6e 64 20 63 6f 64 69 6e 67 20  ture and coding 
14410 6f 66 20 74 68 65 20 70 61 72 65 6e 74 0a 20 2a  of the parent. *
14420 20 74 72 69 67 67 65 72 20 63 6f 6e 74 69 6e 75   trigger continu
14430 65 73 2e 0a 20 2a 0a 20 2a 20 42 65 66 6f 72 65  es.. *. * Before
14440 20 61 20 6e 65 73 74 65 64 20 74 72 69 67 67 65   a nested trigge
14450 72 20 69 73 20 63 6f 64 65 64 2c 20 74 68 65 20  r is coded, the 
14460 6c 69 6e 6b 65 64 20 6c 69 73 74 20 70 6f 69 6e  linked list poin
14470 74 65 64 20 74 6f 20 62 79 20 74 68 65 20 0a 20  ted to by the . 
14480 2a 20 70 54 72 69 67 67 65 72 53 74 61 63 6b 20  * pTriggerStack 
14490 69 73 20 73 63 61 6e 6e 65 64 20 74 6f 20 65 6e  is scanned to en
144a0 73 75 72 65 20 74 68 61 74 20 74 68 65 20 74 72  sure that the tr
144b0 69 67 67 65 72 20 69 73 20 6e 6f 74 20 61 62 6f  igger is not abo
144c0 75 74 20 74 6f 20 62 65 20 63 6f 64 65 64 0a 20  ut to be coded. 
144d0 2a 20 72 65 63 75 72 73 69 76 65 6c 79 2e 20 49  * recursively. I
144e0 66 20 74 68 69 73 20 63 6f 6e 64 69 74 69 6f 6e  f this condition
144f0 20 69 73 20 64 65 74 65 63 74 65 64 2c 20 74 68   is detected, th
14500 65 20 6e 65 73 74 65 64 20 74 72 69 67 67 65 72  e nested trigger
14510 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 2e 0a 20   is not coded.. 
14520 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
14530 72 53 74 61 63 6b 20 7b 0a 20 20 54 61 62 6c 65  rStack {.  Table
14540 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
14550 2f 2a 20 54 61 62 6c 65 20 74 68 61 74 20 74 72  /* Table that tr
14560 69 67 67 65 72 73 20 61 72 65 20 63 75 72 72 65  iggers are curre
14570 6e 74 6c 79 20 62 65 69 6e 67 20 63 6f 64 65 64  ntly being coded
14580 20 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 77   on */.  int new
14590 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Idx;          /*
145a0 20 49 6e 64 65 78 20 6f 66 20 76 64 62 65 20 63   Index of vdbe c
145b0 75 72 73 6f 72 20 74 6f 20 22 6e 65 77 22 20 74  ursor to "new" t
145c0 65 6d 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  emp table */.  i
145d0 6e 74 20 6f 6c 64 49 64 78 3b 20 20 20 20 20 20  nt oldIdx;      
145e0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
145f0 76 64 62 65 20 63 75 72 73 6f 72 20 74 6f 20 22  vdbe cursor to "
14600 6f 6c 64 22 20 74 65 6d 70 20 74 61 62 6c 65 20  old" temp table 
14610 2a 2f 0a 20 20 75 33 32 20 6e 65 77 43 6f 6c 4d  */.  u32 newColM
14620 61 73 6b 3b 0a 20 20 75 33 32 20 6f 6c 64 43 6f  ask;.  u32 oldCo
14630 6c 4d 61 73 6b 3b 0a 20 20 69 6e 74 20 6f 72 63  lMask;.  int orc
14640 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
14650 20 43 75 72 72 65 6e 74 20 6f 72 63 6f 6e 66 20   Current orconf 
14660 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 69 6e 74 20  policy */.  int 
14670 69 67 6e 6f 72 65 4a 75 6d 70 3b 20 20 20 20 20  ignoreJump;     
14680 20 2f 2a 20 77 68 65 72 65 20 74 6f 20 6a 75 6d   /* where to jum
14690 70 20 74 6f 20 66 6f 72 20 61 20 52 41 49 53 45  p to for a RAISE
146a0 28 49 47 4e 4f 52 45 29 20 2a 2f 0a 20 20 54 72  (IGNORE) */.  Tr
146b0 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
146c0 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
146d0 72 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  r currently bein
146e0 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 54 72 69  g coded */.  Tri
146f0 67 67 65 72 53 74 61 63 6b 20 2a 70 4e 65 78 74  ggerStack *pNext
14700 3b 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65  ; /* Next trigge
14710 72 20 64 6f 77 6e 20 6f 6e 20 74 68 65 20 74 72  r down on the tr
14720 69 67 67 65 72 20 73 74 61 63 6b 20 2a 2f 0a 7d  igger stack */.}
14730 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
14740 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
14750 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
14760 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
14770 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
14780 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
14790 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
147a0 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
147b0 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
147c0 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20  es.** explicit. 
147d0 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72   .*/.typedef str
147e0 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
147f0 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
14800 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
14810 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
14820 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
14830 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
14840 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
14850 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
14860 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
14870 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
14880 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
14890 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
148a0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
148b0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
148c0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
148d0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
148e0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
148f0 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
14900 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
14910 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
14920 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
14930 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
14940 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
14950 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
14960 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
14970 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
14980 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
14990 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
149a0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
149b0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
149c0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
149d0 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
149e0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
149f0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
14a00 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
14a10 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
14a20 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
14a30 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
14a40 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
14a50 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
14a60 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
14a70 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
14a80 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
14a90 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
14aa0 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
14ab0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
14ac0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
14ad0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
14ae0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
14af0 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
14b00 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
14b10 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20   zText */.  int 
14b20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
14b30 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
14b40 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  wed string lengt
14b50 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61 6c 6c  h */.  u8   mall
14b60 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a 20 42  ocFailed;   /* B
14b70 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20 61  ecomes true if a
14b80 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ny memory alloca
14b90 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a 20 20  tion fails */.  
14ba0 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20  u8   useMalloc; 
14bb0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
14bc0 7a 54 65 78 74 20 69 73 20 65 6e 6c 61 72 67 61  zText is enlarga
14bd0 62 6c 65 20 75 73 69 6e 67 20 72 65 61 6c 6c 6f  ble using reallo
14be0 63 20 2a 2f 0a 20 20 75 38 20 20 20 74 6f 6f 42  c */.  u8   tooB
14bf0 69 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ig;         /* B
14c00 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20 73  ecomes true if s
14c10 74 72 69 6e 67 20 73 69 7a 65 20 65 78 63 65 65  tring size excee
14c20 64 73 20 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a  ds limits */.};.
14c30 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
14c40 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
14c50 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
14c60 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
14c70 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
14c80 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
14c90 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
14ca0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
14cb0 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
14cc0 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
14cd0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
14ce0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
14cf0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
14d00 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
14d10 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
14d20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
14d30 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
14d40 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
14d50 41 43 48 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  ACHed */.  char 
14d60 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
14d70 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
14d80 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
14d90 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
14da0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
14db0 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
14dc0 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
14dd0 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
14de0 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
14df0 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
14e00 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
14e10 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
14e20 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
14e30 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
14e40 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
14e50 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
14e60 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
14e70 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
14e80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14e90 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
14ea0 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
14eb0 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
14ec0 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14ee0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
14ef0 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
14f00 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
14f10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14f20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
14f30 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
14f40 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ing */.  int mxS
14f50 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
14f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
14f70 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
14f80 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  gth */.  int szL
14f90 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
14fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
14fb0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
14fc0 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
14fd0 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
15000 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
15010 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ount */.  sqlite
15020 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
15030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
15040 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
15050 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
15060 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
15070 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
15080 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
15090 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
150a0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
150b0 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
150e0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
150f0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15110 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
15120 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
15130 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
15140 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
15150 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
15160 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76  sts sizes */.  v
15170 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
151a0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
151b0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
151c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
151d0 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
151e0 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
151f0 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
15220 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
15230 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
15260 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
15270 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
152a0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
152b0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
152e0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
152f0 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ge[] */.  int is
15300 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
15310 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15320 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
15330 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
15340 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
15350 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15370 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
15380 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
15390 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
153a0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
153c0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
153d0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
153e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
153f0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
15400 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
15410 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
15420 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
15430 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
15440 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
15450 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15460 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
15470 4d 75 74 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6e  Mutex */.  int n
15480 53 6d 61 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Small;          
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
154a0 61 6c 6c 6f 63 20 73 69 7a 65 20 74 68 72 65 73  alloc size thres
154b0 68 6f 6c 64 20 75 73 65 64 20 62 79 20 6d 65 6d  hold used by mem
154c0 36 2e 63 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  6.c */.  int mxP
154d0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
154e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
154f0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
15500 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
15510 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
15520 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
15530 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
15540 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
15550 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 7d  ode enabled */.}
15560 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  ;../*.** Context
15570 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
15580 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
15590 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
155a0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
155b0 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
155c0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
155d0 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
155e0 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
155f0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
15600 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
15610 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
15620 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
15630 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
15640 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
15650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15670 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
15680 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
156c0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
156d0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
156e0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15700 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
15710 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
15750 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  e */.  } u;.};..
15760 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
15770 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
15780 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
15790 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
157a0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
157b0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
157c0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
157d0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
157e0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
157f0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
15800 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
15810 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
15820 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
15830 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
15840 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
15850 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
15860 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
15870 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
15880 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
15890 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
158a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
158b0 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 0a 23  _Continue    0.#
158c0 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
158d0 20 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65         1.#define
158e0 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
158f0 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69   2../*.** Assumi
15900 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
15910 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
15920 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
15930 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
15940 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
15950 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
15960 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
15970 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
15980 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
15990 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
159c0 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
159d0 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
15a00 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
15a10 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
15a20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
15a70 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
15a80 42 4b 50 54 20 6d 61 63 72 6f 20 63 61 6e 20 62  BKPT macro can b
15a90 65 20 65 69 74 68 65 72 20 61 20 63 6f 6e 73 74  e either a const
15aa0 61 6e 74 20 28 66 6f 72 20 70 72 6f 64 75 63 74  ant (for product
15ab0 69 6f 6e 0a 2a 2a 20 62 75 69 6c 64 73 29 20 6f  ion.** builds) o
15ac0 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  r a function cal
15ad0 6c 20 28 66 6f 72 20 64 65 62 75 67 67 69 6e 67  l (for debugging
15ae0 29 2e 20 20 49 66 20 69 74 20 69 73 20 61 20 66  ).  If it is a f
15af0 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2c 0a 2a 2a  unction call,.**
15b00 20 69 74 20 61 6c 6c 6f 77 73 20 74 68 65 20 6f   it allows the o
15b10 70 65 72 61 74 6f 72 20 74 6f 20 73 65 74 20 61  perator to set a
15b20 20 62 72 65 61 6b 70 6f 69 6e 74 20 61 74 20 74   breakpoint at t
15b30 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 64 61  he spot where da
15b40 74 61 62 61 73 65 0a 2a 2a 20 63 6f 72 72 75 70  tabase.** corrup
15b50 74 69 6f 6e 20 69 73 20 66 69 72 73 74 20 64 65  tion is first de
15b60 74 65 63 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  tected..*/.#ifde
15b70 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
15b80 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
15b90 75 70 74 28 76 6f 69 64 29 3b 0a 23 20 64 65 66  upt(void);.# def
15ba0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
15bb0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
15bc0 6f 72 72 75 70 74 28 29 0a 23 65 6c 73 65 0a 23  orrupt().#else.#
15bd0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
15be0 4f 52 52 55 50 54 5f 42 4b 50 54 20 53 51 4c 49  ORRUPT_BKPT SQLI
15bf0 54 45 5f 43 4f 52 52 55 50 54 0a 23 65 6e 64 69  TE_CORRUPT.#endi
15c00 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
15c10 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
15c20 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
15c30 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
15c40 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
15c50 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
15c60 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e  ite3StrNICmp(con
15c70 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
15c80 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 69   char *, int);.i
15c90 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62  nt sqlite3IsNumb
15ca0 65 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  er(const char*, 
15cb0 69 6e 74 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  int*, u8);.int s
15cc0 71 6c 69 74 65 33 53 74 72 6c 65 6e 28 73 71 6c  qlite3Strlen(sql
15cd0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
15ce0 72 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  r*);..int sqlite
15cf0 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
15d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
15d10 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
15d20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
15d30 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  loc(int);.void *
15d40 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
15d50 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  o(int);.void *sq
15d60 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
15d70 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  o(sqlite3*, int)
15d80 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
15d90 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
15da0 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
15db0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
15dc0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
15dd0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
15de0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
15df0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
15e00 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  ar*, int);.void 
15e10 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
15e20 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  void*, int);.voi
15e30 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
15e40 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
15e50 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
15e60 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
15e70 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
15e80 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
15e90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
15ea0 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
15eb0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
15ec0 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
15ed0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
15ee0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
15ef0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
15f00 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
15f10 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
15f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
15f30 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
15f40 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
15f50 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
15f60 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
15f70 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
15f80 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
15f90 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 63 6f 6e  fault(void);.con
15fa0 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
15fb0 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
15fc0 65 6d 47 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emGetDefault(voi
15fd0 64 29 3b 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  d);.const sqlite
15fe0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
15ff0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
16000 79 73 35 28 76 6f 69 64 29 3b 0a 63 6f 6e 73 74  ys5(void);.const
16010 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
16020 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
16030 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
16040 3b 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  ;.const sqlite3_
16050 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
16060 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
16070 36 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  6(void);.void sq
16080 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
16090 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
160a0 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
160b0 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69  void));.int sqli
160c0 74 65 33 4d 65 6d 6f 72 79 41 6c 61 72 6d 28 76  te3MemoryAlarm(v
160d0 6f 69 64 20 28 2a 29 28 76 6f 69 64 2a 2c 20 73  oid (*)(void*, s
160e0 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 20 69 6e  qlite3_int64, in
160f0 74 29 2c 20 76 6f 69 64 2a 2c 20 73 71 6c 69 74  t), void*, sqlit
16100 65 33 5f 69 6e 74 36 34 29 3b 0a 0a 23 69 66 6e  e3_int64);..#ifn
16110 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
16120 5f 4e 4f 4f 50 0a 20 20 73 71 6c 69 74 65 33 5f  _NOOP.  sqlite3_
16130 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 2a 73  mutex_methods *s
16140 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
16150 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
16160 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
16170 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
16180 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
16190 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
161a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
161b0 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
161c0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
161d0 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
161e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
161f0 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e  tatusAdd(int, in
16200 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
16210 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69  StatusSet(int, i
16220 6e 74 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  nt);..int sqlite
16230 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
16240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
16250 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
16260 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
16270 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61  *, va_list);.cha
16280 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
16290 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
162a0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
162b0 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
162c0 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
162d0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
162e0 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
162f0 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65  3MAppendf(sqlite
16300 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  3*,char*,const c
16310 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64  har*,...);.#if d
16320 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
16330 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  ST) || defined(S
16340 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
16350 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
16360 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
16370 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
16380 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
16390 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
163a0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
163b0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
163c0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  r*);.#endif.void
163d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
163e0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
163f0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
16400 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
16410 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
16420 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
16430 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
16440 69 74 65 33 45 72 72 6f 72 43 6c 65 61 72 28 50  ite3ErrorClear(P
16450 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
16460 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
16470 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
16480 44 65 71 75 6f 74 65 45 78 70 72 28 73 71 6c 69  DequoteExpr(sqli
16490 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  te3*, Expr*);.in
164a0 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
164b0 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
164c0 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
164d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
164e0 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
164f0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
16500 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
16510 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
16520 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
16530 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
16540 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
16550 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
16560 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
16570 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
16580 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
16590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
165a0 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
165b0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
165c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
165d0 70 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  pr(sqlite3*, int
165e0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
165f0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
16600 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
16610 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
16620 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
16630 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
16640 20 2a 73 71 6c 69 74 65 33 52 65 67 69 73 74 65   *sqlite3Registe
16650 72 45 78 70 72 28 50 61 72 73 65 2a 2c 54 6f 6b  rExpr(Parse*,Tok
16660 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
16670 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
16680 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
16690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
166a0 78 70 72 53 70 61 6e 28 45 78 70 72 2a 2c 54 6f  xprSpan(Expr*,To
166b0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 45 78  ken*,Token*);.Ex
166c0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
166d0 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
166e0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
166f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
16700 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
16710 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
16720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
16730 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
16740 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
16750 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
16760 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
16770 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
16780 72 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  r*,Token*);.void
16790 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
167a0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
167b0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
167c0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
167d0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
167e0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
167f0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
16800 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
16810 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
16820 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
16830 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
16840 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
16850 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
16860 6e 61 6c 53 63 68 65 6d 61 28 73 71 6c 69 74 65  nalSchema(sqlite
16870 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  3*, int);.void s
16880 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65  qlite3BeginParse
16890 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
168a0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
168b0 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
168c0 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65  sqlite3*);.Table
168d0 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
168e0 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
168f0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
16900 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
16910 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
16920 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
16930 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
16940 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
16950 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
16960 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
16970 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
16980 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
16990 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
169a0 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
169b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
169c0 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
169d0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
169e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
169f0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
16a00 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
16a10 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
16a20 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
16a30 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
16a40 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
16a50 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
16a60 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 29 3b  e(Parse*,Expr*);
16a70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
16a80 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
16a90 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
16aa0 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
16ab0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
16ac0 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b  Token*,Select*);
16ad0 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
16ae0 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
16af0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
16b00 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
16b10 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
16b20 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
16b30 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
16b40 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
16b50 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
16b60 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
16b70 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
16b80 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
16b90 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
16ba0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
16bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
16bc0 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
16bd0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
16be0 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  en*,Select*,int,
16bf0 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
16c00 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
16c10 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
16c20 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
16c30 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
16c40 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
16c50 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
16c60 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
16c70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
16c80 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
16c90 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
16ca0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
16cb0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
16cc0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
16cd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
16ce0 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 54  te3DeleteTable(T
16cf0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
16d00 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
16d10 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
16d20 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  rList*, Select*,
16d30 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
16d40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
16d50 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
16d60 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
16d70 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 69 6e 74 2a  t,int*,int*,int*
16d80 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
16d90 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
16da0 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
16db0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
16dc0 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
16dd0 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
16de0 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
16df0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
16e00 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
16e10 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
16e20 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
16e30 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
16e40 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
16e50 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
16e60 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
16e70 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
16eb0 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
16ec0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
16ed0 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
16ee0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
16ef0 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
16f00 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
16f10 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
16f20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
16f30 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
16f40 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
16f50 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
16f60 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
16f70 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
16f80 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
16f90 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
16fa0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
16fb0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
16fc0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
16fd0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
16fe0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
16ff0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
17000 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
17010 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
17020 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
17030 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
17040 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
17050 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
17060 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
17070 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
17080 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
17090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
170a0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
170b0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 45 78  ExprList*,int,Ex
170c0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
170d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
170e0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
170f0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
17100 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
17110 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
17120 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
17130 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
17140 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
17150 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
17160 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
17170 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
17180 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
17190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
171a0 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
171b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
171c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
171d0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
171e0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
171f0 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
17200 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
17210 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
17220 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
17230 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
17240 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
17250 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
17260 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
17270 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
17280 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
17290 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
172a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
172b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
172c0 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
172d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
172e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
172f0 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 69 6e  eCopy(Parse*, in
17300 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
17310 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6c  id sqlite3ExprCl
17320 65 61 72 43 6f 6c 75 6d 6e 43 61 63 68 65 28 50  earColumnCache(P
17330 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
17340 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
17350 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
17360 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
17370 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
17380 78 70 72 57 72 69 74 61 62 6c 65 52 65 67 69 73  xprWritableRegis
17390 74 65 72 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  ter(Parse*,int,i
173a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
173b0 33 45 78 70 72 48 61 72 64 43 6f 70 79 28 50 61  3ExprHardCopy(Pa
173c0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  rse*,int,int);.i
173d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
173e0 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
173f0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
17400 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
17410 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
17420 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
17430 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
17440 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
17450 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
17460 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
17470 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
17480 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
17490 65 33 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61  e3ExprCodeConsta
174a0 6e 74 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nts(Parse*, Expr
174b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
174c0 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
174d0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
174e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
174f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
17500 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
17510 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
17520 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
17530 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
17540 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
17550 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
17560 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
17570 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
17580 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
17590 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
175a0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e  eTable(Parse*,in
175b0 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63  t isView,const c
175c0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
175d0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
175e0 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
175f0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
17600 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
17610 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
17620 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
17630 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
17640 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
17650 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
17660 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
17670 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
17680 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
17690 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
176a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
176b0 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
176c0 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
176d0 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
176e0 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
176f0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
17700 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
17710 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Expr*, Expr*);.
17720 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
17730 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
17740 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
17750 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
17760 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
17770 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
17780 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
17790 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
177a0 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 45 78  Vdbe(Parse*);.Ex
177b0 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
177c0 65 49 64 45 78 70 72 28 50 61 72 73 65 20 2a 2c  eIdExpr(Parse *,
177d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
177e0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
177f0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
17800 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
17810 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
17820 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
17830 50 72 6e 67 52 65 73 65 74 53 74 61 74 65 28 76  PrngResetState(v
17840 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
17850 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
17860 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
17870 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
17880 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
17890 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
178a0 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
178b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
178c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
178d0 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
178e0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
178f0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
17900 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 69  ction(Parse*);.i
17910 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
17920 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
17930 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
17940 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
17950 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
17960 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
17970 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
17980 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
17990 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
179a0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
179b0 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
179c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
179d0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
179e0 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73  teRowDelete(Pars
179f0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
17a00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
17a10 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
17a20 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
17a30 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
17a40 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  nt, int*);.int s
17a50 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
17a60 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
17a70 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
17a80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
17a90 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
17aa0 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
17ab0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
17ac0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 20 20 20 69 6e 74 2a 2c 69 6e 74          int*,int
17af0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  ,int,int,int);.v
17b00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
17b10 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
17b20 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
17b30 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 69 6e 74 2c  , int, int*,int,
17b40 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
17b50 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
17b60 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
17b70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
17b80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
17b90 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
17ba0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
17bb0 69 6e 74 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  int, int);.Expr 
17bc0 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
17bd0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 29 3b  sqlite3*,Expr*);
17be0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
17bf0 65 6e 43 6f 70 79 28 73 71 6c 69 74 65 33 2a 2c  enCopy(sqlite3*,
17c00 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
17c10 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
17c20 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
17c30 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
17c40 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
17c50 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
17c60 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 29  lite3*,SrcList*)
17c70 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
17c80 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
17c90 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
17ca0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
17cb0 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
17cc0 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
17cd0 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
17ce0 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
17cf0 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
17d00 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
17d10 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
17d20 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
17d30 6e 74 2c 69 6e 74 2c 75 38 2c 69 6e 74 29 3b 0a  nt,int,u8,int);.
17d40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
17d50 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
17d60 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
17d70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
17d80 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
17d90 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
17da0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
17db0 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  rGlobalFunctions
17dc0 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
17dd0 74 65 33 47 65 74 42 75 69 6c 74 69 6e 46 75 6e  te3GetBuiltinFun
17de0 63 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72  ction(const char
17df0 20 2a 2c 20 69 6e 74 2c 20 46 75 6e 63 44 65 66   *, int, FuncDef
17e00 20 2a 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c   **);.#ifdef SQL
17e10 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
17e20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
17e30 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 69 6e 74  sqlite3*);.  int
17e40 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
17e50 66 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  f(sqlite3*);.#el
17e60 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
17e70 74 65 33 53 61 66 65 74 79 4f 6e 28 41 29 20 30  te3SafetyOn(A) 0
17e80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
17e90 33 53 61 66 65 74 79 4f 66 66 28 41 29 20 30 0a  3SafetyOff(A) 0.
17ea0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
17eb0 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
17ec0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
17ed0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
17ee0 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
17ef0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
17f00 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
17f10 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
17f20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
17f30 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
17f40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
17f50 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
17f60 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
17f70 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
17f80 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
17f90 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
17fa0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17fb0 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
17fc0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
17fd0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
17fe0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
17ff0 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
18000 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
18030 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
18040 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
18050 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
18060 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
18070 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
18080 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
18090 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
180a0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
180b0 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
180c0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
180d0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 69 67 67  int sqlite3Trigg
180e0 65 72 73 45 78 69 73 74 28 50 61 72 73 65 2a 2c  ersExist(Parse*,
180f0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
18100 70 72 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  prList*);.  int 
18110 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
18120 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 69 6e  igger(Parse*, in
18130 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
18140 74 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  t, Table *, int,
18150 20 69 6e 74 2c 20 0a 20 20 20 20 20 20 20 20 20   int, .         
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 69 6e 74 2c 20 69 6e 74 2c 20 75 33 32 2a    int, int, u32*
18180 2c 20 75 33 32 2a 29 3b 0a 20 20 76 6f 69 64 20  , u32*);.  void 
18190 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
181a0 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
181b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
181c0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
181d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
181e0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
181f0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
18200 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
18210 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
18220 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
18230 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
18240 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
18250 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
18260 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
18270 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
18280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69 73           ExprLis
182b0 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  t*,Select*,int);
182c0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
182d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
182e0 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
182f0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
18300 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
18310 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
18320 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
18330 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
18340 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
18350 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
18360 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
18370 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
18380 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
18390 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
183a0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
183b0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
183c0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
183d0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
183e0 73 45 78 69 73 74 28 41 2c 42 2c 43 2c 44 2c 45  sExist(A,B,C,D,E
183f0 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
18400 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
18410 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
18420 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
18430 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
18440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
18450 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
18460 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
18470 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
18480 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
18490 44 2c 45 2c 46 2c 47 2c 48 2c 49 2c 4a 2c 4b 29  D,E,F,G,H,I,J,K)
184a0 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
184b0 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
184c0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
184d0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
184e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
184f0 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
18500 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
18510 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
18520 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
18530 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
18540 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
18550 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
18560 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
18570 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
18580 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
18590 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
185a0 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
185b0 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
185c0 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
185d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
185e0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
185f0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
18600 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
18610 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
18620 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
18630 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
18640 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
18650 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
18660 74 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  t*);.#else.# def
18670 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
18680 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
18690 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
186a0 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
186b0 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
186c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
186d0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
186e0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
186f0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
18700 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
18710 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
18720 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
18730 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
18740 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
18750 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
18760 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
18770 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65  int sqlite3Btree
18780 46 61 63 74 6f 72 79 28 63 6f 6e 73 74 20 73 71  Factory(const sq
18790 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
187a0 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
187b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
187c0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 6d 69           int omi
187d0 74 4a 6f 75 72 6e 61 6c 2c 20 69 6e 74 20 6e 43  tJournal, int nC
187e0 61 63 68 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c  ache, int flags,
187f0 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65   Btree **ppBtree
18800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
18810 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
18820 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
18830 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
18840 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
18850 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
18860 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
18870 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
18880 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
18890 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
188a0 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
188b0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
188c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
188d0 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
188e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
188f0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
18900 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
18910 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
18920 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
18930 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
18940 20 64 6f 75 62 6c 65 2a 29 3b 0a 69 6e 74 20 73   double*);.int s
18950 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
18960 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
18970 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
18980 69 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73  itsIn64Bits(cons
18990 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
189a0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
189b0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
189c0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
189d0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
189e0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
189f0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
18a00 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 69 6e 74   int nByte);.int
18a10 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
18a20 28 63 6f 6e 73 74 20 75 38 2a 2c 20 63 6f 6e 73  (const u8*, cons
18a30 74 20 75 38 2a 2c 20 63 6f 6e 73 74 20 75 38 2a  t u8*, const u8*
18a40 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  *);../*.** Routi
18a50 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
18a60 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
18a70 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
18a80 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
18a90 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
18aa0 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
18ab0 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
18ac0 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
18ad0 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20  util.c.** file. 
18ae0 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65   Code should use
18af0 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73   the MACRO forms
18b00 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56   below, as the V
18b10 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73  arint32 versions
18b20 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f  .** are coded to
18b30 20 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67   assume the sing
18b40 6c 65 20 62 79 74 65 20 63 61 73 65 20 69 73 20  le byte case is 
18b50 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20  already handled 
18b60 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d  (which .** the M
18b70 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e  ACRO form does).
18b80 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
18b90 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
18ba0 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69  d char*, u64);.i
18bb0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
18bc0 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63  int32(unsigned c
18bd0 68 61 72 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  har*, u32);.int 
18be0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
18bf0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
18c00 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
18c10 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
18c20 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
18c30 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
18c40 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
18c50 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
18c60 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65  );../*.** The he
18c70 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64  ader of a record
18c80 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73   consists of a s
18c90 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65  equence variable
18ca0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
18cb0 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67  ..** These integ
18cc0 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61  ers are almost a
18cd0 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20  lways small and 
18ce0 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61  are encoded as a
18cf0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a   single byte..**
18d00 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
18d10 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e  acros take advan
18d20 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74  tage this fact t
18d30 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74  o provide a fast
18d40 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64   encode.** and d
18d50 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74  ecode of the int
18d60 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72  egers in a recor
18d70 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69 73  d header.  It is
18d80 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65 20   faster for the 
18d90 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77  common.** case w
18da0 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65 72  here the integer
18db0 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74   is a single byt
18dc0 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74 74  e.  It is a litt
18dd0 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74  le slower when t
18de0 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73  he.** integer is
18df0 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74   two or more byt
18e00 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c  es.  But overall
18e10 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a   it is faster..*
18e20 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
18e30 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  ng expressions a
18e40 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a  re equivalent:.*
18e50 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  *.**     x = sql
18e60 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
18e70 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20   A, &B );.**    
18e80 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56   x = sqlite3PutV
18e90 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
18ea0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67  .**.**     x = g
18eb0 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  etVarint32( A, B
18ec0 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70   );.**     x = p
18ed0 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
18ee0 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e   );.**.*/.#defin
18ef0 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
18f00 42 29 20 20 28 28 2a 28 41 29 3c 28 75 6e 73 69  B)  ((*(A)<(unsi
18f10 67 6e 65 64 20 63 68 61 72 29 30 78 38 30 29 20  gned char)0x80) 
18f20 3f 20 28 28 42 29 20 3d 20 28 75 33 32 29 2a 28  ? ((B) = (u32)*(
18f30 41 29 29 2c 31 20 3a 20 73 71 6c 69 74 65 33 47  A)),1 : sqlite3G
18f40 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 20  etVarint32((A), 
18f50 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
18f60 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
18f70 20 28 28 28 42 29 3c 28 75 33 32 29 30 78 38 30   (((B)<(u32)0x80
18f80 29 20 3f 20 28 2a 28 41 29 20 3d 20 28 75 6e 73  ) ? (*(A) = (uns
18f90 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
18fa0 31 20 3a 20 73 71 6c 69 74 65 33 50 75 74 56 61  1 : sqlite3PutVa
18fb0 72 69 6e 74 33 32 28 28 41 29 2c 20 28 42 29 29  rint32((A), (B))
18fc0 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
18fd0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
18fe0 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
18ff0 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
19000 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
19010 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 64 65  void sqlite3Inde
19020 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
19030 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
19040 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
19050 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
19060 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68   *, Table *);.ch
19070 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
19080 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
19090 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
190a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
190b0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
190c0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
190d0 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
190e0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
190f0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
19100 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
19110 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
19120 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
19130 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
19140 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
19150 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
19160 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
19170 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
19180 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
19190 6e 74 20 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt n);.int sqlit
191a0 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
191b0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
191c0 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
191d0 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
191e0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
191f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
19200 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
19210 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
19220 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
19230 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
19240 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
19250 72 20 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 43 6f  r *,int,int);.Co
19260 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
19270 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
19280 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
19290 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e   char *zName, in
192a0 74 20 6e 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  t nName);.CollSe
192b0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
192c0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
192d0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
192e0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
192f0 45 78 70 72 53 65 74 43 6f 6c 6c 28 50 61 72 73  ExprSetColl(Pars
19300 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
19310 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
19320 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
19330 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
19340 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
19350 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
19360 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
19370 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
19380 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
19390 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
193a0 2a 2c 20 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20  *, int);..const 
193b0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
193c0 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
193d0 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
193e0 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
193f0 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
19400 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
19410 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
19420 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
19430 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
19440 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
19460 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
19470 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
19480 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
19490 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
194a0 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
194b0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
194c0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
194d0 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
194e0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
194f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
19500 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
19510 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
19520 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
19530 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
19540 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
19550 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
19560 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
19570 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
19580 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
19590 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
195a0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
195b0 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
195c0 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
195d0 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
195e0 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
195f0 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
19600 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
19610 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
19620 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
19630 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
19640 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
19650 44 62 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  Db*, int, int);.
19660 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
19670 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
19680 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
19690 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
196a0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
196b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
196c0 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
196d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
196e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
196f0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
19700 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
19710 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
19720 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
19730 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
19740 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
19750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
19760 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
19770 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
19780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
19790 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
197a0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 29   *, Expr *, int)
197b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
197c0 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
197d0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
197e0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
197f0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
19800 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
19810 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
19820 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
19830 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
19840 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
19850 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
19860 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
19870 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
19880 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
19890 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
198a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
198b0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
198c0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
198d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
198e0 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
198f0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
19900 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
19910 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
19920 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
19930 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
19940 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
19950 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
19960 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
19970 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
19980 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
19990 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
199a0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
199b0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
199c0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
199d0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
199e0 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
199f0 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
19a00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
19a10 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
19a20 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
19a30 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
19a40 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
19a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
19a60 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
19a70 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
19a80 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
19a90 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
19aa0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
19ab0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
19ac0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
19ad0 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
19ae0 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 46  d sqlite3AttachF
19af0 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
19b00 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
19b10 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
19b20 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
19b30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
19b40 65 33 53 63 68 65 6d 61 46 72 65 65 28 76 6f 69  e3SchemaFree(voi
19b50 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
19b60 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
19b70 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
19b80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
19b90 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
19ba0 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
19bb0 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
19bc0 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66  lite3IndexKeyinf
19bd0 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78  o(Parse *, Index
19be0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
19bf0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
19c00 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
19c10 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
19c20 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
19c30 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
19c40 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
19c50 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
19c60 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
19c70 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
19c80 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
19c90 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
19ca0 6e 74 65 78 74 2a 29 29 3b 0a 69 6e 74 20 73 71  ntext*));.int sq
19cb0 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
19cc0 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
19cd0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
19ce0 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
19cf0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
19d00 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
19d10 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
19d20 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
19d30 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
19d40 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
19d50 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
19d60 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
19d70 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
19d80 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
19d90 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
19da0 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
19db0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
19dc0 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
19dd0 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
19de0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  );../*.** The in
19df0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
19e00 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
19e10 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
19e20 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
19e30 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
19e40 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
19e50 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
19e60 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
19e70 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
19e80 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
19e90 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
19ea0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
19eb0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
19ec0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
19ed0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
19ee0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
19ef0 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
19f00 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
19f10 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
19f20 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
19f30 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
19f40 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
19f50 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
19f60 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
19f70 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
19f80 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
19f90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
19fa0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
19fb0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
19fc0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
19fd0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
19fe0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
19ff0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1a000 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1a010 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
1a020 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1a030 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
1a040 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
1a050 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
1a060 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1a070 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1a080 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
1a090 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
1a0a0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
1a0b0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
1a0c0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
1a0d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
1a0e0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
1a0f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
1a100 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 65 6c  tabCommit(X).#el
1a110 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
1a120 65 33 56 74 61 62 43 6c 65 61 72 28 54 61 62 6c  e3VtabClear(Tabl
1a130 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
1a140 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
1a150 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a  te3 *db, char **
1a160 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
1a170 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
1a180 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
1a190 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
1a1a0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
1a1b0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
1a1c0 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
1a1d0 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
1a1e0 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
1a1f0 74 65 33 56 74 61 62 4c 6f 63 6b 28 73 71 6c 69  te3VtabLock(sqli
1a200 74 65 33 5f 76 74 61 62 2a 29 3b 0a 76 6f 69 64  te3_vtab*);.void
1a210 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
1a220 63 6b 28 73 71 6c 69 74 65 33 2a 2c 20 73 71 6c  ck(sqlite3*, sql
1a230 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 76 6f 69  ite3_vtab*);.voi
1a240 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
1a250 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
1a260 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
1a270 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1a280 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
1a290 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
1a2a0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1a2b0 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
1a2c0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1a2d0 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
1a2e0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
1a2f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
1a300 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
1a310 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
1a320 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
1a330 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
1a340 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
1a350 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
1a360 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
1a370 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
1a380 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
1a390 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
1a3a0 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
1a3b0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 5f  ite3 *, sqlite3_
1a3c0 76 74 61 62 20 2a 29 3b 0a 46 75 6e 63 44 65 66  vtab *);.FuncDef
1a3d0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
1a3e0 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
1a3f0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
1a400 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
1a410 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1a420 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
1a430 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
1a440 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
1a450 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ue**);.int sqlit
1a460 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
1a470 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
1a480 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
1a490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
1a4a0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
1a4b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1a4c0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
1a4d0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1a4e0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
1a4f0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
1a500 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
1a510 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
1a520 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
1a530 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
1a540 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
1a550 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
1a560 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
1a570 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
1a580 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
1a590 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
1a5a0 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
1a5b0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
1a5c0 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
1a5d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
1a5e0 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
1a5f0 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
1a600 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
1a610 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
1a620 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
1a630 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
1a640 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  ent if SQLITE_OM
1a650 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
1a660 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
1a670 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
1a680 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
1a690 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  N_TEST.  void sq
1a6a0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
1a6b0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
1a6c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
1a6d0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
1a6e0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
1a6f0 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
1a700 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
1a710 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
1a720 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
1a730 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65  .#endif..#define
1a740 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20   IN_INDEX_ROWID 
1a750 20 20 20 20 20 20 20 20 20 20 31 0a 23 64 65 66            1.#def
1a760 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 23               2.#
1a780 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
1a790 49 4e 44 45 58 20 20 20 20 20 20 20 20 20 20 20  INDEX           
1a7a0 33 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  3.int sqlite3Fin
1a7b0 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
1a7c0 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b  , Expr *, int*);
1a7d0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1a7e0 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
1a7f0 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
1a800 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
1a810 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
1a820 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
1a830 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
1a840 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
1a850 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
1a860 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20  lite3_vfs *);.  
1a870 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
1a880 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
1a890 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  _file *);.#else.
1a8a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
1a8b0 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66  3JournalSize(pVf
1a8c0 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73  s) ((pVfs)->szOs
1a8d0 46 69 6c 65 29 0a 23 65 6e 64 69 66 0a 0a 23 69  File).#endif..#i
1a8e0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
1a8f0 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64  R_DEPTH>0.  void
1a900 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
1a910 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61  eight(Parse *pPa
1a920 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20  rse, Expr *p);. 
1a930 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
1a940 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
1a950 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
1a960 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
1a970 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
1a980 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
1a990 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  ne sqlite3ExprSe
1a9a0 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23  tHeight(x,y).  #
1a9b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
1a9c0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
1a9d0 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
1a9e0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
1a9f0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
1aa00 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
1aa10 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
1aa20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
1aa30 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
1aa40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1aa50 5f 53 53 45 0a 23 69 6e 63 6c 75 64 65 20 22 73  _SSE.#include "s
1aa60 73 65 49 6e 74 2e 68 22 0a 23 65 6e 64 69 66 0a  seInt.h".#endif.
1aa70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1aa80 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
1aa90 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
1aaa0 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
1aab0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
1aac0 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
1aad0 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
1aae0 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
1aaf0 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
1ab00 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
1ab10 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
1ab20 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
1ab30 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
1ab40 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
1ab50 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
1ab60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1ab70 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
1ab80 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
1ab90 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
1aba0 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
1abb0 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
1abc0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
1abd0 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
1abe0 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64  LITE_EXTERN void
1abf0 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63   (*sqlite3IoTrac
1ac00 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
1ac10 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
1ac20 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
1ac30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
1ac40 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
1ac50 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 0a  .#endif..#endif.