/ Hex Artifact Content
Login

Artifact 1593404d8aee13687ca7b5d552cb153de7441bef:


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 30 37 20 32 30 30 38 2f 30 36  ,v 1.707 2008/06
01d0: 2f 30 36 20 31 35 3a 30 34 3a 33 37 20 64 72 68  /06 15:04:37 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 64 65 66 69 6e 65 20 5f  ... */.#define _
0460: 47 4e 55 5f 53 4f 55 52 43 45 0a 0a 2f 2a 0a 2a  GNU_SOURCE../*.*
0470: 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61  * Include standa
0480: 72 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20  rd header files 
0490: 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a  as necessary.*/.
04a0: 23 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49  #ifdef HAVE_STDI
04b0: 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73  NT_H.#include <s
04c0: 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a  tdint.h>.#endif.
04d0: 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54  #ifdef HAVE_INTT
04e0: 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20  YPES_H.#include 
04f0: 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e  <inttypes.h>.#en
0500: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  dif../*.** A mac
0510: 72 6f 20 75 73 65 64 20 74 6f 20 61 69 64 20 69  ro used to aid i
0520: 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  n coverage testi
0530: 6e 67 2e 20 20 57 68 65 6e 20 64 6f 69 6e 67 20  ng.  When doing 
0540: 63 6f 76 65 72 61 67 65 0a 2a 2a 20 74 65 73 74  coverage.** test
0550: 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69  ing, the conditi
0560: 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72  on inside the ar
0570: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65  gument must be e
0580: 76 61 6c 75 61 74 65 64 20 0a 2a 2a 20 62 6f 74  valuated .** bot
0590: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
05a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 65 74   in order to get
05b0: 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76   full branch cov
05c0: 65 72 61 67 65 2e 0a 2a 2a 20 54 68 69 73 20 6d  erage..** This m
05d0: 61 63 72 6f 20 63 61 6e 20 62 65 20 69 6e 73 65  acro can be inse
05e0: 72 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rted to ensure a
05f0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
0600: 65 72 61 67 65 0a 2a 2a 20 69 6e 20 70 6c 61 63  erage.** in plac
0610: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 20  es where simple 
0620: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
0630: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
0640: 6e 61 64 65 71 75 61 74 65 2e 0a 2a 2f 0a 23 69  nadequate..*/.#i
0650: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
0660: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
0670: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
0680: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
0690: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
06a0: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
06b0: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
06c0: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
06d0: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
06e0: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ndif.../*.** The
06f0: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
0700: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
0710: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
0720: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
0730: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
0740: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
0750: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
0760: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
0770: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
0780: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
0790: 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65 20 74  .  GCC is able t
07a0: 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20 68  o.** use these h
07b0: 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74 65  ints to generate
07c0: 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73 6f   better code, so
07d0: 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20  metimes..*/.#if 
07e0: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
07f0: 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65 20  ) && 0.# define 
0800: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f 62  likely(X)    __b
0810: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
0820: 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75 6e  ),1).# define un
0830: 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75 69  likely(X)  __bui
0840: 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c  ltin_expect((X),
0850: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
0860: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 21  e likely(X)    !
0870: 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75 6e  !(X).# define un
0880: 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58 29  likely(X)  !!(X)
0890: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
08a0: 54 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73  These #defines s
08b0: 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47  hould enable >2G
08c0: 42 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f  B file support o
08d0: 6e 20 50 6f 73 69 78 20 69 66 20 74 68 65 0a 2a  n Posix if the.*
08e0: 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65  * underlying ope
08f0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75  rating system su
0900: 70 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74  pports it.  If t
0910: 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c  he OS lacks.** l
0920: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0930: 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20  t, or if the OS 
0940: 69 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73  is windows, thes
0950: 65 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f  e should be no-o
0960: 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  ps..**.** Ticket
0970: 20 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41   #2739:  The _LA
0980: 52 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d  RGEFILE_SOURCE m
0990: 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72  acro must appear
09a0: 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73   before any.** s
09b0: 79 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e  ystem #includes.
09c0: 20 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c    Hence, this bl
09d0: 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74  ock of code must
09e0: 20 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72   be the very fir
09f0: 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c  st.** code in al
0a00: 6c 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a  l source files..
0a10: 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65  **.** Large file
0a20: 20 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20   support can be 
0a30: 64 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74  disabled using t
0a40: 68 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41  he -DSQLITE_DISA
0a50: 42 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a  BLE_LFS switch.*
0a60: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  * on the compile
0a70: 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20  r command line. 
0a80: 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61   This is necessa
0a90: 72 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f  ry if you are co
0aa0: 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20  mpiling.** on a 
0ab0: 72 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28  recent machine (
0ac0: 65 78 3a 20 52 65 64 48 61 74 20 37 2e 32 29 20  ex: RedHat 7.2) 
0ad0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0ae0: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0af0: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b00: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 48 61  chine (ex: RedHa
0b10: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0b20: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 48 61  compile on RedHa
0b30: 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75 74  t 7.2.** without
0b40: 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c 46   this option, LF
0b50: 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42 75  S is enable.  Bu
0b60: 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20 65  t LFS does not e
0b70: 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72 6e  xist in the kern
0b80: 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 48 61 74 20  el.** in RedHat 
0b90: 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f 64 65  6.0, so the code
0ba0: 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65   won't work.  He
0bb0: 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d  nce, for maximum
0bc0: 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61   binary.** porta
0bd0: 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f 75 6c  bility you shoul
0be0: 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a  d omit LFS..**.*
0bf0: 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75  * Similar is tru
0c00: 65 20 66 6f 72 20 4d 61 63 4f 53 2e 20 20 4c 46  e for MacOS.  LF
0c10: 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72  S is only suppor
0c20: 74 65 64 20 6f 6e 20 4d 61 63 4f 53 20 39 20 61  ted on MacOS 9 a
0c30: 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66  nd later..*/.#if
0c40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41  ndef SQLITE_DISA
0c50: 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65  BLE_LFS.# define
0c60: 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20   _LARGE_FILE    
0c70: 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46     1.# ifndef _F
0c80: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a  ILE_OFFSET_BITS.
0c90: 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45  #   define _FILE
0ca0: 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a  _OFFSET_BITS 64.
0cb0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
0cc0: 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52   _LARGEFILE_SOUR
0cd0: 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  CE 1.#endif.../*
0ce0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54  .** The SQLITE_T
0cf0: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20  HREADSAFE macro 
0d00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
0d10: 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  as either 0 or 1
0d20: 2e 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  ..** Older versi
0d30: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
0d40: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
0d50: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
0d60: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
0d70: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 0a 2a  hat for legacy.*
0d80: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
0d90: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
0da0: 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 48  ).#if defined(TH
0db0: 52 45 41 44 53 41 46 45 29 0a 23 20 64 65 66 69  READSAFE).# defi
0dc0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
0dd0: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
0de0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
0df0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
0e00: 20 31 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66   1.#endif.#endif
0e10: 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20  ../*.** Exactly 
0e20: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
0e30: 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74  wing macros must
0e40: 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f   be defined in o
0e50: 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69  rder to.** speci
0e60: 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20  fy which memory 
0e70: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79  allocation subsy
0e80: 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a  stem to use..**.
0e90: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59  **     SQLITE_SY
0ea0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  STEM_MALLOC     
0eb0: 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d       // Use norm
0ec0: 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  al system malloc
0ed0: 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ().**     SQLITE
0ee0: 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20  _MEMDEBUG       
0ef0: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67          // Debug
0f00: 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20  ging version of 
0f10: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
0f20: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
0f30: 4d 4f 52 59 5f 53 49 5a 45 20 20 20 20 20 20 20  MORY_SIZE       
0f40: 20 20 20 20 20 2f 2f 20 69 6e 74 65 72 6e 61 6c       // internal
0f50: 20 61 6c 6c 6f 63 61 74 6f 72 20 23 31 0a 2a 2a   allocator #1.**
0f60: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 4d 41 50       SQLITE_MMAP
0f70: 5f 48 45 41 50 5f 53 49 5a 45 20 20 20 20 20 20  _HEAP_SIZE      
0f80: 20 20 20 2f 2f 20 69 6e 74 65 72 6e 61 6c 20 6d     // internal m
0f90: 6d 61 70 28 29 20 61 6c 6c 6f 63 61 74 6f 72 0a  map() allocator.
0fa0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 50 4f  **     SQLITE_PO
0fb0: 57 32 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 20 20  W2_MEMORY_SIZE  
0fc0: 20 20 20 20 20 2f 2f 20 69 6e 74 65 72 6e 61 6c       // internal
0fd0: 20 70 6f 77 65 72 2d 6f 66 2d 74 77 6f 20 61 6c   power-of-two al
0fe0: 6c 6f 63 61 74 6f 72 0a 2a 2a 0a 2a 2a 20 49 66  locator.**.** If
0ff0: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
1000: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
1010: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
1020: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
1030: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
1040: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
1050: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1060: 4c 4c 4f 43 29 2b 64 65 66 69 6e 65 64 28 53 51  LLOC)+defined(SQ
1070: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 2b 5c  LITE_MEMDEBUG)+\
1080: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
1090: 49 54 45 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 29  ITE_MEMORY_SIZE)
10a0: 2b 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  +defined(SQLITE_
10b0: 4d 4d 41 50 5f 48 45 41 50 5f 53 49 5a 45 29 2b  MMAP_HEAP_SIZE)+
10c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
10d0: 4c 49 54 45 5f 50 4f 57 32 5f 4d 45 4d 4f 52 59  LITE_POW2_MEMORY
10e0: 5f 53 49 5a 45 29 3e 31 0a 23 20 65 72 72 6f 72  _SIZE)>1.# error
10f0: 20 22 41 74 20 6d 6f 73 74 20 6f 6e 65 20 6f 66   "At most one of
1100: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
1110: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
1120: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
1130: 73 5c 0a 20 69 73 20 61 6c 6c 6f 77 73 3a 20 53  s\. is allows: S
1140: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1150: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
1160: 45 42 55 47 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  EBUG, SQLITE_MEM
1170: 4f 52 59 5f 53 49 5a 45 2c 5c 0a 20 53 51 4c 49  ORY_SIZE,\. SQLI
1180: 54 45 5f 4d 4d 41 50 5f 48 45 41 50 5f 53 49 5a  TE_MMAP_HEAP_SIZ
1190: 45 2c 20 53 51 4c 49 54 45 5f 50 4f 57 32 5f 4d  E, SQLITE_POW2_M
11a0: 45 4d 4f 52 59 5f 53 49 5a 45 22 0a 23 65 6e 64  EMORY_SIZE".#end
11b0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
11c0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
11d0: 4c 4f 43 29 2b 64 65 66 69 6e 65 64 28 53 51 4c  LOC)+defined(SQL
11e0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 2b 5c 0a  ITE_MEMDEBUG)+\.
11f0: 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
1200: 54 45 5f 4d 45 4d 4f 52 59 5f 53 49 5a 45 29 2b  TE_MEMORY_SIZE)+
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1220: 4d 41 50 5f 48 45 41 50 5f 53 49 5a 45 29 2b 5c  MAP_HEAP_SIZE)+\
1230: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
1240: 49 54 45 5f 50 4f 57 32 5f 4d 45 4d 4f 52 59 5f  ITE_POW2_MEMORY_
1250: 53 49 5a 45 29 3d 3d 30 0a 23 20 64 65 66 69 6e  SIZE)==0.# defin
1260: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1270: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
1280: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
1290: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
12a0: 49 54 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  IT is defined, t
12b0: 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20  hen try to keep 
12c0: 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20  the.** sizes of 
12d0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12e0: 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61  ns below this va
12f0: 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62  lue where possib
1300: 6c 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  le..*/.#if defin
1310: 65 64 28 53 51 4c 49 54 45 5f 50 4f 57 32 5f 4d  ed(SQLITE_POW2_M
1320: 45 4d 4f 52 59 5f 53 49 5a 45 29 20 26 26 20 21  EMORY_SIZE) && !
1330: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1340: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1350: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1360: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1370: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1380: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1390: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
13a0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
13b0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
13c0: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
13d0: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
13e0: 74 20 75 6e 69 78 20 73 79 73 74 65 6d 73 2e 20  t unix systems. 
13f0: 20 42 75 74 20 4d 61 63 20 4f 53 20 58 20 69 73   But Mac OS X is
1400: 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 20 54   different..** T
1410: 68 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  he _XOPEN_SOURCE
1420: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
1430: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
1440: 4f 53 20 58 20 77 65 20 61 72 65 20 74 6f 6c 64  OS X we are told
1450: 2c 0a 2a 2a 20 73 6f 20 69 74 20 69 73 20 6f 6d  ,.** so it is om
1460: 69 74 74 65 64 20 74 68 65 72 65 2e 20 20 53 65  itted there.  Se
1470: 65 20 74 69 63 6b 65 74 20 23 32 36 37 33 2e 0a  e ticket #2673..
1480: 2a 2a 0a 2a 2a 20 4c 61 74 65 72 20 77 65 20 6c  **.** Later we l
1490: 65 61 72 6e 20 74 68 61 74 20 5f 58 4f 50 45 4e  earn that _XOPEN
14a0: 5f 53 4f 55 52 43 45 20 69 73 20 70 6f 6f 72 6c  _SOURCE is poorl
14b0: 79 20 6f 72 20 69 6e 63 6f 72 72 65 63 74 6c 79  y or incorrectly
14c0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .** implemented 
14d0: 6f 6e 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 2e  on some systems.
14e0: 20 20 53 6f 20 77 65 20 61 76 6f 69 64 20 64 65    So we avoid de
14f0: 66 69 6e 69 6e 67 20 69 74 20 61 74 20 61 6c 6c  fining it at all
1500: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 6c 72  .** if it is alr
1510: 65 61 64 79 20 64 65 66 69 6e 65 64 20 6f 72 20  eady defined or 
1520: 69 66 20 69 74 20 69 73 20 75 6e 6e 65 65 64 65  if it is unneede
1530: 64 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65  d because we are
1540: 0a 2a 2a 20 6e 6f 74 20 64 6f 69 6e 67 20 61 20  .** not doing a 
1550: 74 68 72 65 61 64 73 61 66 65 20 62 75 69 6c 64  threadsafe build
1560: 2e 20 20 54 69 63 6b 65 74 20 23 32 36 38 31 2e  .  Ticket #2681.
1570: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
1580: 74 69 63 6b 65 74 20 23 32 37 34 31 2e 0a 2a 2f  ticket #2741..*/
1590: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
15a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
15b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
15c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
15d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53  (__APPLE__) && S
15e0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
15f0: 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45  .#  define _XOPE
1600: 4e 5f 53 4f 55 52 43 45 20 35 30 30 20 20 2f 2a  N_SOURCE 500  /*
1610: 20 4e 65 65 64 65 64 20 74 6f 20 65 6e 61 62 6c   Needed to enabl
1620: 65 20 70 74 68 72 65 61 64 20 72 65 63 75 72 73  e pthread recurs
1630: 69 76 65 20 6d 75 74 65 78 65 73 20 2a 2f 0a 23  ive mutexes */.#
1640: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
1650: 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c  ed(SQLITE_TCL) |
1660: 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29  | defined(TCLSH)
1670: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e  .# include <tcl.
1680: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1690: 20 4d 61 6e 79 20 70 65 6f 70 6c 65 20 61 72 65   Many people are
16a0: 20 66 61 69 6c 69 6e 67 20 74 6f 20 73 65 74 20   failing to set 
16b0: 2d 44 4e 44 45 42 55 47 3d 31 20 77 68 65 6e 20  -DNDEBUG=1 when 
16c0: 63 6f 6d 70 69 6c 69 6e 67 20 53 51 4c 69 74 65  compiling SQLite
16d0: 2e 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45  ..** Setting NDE
16e0: 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f  BUG makes the co
16f0: 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 72  de smaller and r
1700: 75 6e 20 66 61 73 74 65 72 2e 20 20 53 6f 20 74  un faster.  So t
1710: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
1720: 6c 69 6e 65 73 20 61 72 65 20 61 64 64 65 64 20  lines are added 
1730: 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
1740: 20 73 65 74 20 4e 44 45 42 55 47 20 75 6e 6c 65   set NDEBUG unle
1750: 73 73 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ss the -DSQLITE_
1760: 44 45 42 55 47 3d 31 0a 2a 2a 20 6f 70 74 69 6f  DEBUG=1.** optio
1770: 6e 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20  n is set.  Thus 
1780: 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61  NDEBUG becomes a
1790: 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20  n opt-in rather 
17a0: 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a  than an opt-out.
17b0: 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23  ** feature..*/.#
17c0: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
17d0: 55 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UG) && !defined(
17e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23  SQLITE_DEBUG) .#
17f0: 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31   define NDEBUG 1
1800: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1810: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69  e "sqlite3.h".#i
1820: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
1830: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
1840: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
1850: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
1860: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
1870: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
1880: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
1890: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
18a0: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  ef.h>../*.** If 
18b0: 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20  compiling for a 
18c0: 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c  processor that l
18d0: 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f  acks floating po
18e0: 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20  int support,.** 
18f0: 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67  substitute integ
1900: 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d  er for floating-
1910: 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20  point.*/.#ifdef 
1920: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
1930: 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
1940: 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74  ine double sqlit
1950: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
1960: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
1970: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
1980: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
1990: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
19a0: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
19b0: 28 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66  (0x7ffffffffffff
19c0: 66 66 66 29 0a 23 20 65 6e 64 69 66 0a 23 20 64  fff).# endif.# d
19d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
19e0: 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
19f0: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
1a00: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a  TE_OMIT_TRACE 1.
1a10: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
1a20: 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49  IXED_ENDIAN_64BI
1a30: 54 5f 46 4c 4f 41 54 0a 23 65 6e 64 69 66 0a 23  T_FLOAT.#endif.#
1a40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
1a50: 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53  G_DBL.# define S
1a60: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31  QLITE_BIG_DBL (1
1a70: 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e99).#endif../*.
1a80: 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  ** OMIT_TEMPDB i
1a90: 73 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51  s set to 1 if SQ
1aa0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
1ab0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20   is defined, or 
1ac0: 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20  0.** afterward. 
1ad0: 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72  Having this macr
1ae0: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63  o allows us to c
1af0: 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69  ause the C compi
1b00: 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20  ler .** to omit 
1b10: 63 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d  code used by TEM
1b20: 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74  P tables without
1b30: 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73   messy #ifndef s
1b40: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69  tatements..*/.#i
1b50: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1b60: 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20  _TEMPDB.#define 
1b70: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65  OMIT_TEMPDB 1.#e
1b80: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  lse.#define OMIT
1b90: 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66  _TEMPDB 0.#endif
1ba0: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66  ../*.** If the f
1bb0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
1bc0: 73 20 73 65 74 20 74 6f 20 31 2c 20 74 68 65 6e  s set to 1, then
1bd0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
1be0: 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 64   considered.** d
1bf0: 69 73 74 69 6e 63 74 20 77 68 65 6e 20 64 65 74  istinct when det
1c00: 65 72 6d 69 6e 69 6e 67 20 77 68 65 74 68 65 72  ermining whether
1c10: 20 6f 72 20 6e 6f 74 20 74 77 6f 20 65 6e 74 72   or not two entr
1c20: 69 65 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ies are the same
1c30: 0a 2a 2a 20 69 6e 20 61 20 55 4e 49 51 55 45 20  .** in a UNIQUE 
1c40: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
1c50: 74 68 65 20 77 61 79 20 50 6f 73 74 67 72 65 53  the way PostgreS
1c60: 51 4c 2c 20 4f 72 61 63 6c 65 2c 20 44 42 32 2c  QL, Oracle, DB2,
1c70: 20 4d 79 53 51 4c 2c 0a 2a 2a 20 4f 43 45 4c 4f   MySQL,.** OCELO
1c80: 54 2c 20 61 6e 64 20 46 69 72 65 62 69 72 64 20  T, and Firebird 
1c90: 61 6c 6c 20 77 6f 72 6b 2e 20 20 54 68 65 20 53  all work.  The S
1ca0: 51 4c 39 32 20 73 70 65 63 20 65 78 70 6c 69 63  QL92 spec explic
1cb0: 69 74 6c 79 20 73 61 79 73 20 74 68 69 73 0a 2a  itly says this.*
1cc0: 2a 20 69 73 20 74 68 65 20 77 61 79 20 74 68 69  * is the way thi
1cd0: 6e 67 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ngs are suppose 
1ce0: 74 6f 20 77 6f 72 6b 2e 0a 2a 2a 0a 2a 2a 20 49  to work..**.** I
1cf0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1d00: 6d 61 63 72 6f 20 69 73 20 73 65 74 20 74 6f 20  macro is set to 
1d10: 30 2c 20 74 68 65 20 4e 55 4c 4c 73 20 61 72 65  0, the NULLs are
1d20: 20 69 6e 64 69 73 74 69 6e 63 74 20 66 6f 72 0a   indistinct for.
1d30: 2a 2a 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  ** a UNIQUE inde
1d40: 78 2e 20 20 49 6e 20 74 68 69 73 20 6d 6f 64 65  x.  In this mode
1d50: 2c 20 79 6f 75 20 63 61 6e 20 6f 6e 6c 79 20 68  , you can only h
1d60: 61 76 65 20 61 20 73 69 6e 67 6c 65 20 4e 55 4c  ave a single NUL
1d70: 4c 20 65 6e 74 72 79 0a 2a 2a 20 66 6f 72 20 61  L entry.** for a
1d80: 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 65 64   column declared
1d90: 20 55 4e 49 51 55 45 2e 20 20 54 68 69 73 20 69   UNIQUE.  This i
1da0: 73 20 74 68 65 20 77 61 79 20 49 6e 66 6f 72 6d  s the way Inform
1db0: 69 78 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65  ix and SQL Serve
1dc0: 72 0a 2a 2a 20 77 6f 72 6b 2e 0a 2a 2f 0a 23 64  r.** work..*/.#d
1dd0: 65 66 69 6e 65 20 4e 55 4c 4c 5f 44 49 53 54 49  efine NULL_DISTI
1de0: 4e 43 54 5f 46 4f 52 5f 55 4e 49 51 55 45 20 31  NCT_FOR_UNIQUE 1
1df0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c  ../*.** The "fil
1e00: 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72  e format" number
1e10: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
1e20: 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  hat is increment
1e30: 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74  ed whenever.** t
1e40: 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69  he VDBE-level fi
1e50: 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65  le format change
1e60: 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  s.  The followin
1e70: 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20  g macros define 
1e80: 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75  the.** the defau
1e90: 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66  lt file format f
1ea0: 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  or new databases
1eb0: 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d   and the maximum
1ec0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20   file format.** 
1ed0: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
1ee0: 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64   can read..*/.#d
1ef0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
1f00: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
1f10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
1f20: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
1f30: 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  T.# define SQLIT
1f40: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
1f50: 4f 52 4d 41 54 20 31 0a 23 65 6e 64 69 66 0a 0a  ORMAT 1.#endif..
1f60: 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20  /*.** Provide a 
1f70: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
1f80: 72 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  r TEMP_STORE in 
1f90: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
1fa0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
1fb0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
1fc0: 2a 2f 0a 23 69 66 6e 64 65 66 20 54 45 4d 50 5f  */.#ifndef TEMP_
1fd0: 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 54  STORE.# define T
1fe0: 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64  EMP_STORE 1.#end
1ff0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
2000: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
2010: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
2020: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
2030: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
2040: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
2050: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
2060: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
2070: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
2080: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
2090: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
20a0: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
20b0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
20c0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
20d0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
20e0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
20f0: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
2100: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
2110: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
2120: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
2130: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
2140: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
2150: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
2160: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
2170: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
2180: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
2190: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
21a0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
21b0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
21c0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
21d0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
21e0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
21f0: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
2200: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
2210: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
2220: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
2230: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
2240: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
2250: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
2260: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
2270: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
2280: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
2290: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
22a0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
22b0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
22c0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
22d0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
22e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
22f0: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
2300: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
2310: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
2320: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
2330: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
2340: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
2350: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
2360: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
2370: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
2380: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
2390: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
23a0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
23b0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
23c0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
23d0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
23e0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
23f0: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
2400: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
2410: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
2420: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
2430: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
2440: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
2450: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
2460: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
2470: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
2480: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
2490: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
24a0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
24b0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
24c0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
24d0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
24e0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
24f0: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
2500: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
2510: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
2520: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
2530: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
2540: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
2550: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
2560: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
2570: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
2580: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
2590: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
25a0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
25b0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
25c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
25d0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
25e0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
25f0: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
2600: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
2610: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
2620: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
2630: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
2640: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
2650: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
2660: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
2670: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
2680: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
2690: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
26a0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
26b0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
26c0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
26d0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
26e0: 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20  8_TYPE i8;      
26f0: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
2700: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
2710: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
2720: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
2730: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
2740: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
2750: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76  le endian,.** ev
2760: 61 6c 75 61 74 65 64 20 61 74 20 72 75 6e 74 69  aluated at runti
2770: 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  me..*/.#ifdef SQ
2780: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2790: 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  N.const int sqli
27a0: 74 65 33 6f 6e 65 3b 0a 23 65 6c 73 65 0a 65 78  te3one;.#else.ex
27b0: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
27c0: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69  qlite3one;.#endi
27d0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33  f.#if defined(i3
27e0: 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  86) || defined(_
27f0: 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69  _i386__) || defi
2800: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 0a 23 20 64  ned(_M_IX86).# d
2810: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2820: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
2830: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
2840: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
2850: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
2860: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
2870: 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 64  TF16LE.#else.# d
2880: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2890: 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61  ENDIAN    (*(cha
28a0: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
28b0: 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53  )==0).# define S
28c0: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
28d0: 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73  AN (*(char *)(&s
28e0: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23  qlite3one)==1).#
28f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
2900: 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c 49  TF16NATIVE (SQLI
2910: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
2920: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
2930: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
2940: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
2950: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
2960: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
2970: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
2980: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
2990: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
29a0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
29b0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
29c0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
29d0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
29e0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
29f0: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
2a00: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
2a10: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
2a20: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
2a30: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
2a40: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
2a50: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
2a60: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
2a70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
2a80: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
2a90: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
2aa0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
2ab0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
2ac0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
2ad0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
2ae0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
2af0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
2b00: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
2b10: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
2b20: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
2b30: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
2b40: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
2b50: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
2b60: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
2b70: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
2b80: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
2b90: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
2ba0: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
2bb0: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
2bc0: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
2bd0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
2be0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
2bf0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
2c00: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
2c10: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
2c20: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
2c30: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
2c40: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
2c50: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
2c60: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
2c70: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2c80: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
2c90: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
2ca0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
2cb0: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
2cc0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
2cd0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
2ce0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
2cf0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
2d00: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
2d10: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
2d20: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
2d30: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
2d40: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
2d50: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
2d60: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
2d70: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
2d80: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
2d90: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
2da0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
2db0: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
2dc0: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
2dd0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
2de0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
2df0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
2e00: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
2e10: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
2e20: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
2e30: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
2e40: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
2e50: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
2e60: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
2e70: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
2e80: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
2e90: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
2ea0: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
2eb0: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
2ec0: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
2ed0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
2ee0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
2ef0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
2f00: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
2f10: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
2f20: 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20 46  (X[0]))../*.** F
2f30: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
2f40: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
2f50: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
2f60: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
2f70: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
2f80: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
2f90: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
2fa0: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
2fb0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
2fc0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
2fd0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
2fe0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
2ff0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
3000: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
3010: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
3020: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
3030: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
3040: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
3050: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
3060: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
3070: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
3080: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
3090: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
30a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
30b0: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
30c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
30d0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
30e0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
30f0: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
3100: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
3110: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
3120: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
3130: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
3140: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
3150: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
3160: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
3170: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
3180: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
3190: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
31a0: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
31b0: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
31c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
31d0: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
31e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
31f0: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
3200: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
3210: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
3220: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
3230: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
3240: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
3250: 72 53 74 61 63 6b 20 54 72 69 67 67 65 72 53 74  rStack TriggerSt
3260: 61 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ack;.typedef str
3270: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
3280: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
3290: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
32a0: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
32b0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
32c0: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
32d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
32e0: 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72 65  WhereLevel Where
32f0: 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65  Level;../*.** De
3300: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
3310: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
3320: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
3330: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
3340: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
3350: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
3360: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
3370: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
3380: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
3390: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
33a0: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
33b0: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
33c0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
33d0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
33e0: 61 67 65 72 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ager.h"..#includ
33f0: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
3400: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a  e "mutex.h".../*
3410: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
3420: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
3430: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
3440: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
3450: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
3460: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
3470: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
3480: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
3490: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
34a0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
34b0: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
34c0: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
34d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
34e0: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
34f0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3500: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
3510: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
3520: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
3530: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
3540: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
3550: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
3560: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
3570: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
3580: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
3590: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
35a0: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
35b0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
35c0: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
35d0: 65 20 2a 2f 0a 20 20 75 38 20 69 6e 54 72 61 6e  e */.  u8 inTran
35e0: 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  s;          /* 0
35f0: 3a 20 6e 6f 74 20 77 72 69 74 61 62 6c 65 2e 20  : not writable. 
3600: 20 31 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 2e   1: Transaction.
3610: 20 20 32 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20    2: Checkpoint 
3620: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
3630: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
3640: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
3650: 79 6e 63 68 69 6e 67 20 64 61 74 61 20 74 6f 20  ynching data to 
3660: 64 69 73 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  disk */.  void *
3670: 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
3680: 20 20 20 20 2f 2a 20 41 75 78 69 6c 69 61 72 79      /* Auxiliary
3690: 20 64 61 74 61 2e 20 20 55 73 75 61 6c 6c 79 20   data.  Usually 
36a0: 4e 55 4c 4c 20 2a 2f 0a 20 20 76 6f 69 64 20 28  NULL */.  void (
36b0: 2a 78 46 72 65 65 41 75 78 29 28 76 6f 69 64 2a  *xFreeAux)(void*
36c0: 29 3b 20 20 2f 2a 20 52 6f 75 74 69 6e 65 20 74  );  /* Routine t
36d0: 6f 20 66 72 65 65 20 70 41 75 78 20 2a 2f 0a 20  o free pAux */. 
36e0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
36f0: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
3700: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
3710: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
3720: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
3730: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
3740: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
3750: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
3760: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
3770: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
3780: 72 65 20 61 72 65 20 6e 6f 20 76 69 72 74 75 61  re are no virtua
3790: 6c 20 74 61 62 6c 65 73 20 63 6f 6e 66 69 67 75  l tables configu
37a0: 72 65 64 20 69 6e 20 74 68 69 73 20 73 63 68 65  red in this sche
37b0: 6d 61 2c 20 74 68 65 0a 2a 2a 20 53 63 68 65 6d  ma, the.** Schem
37c0: 61 2e 64 62 20 76 61 72 69 61 62 6c 65 20 69 73  a.db variable is
37d0: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 41 66   set to NULL. Af
37e0: 74 65 72 20 74 68 65 20 66 69 72 73 74 20 76 69  ter the first vi
37f0: 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 68  rtual table.** h
3800: 61 73 20 62 65 65 6e 20 61 64 64 65 64 2c 20 69  as been added, i
3810: 74 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  t is set to poin
3820: 74 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  t to the databas
3830: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 0a 2a 2a  e connection .**
3840: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
3850: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  the connection. 
3860: 4f 6e 63 65 20 61 20 76 69 72 74 75 61 6c 20 74  Once a virtual t
3870: 61 62 6c 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a  able has been.**
3880: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 53 63   added to the Sc
3890: 68 65 6d 61 20 73 74 72 75 63 74 75 72 65 20 61  hema structure a
38a0: 6e 64 20 74 68 65 20 53 63 68 65 6d 61 2e 64 62  nd the Schema.db
38b0: 20 76 61 72 69 61 62 6c 65 20 70 6f 70 75 6c 61   variable popula
38c0: 74 65 64 2c 20 0a 2a 2a 20 6f 6e 6c 79 20 74 68  ted, .** only th
38d0: 61 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  at database conn
38e0: 65 63 74 69 6f 6e 20 6d 61 79 20 75 73 65 20 74  ection may use t
38f0: 68 65 20 53 63 68 65 6d 61 20 74 6f 20 70 72 65  he Schema to pre
3900: 70 61 72 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65  pare .** stateme
3910: 6e 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  nts..*/.struct S
3920: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
3930: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
3940: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
3950: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
3960: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
3970: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
3980: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
3990: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
39a0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
39b0: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
39c0: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
39d0: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
39e0: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
39f0: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
3a00: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
3a10: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
3a20: 65 20 2a 2f 0a 20 20 48 61 73 68 20 61 46 4b 65  e */.  Hash aFKe
3a30: 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  y;          /* F
3a40: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 64 65  oreign keys inde
3a50: 78 65 64 20 62 79 20 74 6f 2d 74 61 62 6c 65 20  xed by to-table 
3a60: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
3a70: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
3a80: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
3a90: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
3aa0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
3ab0: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
3ac0: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
3ad0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
3ae0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
3af0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
3b00: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
3b10: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
3b20: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
3b30: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
3b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
3b50: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3b60: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
3b70: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
3b80: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
3b90: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
3ba0: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
3bb0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3bc0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
3bd0: 4c 45 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  LE.  sqlite3 *db
3be0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 22 4f 77  ;         /* "Ow
3bf0: 6e 65 72 22 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ner" connection.
3c00: 20 53 65 65 20 63 6f 6d 6d 65 6e 74 20 61 62 6f   See comment abo
3c10: 76 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ve */.#endif.};.
3c20: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
3c30: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
3c40: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
3c50: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
3c60: 68 65 20 0a 2a 2a 20 44 62 2e 66 6c 61 67 73 20  he .** Db.flags 
3c70: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
3c80: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
3c90: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
3ca0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
3cb0: 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
3cc0: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
3cd0: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
3ce0: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
3cf0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  ].pSchema->flags
3d00: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
3d10: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
3d20: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
3d30: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
3d40: 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
3d50: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
3d60: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
3d70: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
3d80: 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
3d90: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
3da0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 66 6c  es for the DB.fl
3db0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
3dc0: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
3dd0: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
3de0: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
3df0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
3e00: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
3e10: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
3e20: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
3e30: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
3e40: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
3e50: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
3e60: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
3e70: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
3e80: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
3e90: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
3ea0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
3eb0: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
3ec0: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
3ed0: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
3ee0: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
3ef0: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
3f00: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
3f10: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
3f20: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
3f30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
3f40: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
3f50: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
3f60: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
3f70: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
3f80: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
3f90: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
3fa0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
3fb0: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
3fc0: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
3fd0: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
3fe0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
3ff0: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
4000: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
4010: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
4020: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
4030: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
4040: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
4050: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
4060: 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
4070: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  +1)../*.** Each 
4080: 64 61 74 61 62 61 73 65 20 69 73 20 61 6e 20 69  database is an i
4090: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
40a0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
40b0: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  re..**.** The sq
40c0: 6c 69 74 65 2e 6c 61 73 74 52 6f 77 69 64 20 72  lite.lastRowid r
40d0: 65 63 6f 72 64 73 20 74 68 65 20 6c 61 73 74 20  ecords the last 
40e0: 69 6e 73 65 72 74 20 72 6f 77 69 64 20 67 65 6e  insert rowid gen
40f0: 65 72 61 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20  erated by an.** 
4100: 69 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74  insert statement
4110: 2e 20 20 49 6e 73 65 72 74 73 20 6f 6e 20 76 69  .  Inserts on vi
4120: 65 77 73 20 64 6f 20 6e 6f 74 20 61 66 66 65 63  ews do not affec
4130: 74 20 69 74 73 20 76 61 6c 75 65 2e 20 20 45 61  t its value.  Ea
4140: 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 68 61  ch.** trigger ha
4150: 73 20 69 74 73 20 6f 77 6e 20 63 6f 6e 74 65 78  s its own contex
4160: 74 2c 20 73 6f 20 74 68 61 74 20 6c 61 73 74 52  t, so that lastR
4170: 6f 77 69 64 20 63 61 6e 20 62 65 20 75 70 64 61  owid can be upda
4180: 74 65 64 20 69 6e 73 69 64 65 0a 2a 2a 20 74 72  ted inside.** tr
4190: 69 67 67 65 72 73 20 61 73 20 75 73 75 61 6c 2e  iggers as usual.
41a0: 20 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 76    The previous v
41b0: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
41c0: 74 6f 72 65 64 20 6f 6e 63 65 20 74 68 65 20 74  tored once the t
41d0: 72 69 67 67 65 72 0a 2a 2a 20 65 78 69 74 73 2e  rigger.** exits.
41e0: 20 20 55 70 6f 6e 20 65 6e 74 65 72 69 6e 67 20    Upon entering 
41f0: 61 20 62 65 66 6f 72 65 20 6f 72 20 69 6e 73 74  a before or inst
4200: 65 61 64 20 6f 66 20 74 72 69 67 67 65 72 2c 20  ead of trigger, 
4210: 6c 61 73 74 52 6f 77 69 64 20 69 73 20 6e 6f 0a  lastRowid is no.
4220: 2a 2a 20 6c 6f 6e 67 65 72 20 28 73 69 6e 63 65  ** longer (since
4230: 20 61 66 74 65 72 20 76 65 72 73 69 6f 6e 20 32   after version 2
4240: 2e 38 2e 31 32 29 20 72 65 73 65 74 20 74 6f 20  .8.12) reset to 
4250: 2d 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  -1..**.** The sq
4260: 6c 69 74 65 2e 6e 43 68 61 6e 67 65 20 64 6f 65  lite.nChange doe
4270: 73 20 6e 6f 74 20 63 6f 75 6e 74 20 63 68 61 6e  s not count chan
4280: 67 65 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  ges within trigg
4290: 65 72 73 20 61 6e 64 20 6b 65 65 70 73 20 6e 6f  ers and keeps no
42a0: 0a 2a 2a 20 63 6f 6e 74 65 78 74 2e 20 20 49 74  .** context.  It
42b0: 20 69 73 20 72 65 73 65 74 20 61 74 20 73 74 61   is reset at sta
42c0: 72 74 20 6f 66 20 73 71 6c 69 74 65 33 5f 65 78  rt of sqlite3_ex
42d0: 65 63 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ec..** The sqlit
42e0: 65 2e 6c 73 43 68 61 6e 67 65 20 72 65 70 72 65  e.lsChange repre
42f0: 73 65 6e 74 73 20 74 68 65 20 6e 75 6d 62 65 72  sents the number
4300: 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64 65   of changes made
4310: 20 62 79 20 74 68 65 20 6c 61 73 74 0a 2a 2a 20   by the last.** 
4320: 69 6e 73 65 72 74 2c 20 75 70 64 61 74 65 2c 20  insert, update, 
4330: 6f 72 20 64 65 6c 65 74 65 20 73 74 61 74 65 6d  or delete statem
4340: 65 6e 74 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ent.  It remains
4350: 20 63 6f 6e 73 74 61 6e 74 20 74 68 72 6f 75 67   constant throug
4360: 68 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 65 6e 67  hout the.** leng
4370: 74 68 20 6f 66 20 61 20 73 74 61 74 65 6d 65 6e  th of a statemen
4380: 74 20 61 6e 64 20 69 73 20 74 68 65 6e 20 75 70  t and is then up
4390: 64 61 74 65 64 20 62 79 20 4f 50 5f 53 65 74 43  dated by OP_SetC
43a0: 6f 75 6e 74 73 2e 20 20 49 74 20 6b 65 65 70 73  ounts.  It keeps
43b0: 20 61 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 73 74   a.** context st
43c0: 61 63 6b 20 6a 75 73 74 20 6c 69 6b 65 20 6c 61  ack just like la
43d0: 73 74 52 6f 77 69 64 20 73 6f 20 74 68 61 74 20  stRowid so that 
43e0: 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 63 68 61  the count of cha
43f0: 6e 67 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 61  nges.** within a
4400: 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20   trigger is not 
4410: 73 65 65 6e 20 6f 75 74 73 69 64 65 20 74 68 65  seen outside the
4420: 20 74 72 69 67 67 65 72 2e 20 20 43 68 61 6e 67   trigger.  Chang
4430: 65 73 20 74 6f 20 76 69 65 77 73 20 64 6f 20 6e  es to views do n
4440: 6f 74 0a 2a 2a 20 61 66 66 65 63 74 20 74 68 65  ot.** affect the
4450: 20 76 61 6c 75 65 20 6f 66 20 6c 73 43 68 61 6e   value of lsChan
4460: 67 65 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ge..** The sqlit
4470: 65 2e 63 73 43 68 61 6e 67 65 20 6b 65 65 70 73  e.csChange keeps
4480: 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6e 75   track of the nu
4490: 6d 62 65 72 20 6f 66 20 63 75 72 72 65 6e 74 20  mber of current 
44a0: 63 68 61 6e 67 65 73 20 28 73 69 6e 63 65 0a 2a  changes (since.*
44b0: 2a 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65  * the last state
44c0: 6d 65 6e 74 29 20 61 6e 64 20 69 73 20 75 73 65  ment) and is use
44d0: 64 20 74 6f 20 75 70 64 61 74 65 20 73 71 6c 69  d to update sqli
44e0: 74 65 5f 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 0a  te_lsChange..**.
44f0: 2a 2a 20 54 68 65 20 6d 65 6d 62 65 72 20 76 61  ** The member va
4500: 72 69 61 62 6c 65 73 20 73 71 6c 69 74 65 2e 65  riables sqlite.e
4510: 72 72 43 6f 64 65 2c 20 73 71 6c 69 74 65 2e 7a  rrCode, sqlite.z
4520: 45 72 72 4d 73 67 20 61 6e 64 20 73 71 6c 69 74  ErrMsg and sqlit
4530: 65 2e 7a 45 72 72 4d 73 67 31 36 0a 2a 2a 20 73  e.zErrMsg16.** s
4540: 74 6f 72 65 20 74 68 65 20 6d 6f 73 74 20 72 65  tore the most re
4550: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
4560: 61 6e 64 2c 20 69 66 20 61 70 70 6c 69 63 61 62  and, if applicab
4570: 6c 65 2c 20 73 74 72 69 6e 67 2e 20 54 68 65 0a  le, string. The.
4580: 2a 2a 20 69 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** internal func
4590: 74 69 6f 6e 20 73 71 6c 69 74 65 33 45 72 72 6f  tion sqlite3Erro
45a0: 72 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 73  r() is used to s
45b0: 65 74 20 74 68 65 73 65 20 76 61 72 69 61 62 6c  et these variabl
45c0: 65 73 0a 2a 2a 20 63 6f 6e 73 69 73 74 65 6e 74  es.** consistent
45d0: 6c 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  ly..*/.struct sq
45e0: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
45f0: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
4600: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
4610: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 69 6e 74  terface */.  int
4620: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
4630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4640: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
4650: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
4660: 65 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  e */.  Db *aDb; 
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
4690: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  ends */.  int fl
46a0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
46b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
46c0: 6c 6c 61 6e 6f 75 73 20 66 6c 61 67 73 2e 20 53  llanous flags. S
46d0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e  ee below */.  in
46e0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
4700: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
4710: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
4720: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
4730: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
4740: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
4750: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
4760: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
4770: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4790: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
47a0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
47b0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
47c0: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
47e0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
47f0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
4800: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
4810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
4820: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
4830: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
4840: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4860: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
4870: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
4880: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
4890: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
48a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
48b0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
48c0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
48d0: 73 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4a 6f  s */.  u8 dfltJo
48e0: 75 72 6e 61 6c 4d 6f 64 65 3b 20 20 20 20 20 20  urnalMode;      
48f0: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
4900: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 66 6f 72  journal mode for
4910: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
4920: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
4930: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
4940: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
4950: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
4960: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 69 6e 74   if >=0 */.  int
4970: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
4980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
4990: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
49a0: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 69  UUM if >0 */.  i
49b0: 6e 74 20 6e 54 61 62 6c 65 3b 20 20 20 20 20 20  nt nTable;      
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
49d0: 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
49e0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
49f0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
4a00: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
4a10: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
4a20: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
4a30: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
4a40: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
4a50: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
4a60: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
4a70: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
4a80: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
4a90: 20 20 69 36 34 20 70 72 69 6f 72 4e 65 77 52 6f    i64 priorNewRo
4aa0: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
4ab0: 2f 2a 20 4c 61 73 74 20 72 61 6e 64 6f 6d 6c 79  /* Last randomly
4ac0: 20 67 65 6e 65 72 61 74 65 64 20 52 4f 57 49 44   generated ROWID
4ad0: 20 2a 2f 0a 20 20 69 6e 74 20 6d 61 67 69 63 3b   */.  int magic;
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
4b00: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
4b10: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
4b20: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b40: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
4b50: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
4b60: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
4b70: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
4b80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
4b90: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
4ba0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
4bb0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 73 71 6c  anges() */.  sql
4bc0: 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65  ite3_mutex *mute
4bd0: 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  x;         /* Co
4be0: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a  nnection mutex *
4bf0: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
4c00: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
4c10: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
4c20: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
4c30: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
4c40: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
4c50: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
4c60: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
4c70: 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
4c90: 68 65 6e 20 62 61 63 6b 20 69 73 20 62 65 69 6e  hen back is bein
4ca0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
4cb0: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
4cc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4cd0: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
4ce0: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
4cf0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
4d00: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
4d10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
4d20: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
4d30: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
4d40: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
4d50: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
4d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4d70: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
4d80: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
4d90: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
4db0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
4dc0: 69 62 72 61 72 61 79 20 68 61 6e 64 6c 65 73 20  ibraray handles 
4dd0: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
4de0: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
4df0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
4e00: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
4e10: 68 69 6e 65 73 20 2a 2f 0a 20 20 69 6e 74 20 61  hines */.  int a
4e20: 63 74 69 76 65 56 64 62 65 43 6e 74 3b 20 20 20  ctiveVdbeCnt;   
4e30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
4e40: 65 72 20 6f 66 20 76 64 62 65 73 20 63 75 72 72  er of vdbes curr
4e50: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
4e60: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
4e70: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
4e80: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
4e90: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
4ea0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
4eb0: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ed0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
4ee0: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
4ef0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
4f00: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
4f10: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
4f20: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
4f30: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
4f40: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f60: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
4f70: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
4f80: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
4f90: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4fb0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
4fc0: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
4fd0: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
4fe0: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
4ff0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
5000: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
5010: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
5020: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
5030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
5040: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
5050: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
5060: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
5070: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
5080: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
5090: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
50a0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
50b0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
50c0: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
50d0: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
50e0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
50f0: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
5100: 6e 74 36 34 29 3b 0a 20 20 76 6f 69 64 28 2a 78  nt64);.  void(*x
5110: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
5120: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
5130: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
5140: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
5150: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
5160: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
5170: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
5180: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
5190: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
51a0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
51b0: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
51c0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
51d0: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
51e0: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5200: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
5210: 72 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54 46  ror message (UTF
5220: 2d 38 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20  -8 encoded) */. 
5230: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 31 36   char *zErrMsg16
5240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
5250: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
5260: 72 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54 46  ror message (UTF
5270: 2d 31 36 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a  -16 encoded) */.
5280: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 69 6e    union {.    in
5290: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
52a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
52b0: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
52c0: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
52d0: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
52e0: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
52f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
5300: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 23  cer */.  } u1;.#
5310: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5320: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
5330: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
5340: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5350: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
5360: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
5370: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
53a0: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
53b0: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
53c0: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
53d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
53e0: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
53f0: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
5400: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
5410: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
5420: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5430: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
5440: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
5450: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
5460: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
5470: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
5480: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
5490: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
54a0: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
54b0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
54c0: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
54d0: 70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ps;             
54e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
54f0: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
5500: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
5510: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
5520: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
5530: 54 41 42 4c 45 0a 20 20 48 61 73 68 20 61 4d 6f  TABLE.  Hash aMo
5540: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
5550: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
5560: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
5570: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
5580: 0a 20 20 54 61 62 6c 65 20 2a 70 56 54 61 62 3b  .  Table *pVTab;
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55a0: 20 2f 2a 20 76 74 61 62 20 77 69 74 68 20 61 63   /* vtab with ac
55b0: 74 69 76 65 20 43 6f 6e 6e 65 63 74 2f 43 72 65  tive Connect/Cre
55c0: 61 74 65 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ate method */.  
55d0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2a 61  sqlite3_vtab **a
55e0: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 2f 2a  VTrans;       /*
55f0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
5600: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
5610: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ctions */.  int 
5620: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
5630: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
5640: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
5650: 56 54 72 61 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  VTrans */.#endif
5660: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 2f 2a 20 41 6c 6c 20 66 75 6e 63 74 69 6f 6e   /* All function
5690: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  s that can be in
56a0: 20 53 51 4c 20 65 78 70 72 73 20 2a 2f 0a 20 20   SQL exprs */.  
56b0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
56d0: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
56e0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
56f0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
5700: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
5710: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
5720: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
5730: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
5740: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
5750: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
5760: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
5770: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
5780: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
5790: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
57a0: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
57b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
57c0: 53 53 45 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  SSE.  sqlite3_st
57d0: 6d 74 20 2a 70 46 65 74 63 68 3b 20 20 20 20 20  mt *pFetch;     
57e0: 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 53      /* Used by S
57f0: 53 45 20 74 6f 20 66 65 74 63 68 20 73 74 6f 72  SE to fetch stor
5800: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f  ed statements */
5810: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
5820: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
5830: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
5840: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
5850: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43  ..*/.#define ENC
5860: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
5870: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
5880: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
5890: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
58a0: 73 71 6c 69 74 65 2e 66 6c 61 67 73 20 61 6e 64  sqlite.flags and
58b0: 20 6f 72 20 44 62 2e 66 6c 61 67 73 20 66 69 65   or Db.flags fie
58c0: 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 20 73 71  lds..**.** On sq
58d0: 6c 69 74 65 2e 66 6c 61 67 73 2c 20 74 68 65 20  lite.flags, the 
58e0: 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 20 76  SQLITE_InTrans v
58f0: 61 6c 75 65 20 6d 65 61 6e 73 20 74 68 61 74 20  alue means that 
5900: 77 65 20 68 61 76 65 0a 2a 2a 20 65 78 65 63 75  we have.** execu
5910: 74 65 64 20 61 20 42 45 47 49 4e 2e 20 20 4f 6e  ted a BEGIN.  On
5920: 20 44 62 2e 66 6c 61 67 73 2c 20 53 51 4c 49 54   Db.flags, SQLIT
5930: 45 5f 49 6e 54 72 61 6e 73 20 6d 65 61 6e 73 20  E_InTrans means 
5940: 61 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 74  a statement.** t
5950: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
5960: 74 69 76 65 20 6f 6e 20 74 68 61 74 20 70 61 72  tive on that par
5970: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
5980: 20 66 69 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   file..*/.#defin
5990: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
59a0: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
59b0: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
59c0: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
59d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
59e0: 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 20 20 20  QLITE_InTrans   
59f0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
5a00: 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 20 61   /* True if in a
5a10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
5a20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
5a30: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
5a40: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 6e 63  00000010  /* Unc
5a50: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
5a60: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
5a70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
5a80: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
5a90: 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77  0000020  /* Show
5aa0: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
5ab0: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
5ac0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
5ad0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
5ae0: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
5af0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
5b00: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
5b10: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
5b20: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
5b30: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
5b40: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
5b50: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b80: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
5b90: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
5ba0: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bd0: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
5be0: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
5bf0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
5c00: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
5c10: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
5c20: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
5c30: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
5c40: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5c70: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
5c80: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
5c90: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
5ca0: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  e       0x000002
5cb0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
5cc0: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
5cd0: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
5ce0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
5cf0: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30  ing    0x0000040
5d00: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
5d10: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
5d20: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
5d30: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
5d40: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30  ema    0x0000080
5d50: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
5d60: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
5d70: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
5d80: 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 20 20  TE_NoReadlock   
5d90: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
5da0: 20 52 65 61 64 6c 6f 63 6b 73 20 61 72 65 20 6f   Readlocks are o
5db0: 6d 69 74 74 65 64 20 77 68 65 6e 20 0a 20 20 20  mitted when .   
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5de0: 20 20 20 20 20 20 20 2a 2a 20 61 63 63 65 73 73         ** access
5df0: 69 6e 67 20 72 65 61 64 2d 6f 6e 6c 79 20 64 61  ing read-only da
5e00: 74 61 62 61 73 65 73 20 2a 2f 0a 23 64 65 66 69  tabases */.#defi
5e10: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
5e20: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
5e30: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
5e40: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
5e50: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
5e60: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
5e70: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
5e80: 30 34 30 30 30 20 2f 2a 20 46 6f 72 20 73 68 61  04000 /* For sha
5e90: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
5ea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
5eb0: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
5ec0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
5ed0: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
5ee0: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
5ef0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
5f00: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
5f10: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
5f20: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
5f30: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
5f40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5f50: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
5f60: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
5f70: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
5f80: 69 6f 6e 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ion */..#define 
5f90: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
5fa0: 6f 64 65 20 20 20 30 78 30 30 30 34 30 30 30 30  ode   0x00040000
5fb0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
5fc0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
5fd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 61 72  fine SQLITE_Shar
5fe0: 65 64 43 61 63 68 65 20 20 20 20 30 78 30 30 30  edCache    0x000
5ff0: 38 30 30 30 30 20 20 2f 2a 20 43 61 63 68 65 20  80000  /* Cache 
6000: 73 68 61 72 69 6e 67 20 69 73 20 65 6e 61 62 6c  sharing is enabl
6010: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
6020: 4c 49 54 45 5f 56 74 61 62 20 20 20 20 20 20 20  LITE_Vtab       
6030: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
6040: 2f 2a 20 54 68 65 72 65 20 65 78 69 73 74 73 20  /* There exists 
6050: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
6060: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  */../*.** Possib
6070: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
6080: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
6090: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
60a0: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
60b0: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
60c0: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
60d0: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
60e0: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
60f0: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
6100: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
6110: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
6120: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
6130: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
6140: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
6150: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
6160: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
6170: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
6180: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
6190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
61a0: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
61b0: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
61c0: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
61d0: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
61e0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
61f0: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
6200: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
6210: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
6220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6230: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
6240: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
6250: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
6260: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
6270: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
6280: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
6290: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
62a0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
62b0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
62c0: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
62d0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
62e0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
62f0: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
6300: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
6310: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
6320: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
6330: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
6340: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
6350: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
6360: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
6370: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
6380: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
6390: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
63a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
63b0: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
63c0: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
63d0: 20 2a 2f 0a 20 20 75 38 20 69 50 72 65 66 45 6e   */.  u8 iPrefEn
63e0: 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72  c;         /* Pr
63f0: 65 66 65 72 72 65 64 20 74 65 78 74 20 65 6e 63  eferred text enc
6400: 6f 64 69 6e 67 20 28 53 51 4c 49 54 45 5f 55 54  oding (SQLITE_UT
6410: 46 38 2c 20 31 36 4c 45 2c 20 31 36 42 45 29 20  F8, 16LE, 16BE) 
6420: 2a 2f 0a 20 20 75 38 20 6e 65 65 64 43 6f 6c 6c  */.  u8 needColl
6430: 53 65 71 3b 20 20 20 20 20 20 2f 2a 20 54 72 75  Seq;      /* Tru
6440: 65 20 69 66 20 73 71 6c 69 74 65 33 47 65 74 46  e if sqlite3GetF
6450: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
6460: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
6470: 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20    u8 flags;     
6480: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
6490: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
64a0: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
64b0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
64c0: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
64d0: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
64e0: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
64f0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
6500: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
6510: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
6520: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
6530: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
6540: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
6550: 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63   /* Regular func
6560: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
6570: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
6580: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
6590: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
65a0: 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70  * Aggregate step
65b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
65c0: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
65d0: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
65e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
65f0: 72 65 67 61 74 65 20 66 69 6e 69 61 6c 69 7a 65  regate finialize
6600: 72 20 2a 2f 0a 20 20 63 68 61 72 20 7a 4e 61 6d  r */.  char zNam
6610: 65 5b 31 5d 3b 20 20 20 20 20 20 20 2f 2a 20 53  e[1];       /* S
6620: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
6630: 75 6e 63 74 69 6f 6e 2e 20 20 4d 55 53 54 20 42  unction.  MUST B
6640: 45 20 4c 41 53 54 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  E LAST */.};../*
6650: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
6660: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
6670: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
6680: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
6690: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
66a0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
66b0: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
66c0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
66d0: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
66e0: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
66f0: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
6700: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
6710: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
6720: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
6730: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
6740: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6760: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
6770: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
6780: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
6790: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
67b0: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
67c0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
67d0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
67e0: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
67f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
6800: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
6810: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
6820: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
6830: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
6840: 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
6850: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b   SQLITE_FUNC_LIK
6860: 45 20 20 20 30 78 30 31 20 20 2f 2a 20 43 61 6e  E   0x01  /* Can
6870: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
6880: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
6890: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
68a0: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 30  TE_FUNC_CASE   0
68b0: 78 30 32 20 20 2f 2a 20 43 61 73 65 2d 73 65 6e  x02  /* Case-sen
68c0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
68d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
68e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
68f0: 5f 45 50 48 45 4d 20 20 30 78 30 34 20 20 2f 2a  _EPHEM  0x04  /*
6900: 20 45 70 68 65 72 6d 65 72 61 6c 2e 20 20 44 65   Ephermeral.  De
6910: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
6920: 2f 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  /../*.** informa
6930: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
6940: 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
6950: 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
6960: 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
6970: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
6980: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
6990: 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
69a0: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
69b0: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
69c0: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
69d0: 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
69e0: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
69f0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
6a00: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
6a10: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
6a20: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
6a30: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
6a40: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
6a50: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
6a60: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
6a70: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
6a80: 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
6a90: 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
6aa0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
6ab0: 20 2a 2f 0a 20 20 75 38 20 69 73 50 72 69 6d 4b   */.  u8 isPrimK
6ac0: 65 79 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ey;    /* True i
6ad0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69 73  f this column is
6ae0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49   part of the PRI
6af0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 63 68  MARY KEY */.  ch
6b00: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
6b10: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
6b20: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
6b30: 65 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  es */.#ifndef SQ
6b40: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
6b50: 4c 54 41 42 4c 45 0a 20 20 75 38 20 69 73 48 69  LTABLE.  u8 isHi
6b60: 64 64 65 6e 3b 20 20 20 20 20 2f 2a 20 54 72 75  dden;     /* Tru
6b70: 65 20 69 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e if this column
6b80: 20 69 73 20 27 68 69 64 64 65 6e 27 20 2a 2f 0a   is 'hidden' */.
6b90: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
6ba0: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
6bb0: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
6bc0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
6bd0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
6be0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
6bf0: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
6c00: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
6c10: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
6c20: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
6c30: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
6c40: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
6c50: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
6c60: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
6c70: 2a 20 54 68 65 72 65 20 6d 61 79 20 74 77 6f 20  * There may two 
6c80: 73 65 70 65 72 61 74 65 20 69 6d 70 6c 65 6d 65  seperate impleme
6c90: 6e 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  ntations of the 
6ca0: 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69  collation functi
6cb0: 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20 74 68 61 74 20  on, one.** that 
6cc0: 70 72 6f 63 65 73 73 65 73 20 74 65 78 74 20 69  processes text i
6cd0: 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  n UTF-8 encoding
6ce0: 20 28 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 29 20   (CollSeq.xCmp) 
6cf0: 61 6e 64 20 61 6e 6f 74 68 65 72 20 74 68 61 74  and another that
6d00: 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 74 65  .** processes te
6d10: 78 74 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  xt encoded in UT
6d20: 46 2d 31 36 20 28 43 6f 6c 6c 53 65 71 2e 78 43  F-16 (CollSeq.xC
6d30: 6d 70 31 36 29 2c 20 75 73 69 6e 67 20 74 68 65  mp16), using the
6d40: 20 6d 61 63 68 69 6e 65 0a 2a 2a 20 6e 61 74 69   machine.** nati
6d50: 76 65 20 62 79 74 65 20 6f 72 64 65 72 2e 20 57  ve byte order. W
6d60: 68 65 6e 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  hen a collation 
6d70: 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 76 6f  sequence is invo
6d80: 6b 65 64 2c 20 53 51 4c 69 74 65 20 73 65 6c 65  ked, SQLite sele
6d90: 63 74 73 0a 2a 2a 20 74 68 65 20 76 65 72 73 69  cts.** the versi
6da0: 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 72 65 71  on that will req
6db0: 75 69 72 65 20 74 68 65 20 6c 65 61 73 74 20 65  uire the least e
6dc0: 78 70 65 6e 73 69 76 65 20 65 6e 63 6f 64 69 6e  xpensive encodin
6dd0: 67 0a 2a 2a 20 74 72 61 6e 73 6c 61 74 69 6f 6e  g.** translation
6de0: 73 2c 20 69 66 20 61 6e 79 2e 0a 2a 2a 0a 2a 2a  s, if any..**.**
6df0: 20 54 68 65 20 43 6f 6c 6c 53 65 71 2e 70 55 73   The CollSeq.pUs
6e00: 65 72 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  er member variab
6e10: 6c 65 20 69 73 20 61 6e 20 65 78 74 72 61 20 70  le is an extra p
6e20: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 70 61  arameter that pa
6e30: 73 73 65 64 20 69 6e 0a 2a 2a 20 61 73 20 74 68  ssed in.** as th
6e40: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
6e50: 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 63 6f   to the UTF-8 co
6e60: 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
6e70: 6e 2c 20 78 43 6d 70 2e 0a 2a 2a 20 43 6f 6c 6c  n, xCmp..** Coll
6e80: 53 65 71 2e 70 55 73 65 72 31 36 20 69 73 20 74  Seq.pUser16 is t
6e90: 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 66 6f  he equivalent fo
6ea0: 72 20 74 68 65 20 55 54 46 2d 31 36 20 63 6f 6d  r the UTF-16 com
6eb0: 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
6ec0: 2c 0a 2a 2a 20 78 43 6d 70 31 36 2e 0a 2a 2a 0a  ,.** xCmp16..**.
6ed0: 2a 2a 20 49 66 20 62 6f 74 68 20 43 6f 6c 6c 53  ** If both CollS
6ee0: 65 71 2e 78 43 6d 70 20 61 6e 64 20 43 6f 6c 6c  eq.xCmp and Coll
6ef0: 53 65 71 2e 78 43 6d 70 31 36 20 61 72 65 20 4e  Seq.xCmp16 are N
6f00: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
6f10: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
6f20: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
6f30: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
6f40: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
6f50: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
6f60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
6f70: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
6f80: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
6f90: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
6fa0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
6fb0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
6fc0: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
6fd0: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
6fe0: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
6ff0: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
7000: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
7010: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
7020: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 75 38 20 74  xCmp() */.  u8 t
7030: 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ype;            
7040: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
7050: 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 2e 2e 2e 20  SQLITE_COLL_... 
7060: 76 61 6c 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  values below */.
7070: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
7080: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7090: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
70a0: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
70b0: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
70c0: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
70d0: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
70e0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
70f0: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
7100: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
7110: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
7120: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 43  owed values of C
7130: 6f 6c 6c 53 65 71 20 66 6c 61 67 73 3a 0a 2a 2f  ollSeq flags:.*/
7140: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
7150: 43 4f 4c 4c 5f 42 49 4e 41 52 59 20 20 31 20 20  COLL_BINARY  1  
7160: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d  /* The default m
7170: 65 6d 63 6d 70 28 29 20 63 6f 6c 6c 61 74 69 6e  emcmp() collatin
7180: 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64  g sequence */.#d
7190: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c  efine SQLITE_COL
71a0: 4c 5f 4e 4f 43 41 53 45 20 20 32 20 20 2f 2a 20  L_NOCASE  2  /* 
71b0: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 4e 4f 43  The built-in NOC
71c0: 41 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ASE collating se
71d0: 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  quence */.#defin
71e0: 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 52 45  e SQLITE_COLL_RE
71f0: 56 45 52 53 45 20 33 20 20 2f 2a 20 54 68 65 20  VERSE 3  /* The 
7200: 62 75 69 6c 74 2d 69 6e 20 52 45 56 45 52 53 45  built-in REVERSE
7210: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
7220: 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nce */.#define S
7230: 51 4c 49 54 45 5f 43 4f 4c 4c 5f 55 53 45 52 20  QLITE_COLL_USER 
7240: 20 20 20 30 20 20 2f 2a 20 41 6e 79 20 6f 74 68     0  /* Any oth
7250: 65 72 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  er user-defined 
7260: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
7270: 63 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  ce */../*.** A s
7280: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
7290: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
72a0: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
72b0: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
72c0: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
72d0: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
72e0: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
72f0: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
7300: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
7310: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
7320: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
7330: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
7340: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
7350: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
7360: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
7370: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
7380: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
7390: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
73a0: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
73b0: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
73c0: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
73d0: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
73e0: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
73f0: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  er the values co
7400: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
7410: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
7420: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
7430: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
7440: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
7450: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
7460: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
7470: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
7480: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
7490: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
74a0: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
74b0: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
74c0: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
74d0: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
74e0: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
74f0: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
7500: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
7510: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
7520: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
7530: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
7540: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
7550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
7560: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
7570: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
7580: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
7590: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
75a0: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
75b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
75c0: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
75d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
75e0: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
75f0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
7600: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
7610: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
7620: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
7630: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
7640: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
7650: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
7660: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
7670: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
7680: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
7690: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
76a0: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
76b0: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
76c0: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
76d0: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
76e0: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
76f0: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
7700: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
7710: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
7720: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
7730: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
7740: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
7750: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
7760: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 55 41 4c  SQLITE_NULLEQUAL
7770: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 63 6f 6d      0x10  /* com
7780: 70 61 72 65 20 4e 55 4c 4c 73 20 65 71 75 61 6c  pare NULLs equal
7790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
77a0: 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
77b0: 30 78 38 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x80  /* Store r
77c0: 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
77d0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
77e0: 70 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  p */../*.** Each
77f0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65   SQL table is re
7800: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
7810: 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ory by an instan
7820: 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c  ce of the.** fol
7830: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7840: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e  ..**.** Table.zN
7850: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
7860: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
7870: 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f  he case of the o
7880: 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54  riginal.** CREAT
7890: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
78a0: 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74  t is stored, but
78b0: 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67   case is not sig
78c0: 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20  nificant for.** 
78d0: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a  comparisons..**.
78e0: 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73  ** Table.nCol is
78f0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
7900: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
7910: 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f  able.  Table.aCo
7920: 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  l is a.** pointe
7930: 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  r to an array of
7940: 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72   Column structur
7950: 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  es, one for each
7960: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49   column..**.** I
7970: 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  f the table has 
7980: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
7990: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62  RY KEY, then Tab
79a0: 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  le.iPKey is the 
79b0: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
79c0: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
79d0: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
79e0: 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79  wise Table.iPKey
79f0: 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   is negative.  N
7a00: 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ote.** that the 
7a10: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
7a20: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
7a30: 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20   be INTEGER for 
7a40: 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a  this field to.**
7a50: 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54   be set.  An INT
7a60: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7a70: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
7a80: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
7a90: 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62  ow of.** the tab
7aa0: 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20  le.  If a table 
7ab0: 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50  has no INTEGER P
7ac0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
7ad0: 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a   a random rowid.
7ae0: 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  ** is generated 
7af0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
7b00: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 61 62 6c  the table.  Tabl
7b10: 65 2e 68 61 73 50 72 69 6d 4b 65 79 20 69 73 20  e.hasPrimKey is 
7b20: 74 72 75 65 20 69 66 0a 2a 2a 20 74 68 65 20 74  true if.** the t
7b30: 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49  able has any PRI
7b40: 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45  MARY KEY, INTEGE
7b50: 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a  R or otherwise..
7b60: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d  **.** Table.tnum
7b70: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
7b80: 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74  ber for the root
7b90: 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74   BTree page of t
7ba0: 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a  he table in the.
7bb0: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
7bc0: 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20  .  If Table.iDb 
7bd0: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
7be0: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
7bf0: 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e  le backend.** in
7c00: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20   sqlite.aDb[].  
7c10: 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69  0 is for the mai
7c20: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31  n database and 1
7c30: 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65   is for the file
7c40: 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74   that.** holds t
7c50: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
7c60: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66  and indices.  If
7c70: 20 54 61 62 6c 65 2e 69 73 45 70 68 65 6d 0a 2a   Table.isEphem.*
7c80: 2a 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  * is true, then 
7c90: 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f  the table is sto
7ca0: 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68  red in a file th
7cb0: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
7cc0: 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77  lly deleted.** w
7cd0: 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75 72  hen the VDBE cur
7ce0: 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65  sor to the table
7cf0: 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20   is closed.  In 
7d00: 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e  this case Table.
7d10: 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20  tnum .** refers 
7d20: 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
7d30: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
7d40: 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f  e table open, no
7d50: 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a  t to the root.**
7d60: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54   page number.  T
7d70: 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20  ransient tables 
7d80: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
7d90: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
7da0: 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74  a.** sub-query t
7db0: 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73 74  hat appears inst
7dc0: 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61  ead of a real ta
7dd0: 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20  ble name in the 
7de0: 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20  FROM clause .** 
7df0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
7e00: 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
7e10: 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
7e20: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
7e30: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
7e40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
7e50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7e60: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
7e70: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 43  his table */.  C
7e80: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
7e90: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
7ea0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
7eb0: 20 2a 2f 0a 20 20 69 6e 74 20 69 50 4b 65 79 3b   */.  int iPKey;
7ec0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
7ed0: 20 6c 65 73 73 20 74 68 65 6e 20 30 2c 20 75 73   less then 0, us
7ee0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
7ef0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
7f00: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
7f10: 64 65 78 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  dex;   /* List o
7f20: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
7f30: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
7f40: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
7f50: 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
7f60: 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74   node for this t
7f70: 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61  able (see note a
7f80: 62 6f 76 65 29 20 2a 2f 0a 20 20 53 65 6c 65 63  bove) */.  Selec
7f90: 74 20 2a 70 53 65 6c 65 63 74 3b 20 2f 2a 20 4e  t *pSelect; /* N
7fa0: 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
7fb0: 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
7fc0: 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
7fd0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
7fe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7ff0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
8000: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
8010: 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
8020: 67 65 72 3b 20 2f 2a 20 4c 69 73 74 20 6f 66 20  ger; /* List of 
8030: 53 51 4c 20 74 72 69 67 67 65 72 73 20 6f 6e 20  SQL triggers on 
8040: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
8050: 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
8060: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
8070: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
8080: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
8090: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
80a0: 43 6f 6c 41 66 66 3b 20 20 20 20 20 2f 2a 20 53  ColAff;     /* S
80b0: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
80c0: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
80d0: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69  ach column */.#i
80e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
80f0: 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 20 2a  T_CHECK.  Expr *
8100: 70 43 68 65 63 6b 3b 20 20 20 20 20 20 2f 2a 20  pCheck;      /* 
8110: 54 68 65 20 41 4e 44 20 6f 66 20 61 6c 6c 20 43  The AND of all C
8120: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
8130: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
8140: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
8150: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
8160: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 2f  addColOffset;  /
8170: 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
8180: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
8190: 6e 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  nt to add a new 
81a0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
81b0: 0a 20 20 75 38 20 72 65 61 64 4f 6e 6c 79 3b 20  .  u8 readOnly; 
81c0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
81d0: 68 69 73 20 74 61 62 6c 65 20 73 68 6f 75 6c 64  his table should
81e0: 20 6e 6f 74 20 62 65 20 77 72 69 74 74 65 6e 20   not be written 
81f0: 62 79 20 74 68 65 20 75 73 65 72 20 2a 2f 0a 20  by the user */. 
8200: 20 75 38 20 69 73 45 70 68 65 6d 3b 20 20 20 20   u8 isEphem;    
8210: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 72 65    /* True if cre
8220: 61 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 4f 70  ated using OP_Op
8230: 65 6e 45 70 68 65 72 6d 65 72 61 6c 20 2a 2f 0a  enEphermeral */.
8240: 20 20 75 38 20 68 61 73 50 72 69 6d 4b 65 79 3b    u8 hasPrimKey;
8250: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
8260: 65 72 65 20 65 78 69 73 74 73 20 61 20 70 72 69  ere exists a pri
8270: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 75 38  mary key */.  u8
8280: 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 2f   keyConf;      /
8290: 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
82a0: 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
82b0: 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
82c0: 50 4b 65 79 20 2a 2f 0a 20 20 75 38 20 61 75 74  PKey */.  u8 aut
82d0: 6f 49 6e 63 3b 20 20 20 20 20 20 2f 2a 20 54 72  oInc;      /* Tr
82e0: 75 65 20 69 66 20 74 68 65 20 69 6e 74 65 67 65  ue if the intege
82f0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
8300: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
8310: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
8320: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
8330: 4c 45 0a 20 20 75 38 20 69 73 56 69 72 74 75 61  LE.  u8 isVirtua
8340: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
8350: 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
8360: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
8370: 65 20 2a 2f 0a 20 20 75 38 20 69 73 43 6f 6d 6d  e */.  u8 isComm
8380: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
8390: 20 2f 2a 20 54 72 75 65 20 6f 6e 63 65 20 74 68   /* True once th
83a0: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 68  e CREATE TABLE h
83b0: 61 73 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65  as been committe
83c0: 64 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  d */.  Module *p
83d0: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
83e0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
83f0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
8400: 6e 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  n of the module 
8410: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
8420: 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
8430: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  * Pointer to the
8440: 20 6d 6f 64 75 6c 65 20 69 6e 73 74 61 6e 63 65   module instance
8450: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c   */.  int nModul
8460: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
8470: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
8480: 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
8490: 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
84a0: 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  *azModuleArg;   
84b0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61      /* Text of a
84c0: 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20  ll module args. 
84d0: 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61  [0] is module na
84e0: 6d 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 53  me */.#endif.  S
84f0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
8500: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
8510: 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
8520: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 7d   this table */.}
8530: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  ;../*.** Test to
8540: 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
8550: 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
8560: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
8570: 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
8580: 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
8590: 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
85a0: 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
85b0: 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
85c0: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
85d0: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
85e0: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
85f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
8600: 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
8610: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
8620: 20 20 20 20 20 20 28 28 58 29 2d 3e 69 73 56 69        ((X)->isVi
8630: 72 74 75 61 6c 29 0a 23 20 20 64 65 66 69 6e 65  rtual).#  define
8640: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
8650: 58 29 20 28 28 58 29 2d 3e 69 73 48 69 64 64 65  X) ((X)->isHidde
8660: 6e 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  n).#else.#  defi
8670: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
8680: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
8690: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
86a0: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  X) 0.#endif../*.
86b0: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
86c0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
86d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
86e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
86f0: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
8700: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
8710: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8720: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
8730: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
8740: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
8750: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
8760: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
8770: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
8780: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
8790: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
87a0: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
87b0: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
87c0: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
87d0: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
87e0: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
87f0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
8800: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
8810: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
8820: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
8830: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
8840: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
8850: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
8860: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
8870: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
8880: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
8890: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
88a0: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
88b0: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
88c0: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
88d0: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
88e0: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
88f0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
8900: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
8910: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
8920: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
8930: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
8940: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
8950: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
8960: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
8970: 64 2e 20 20 54 68 65 20 65 78 69 73 74 61 6e 63  d.  The existanc
8980: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
8990: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
89a0: 0a 2a 2a 20 75 6e 74 69 6c 20 61 6e 20 61 74 74  .** until an att
89b0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
89c0: 69 6e 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f  insert data into
89d0: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
89e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  .**.** The sqlit
89f0: 65 2e 61 46 4b 65 79 20 68 61 73 68 20 74 61 62  e.aFKey hash tab
8a00: 6c 65 20 73 74 6f 72 65 73 20 70 6f 69 6e 74 65  le stores pointe
8a10: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
8a20: 74 75 72 65 0a 2a 2a 20 67 69 76 65 6e 20 74 68  ture.** given th
8a30: 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 6f 2d 74  e name of a to-t
8a40: 61 62 6c 65 2e 20 20 46 6f 72 20 65 61 63 68 20  able.  For each 
8a50: 74 6f 2d 74 61 62 6c 65 2c 20 61 6c 6c 20 66 6f  to-table, all fo
8a60: 72 65 69 67 6e 20 6b 65 79 73 0a 2a 2a 20 61 73  reign keys.** as
8a70: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
8a80: 61 74 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 20  at table are on 
8a90: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 75 73  a linked list us
8aa0: 69 6e 67 20 74 68 65 20 46 4b 65 79 2e 70 4e 65  ing the FKey.pNe
8ab0: 78 74 54 6f 0a 2a 2a 20 66 69 65 6c 64 2e 0a 2a  xtTo.** field..*
8ac0: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
8ad0: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
8ae0: 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
8af0: 20 74 68 61 74 20 63 6f 6e 73 74 61 69 6e 73 20   that constains 
8b00: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
8b10: 6c 61 75 73 65 20 2a 2f 0a 20 20 46 4b 65 79 20  lause */.  FKey 
8b20: 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
8b30: 4e 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79  Next foreign key
8b40: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   in pFrom */.  c
8b50: 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
8b60: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
8b70: 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
8b80: 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 46 4b  oints to */.  FK
8b90: 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
8ba0: 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20  /* Next foreign 
8bb0: 6b 65 79 20 74 68 61 74 20 70 6f 69 6e 74 73 20  key that points 
8bc0: 74 6f 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  to zTo */.  int 
8bd0: 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
8be0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
8bf0: 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
8c00: 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
8c10: 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67  ap {  /* Mapping
8c20: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
8c30: 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
8c40: 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
8c50: 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
8c60: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
8c70: 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
8c80: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
8c90: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
8ca0: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
8cb0: 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d 41    If 0 use PRIMA
8cc0: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 2a 61  RY KEY */.  } *a
8cd0: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
8ce0: 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
8cf0: 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
8d00: 6d 6e 20 73 20 2a 2f 0a 20 20 75 38 20 69 73 44  mn s */.  u8 isD
8d10: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
8d20: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
8d30: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
8d40: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
8d50: 49 54 20 2a 2f 0a 20 20 75 38 20 75 70 64 61 74  IT */.  u8 updat
8d60: 65 43 6f 6e 66 3b 20 20 20 20 2f 2a 20 48 6f 77  eConf;    /* How
8d70: 20 74 6f 20 72 65 73 6f 6c 76 65 20 63 6f 6e 66   to resolve conf
8d80: 6c 69 63 74 73 20 74 68 61 74 20 6f 63 63 75 72  licts that occur
8d90: 20 6f 6e 20 55 50 44 41 54 45 20 2a 2f 0a 20 20   on UPDATE */.  
8da0: 75 38 20 64 65 6c 65 74 65 43 6f 6e 66 3b 20 20  u8 deleteConf;  
8db0: 20 20 2f 2a 20 48 6f 77 20 74 6f 20 72 65 73 6f    /* How to reso
8dc0: 6c 76 65 20 63 6f 6e 66 6c 69 63 74 73 20 74 68  lve conflicts th
8dd0: 61 74 20 6f 63 63 75 72 20 6f 6e 20 44 45 4c 45  at occur on DELE
8de0: 54 45 20 2a 2f 0a 20 20 75 38 20 69 6e 73 65 72  TE */.  u8 inser
8df0: 74 43 6f 6e 66 3b 20 20 20 20 2f 2a 20 48 6f 77  tConf;    /* How
8e00: 20 74 6f 20 72 65 73 6f 6c 76 65 20 63 6f 6e 66   to resolve conf
8e10: 6c 69 63 74 73 20 74 68 61 74 20 6f 63 63 75 72  licts that occur
8e20: 20 6f 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 7d 3b   on INSERT */.};
8e30: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
8e40: 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
8e50: 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
8e60: 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
8e70: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
8e80: 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
8e90: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
8ea0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
8eb0: 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
8ec0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
8ed0: 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
8ee0: 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
8ef0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8f00: 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
8f10: 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
8f20: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
8f30: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
8f40: 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
8f50: 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
8f60: 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
8f70: 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
8f80: 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
8f90: 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
8fa0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
8fb0: 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
8fc0: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
8fd0: 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
8fe0: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
8ff0: 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
9000: 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
9010: 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
9020: 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
9030: 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
9040: 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
9050: 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
9060: 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
9070: 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
9080: 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
9090: 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
90a0: 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
90b0: 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
90c0: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
90d0: 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
90e0: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
90f0: 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
9100: 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
9110: 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
9120: 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
9130: 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
9140: 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
9150: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
9160: 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
9170: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
9180: 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
9190: 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
91a0: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
91b0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
91c0: 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
91d0: 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
91e0: 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
91f0: 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
9200: 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
9210: 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
9220: 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
9230: 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
9240: 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
9250: 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
9260: 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
9270: 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
9280: 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
9290: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
92a0: 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
92b0: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
92c0: 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
92d0: 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
92e0: 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
92f0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
9300: 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
9310: 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
9320: 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
9330: 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
9340: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
9350: 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
9360: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
9370: 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
9380: 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
9390: 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
93a0: 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
93b0: 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
93c0: 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
93d0: 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
93e0: 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
93f0: 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
9400: 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
9410: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
9420: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
9430: 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
9440: 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
9450: 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
9460: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
9470: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
9480: 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
9490: 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
94a0: 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
94b0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
94c0: 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
94d0: 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
94e0: 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
94f0: 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
9500: 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
9510: 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
9520: 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
9530: 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
9540: 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
9550: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
9560: 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
9570: 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
9580: 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
9590: 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
95a0: 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
95b0: 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
95c0: 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
95d0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
95e0: 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
95f0: 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
9600: 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
9610: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
9620: 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
9630: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
9640: 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
9650: 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
9660: 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
9670: 4f 45 5f 44 65 66 61 75 6c 74 20 20 39 39 20 20  OE_Default  99  
9680: 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
9690: 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
96a0: 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
96b0: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
96c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
96d0: 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
96e0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
96f0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
9700: 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
9710: 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
9720: 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
9730: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
9740: 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
9750: 79 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ys..**.** If the
9760: 20 4b 65 79 49 6e 66 6f 2e 69 6e 63 72 4b 65 79   KeyInfo.incrKey
9770: 20 76 61 6c 75 65 20 69 73 20 74 72 75 65 20 61   value is true a
9780: 6e 64 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  nd the compariso
9790: 6e 20 77 6f 75 6c 64 0a 2a 2a 20 6f 74 68 65 72  n would.** other
97a0: 77 69 73 65 20 62 65 20 65 71 75 61 6c 2c 20 74  wise be equal, t
97b0: 68 65 6e 20 72 65 74 75 72 6e 20 61 20 72 65 73  hen return a res
97c0: 75 6c 74 20 61 73 20 69 66 20 74 68 65 20 73 65  ult as if the se
97d0: 63 6f 6e 64 20 6b 65 79 0a 2a 2a 20 77 65 72 65  cond key.** were
97e0: 20 6c 61 72 67 65 72 2e 0a 2a 2f 0a 73 74 72 75   larger..*/.stru
97f0: 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73  ct KeyInfo {.  s
9800: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
9810: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
9820: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
9830: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
9840: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
9850: 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
9860: 20 74 68 65 20 54 45 58 54 5f 55 74 66 2a 20 76   the TEXT_Utf* v
9870: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 69 6e  alues */.  u8 in
9880: 63 72 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  crKey;         /
9890: 2a 20 49 6e 63 72 65 61 73 65 20 32 6e 64 20 6b  * Increase 2nd k
98a0: 65 79 20 62 79 20 65 70 73 69 6c 6f 6e 20 62 65  ey by epsilon be
98b0: 66 6f 72 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20  fore comparison 
98c0: 2a 2f 0a 20 20 75 38 20 70 72 65 66 69 78 49 73  */.  u8 prefixIs
98d0: 45 71 75 61 6c 3b 20 20 20 2f 2a 20 54 72 65 61  Equal;   /* Trea
98e0: 74 20 61 20 70 72 65 66 69 78 20 61 73 20 65 71  t a prefix as eq
98f0: 75 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ual */.  int nFi
9900: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
9910: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
9920: 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20 2a 2f 0a  s in aColl[] */.
9930: 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
9940: 3b 20 20 20 20 20 2f 2a 20 49 66 20 64 65 66 69  ;     /* If defi
9950: 6e 65 64 20 61 6e 20 61 53 6f 72 74 4f 72 64 65  ned an aSortOrde
9960: 72 5b 69 5d 20 69 73 20 74 72 75 65 2c 20 73 6f  r[i] is true, so
9970: 72 74 20 44 45 53 43 20 2a 2f 0a 20 20 43 6f 6c  rt DESC */.  Col
9980: 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
9990: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
99a0: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
99b0: 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
99c0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
99d0: 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
99e0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
99f0: 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
9a00: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
9a10: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9a20: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
9a30: 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
9a40: 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
9a50: 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
9a60: 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
9a70: 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
9a80: 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
9a90: 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
9aa0: 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
9ab0: 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
9ac0: 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
9ad0: 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
9ae0: 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
9af0: 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
9b00: 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
9b10: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
9b20: 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
9b30: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
9b40: 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
9b50: 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
9b60: 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
9b70: 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
9b80: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
9b90: 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
9ba0: 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
9bb0: 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
9bc0: 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
9bd0: 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
9be0: 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
9bf0: 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
9c00: 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
9c10: 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
9c20: 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
9c30: 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
9c40: 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
9c50: 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
9c60: 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
9c70: 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
9c80: 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
9c90: 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
9ca0: 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
9cb0: 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
9cc0: 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
9cd0: 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
9ce0: 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
9cf0: 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
9d00: 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
9d10: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
9d20: 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
9d30: 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
9d40: 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
9d50: 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
9d60: 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
9d70: 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
9d80: 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
9d90: 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
9da0: 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
9db0: 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
9dc0: 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
9dd0: 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
9de0: 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
9df0: 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
9e00: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
9e10: 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
9e20: 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
9e30: 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
9e40: 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
9e50: 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
9e60: 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
9e70: 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
9e80: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
9e90: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
9ea0: 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  ex */.  int nCol
9eb0: 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
9ec0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
9ed0: 20 74 68 65 20 74 61 62 6c 65 20 75 73 65 64 20   the table used 
9ee0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  by this index */
9ef0: 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e  .  int *aiColumn
9f00: 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c  ;   /* Which col
9f10: 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
9f20: 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
9f30: 74 20 69 73 20 30 20 2a 2f 0a 20 20 75 6e 73 69  t is 0 */.  unsi
9f40: 67 6e 65 64 20 2a 61 69 52 6f 77 45 73 74 3b 20  gned *aiRowEst; 
9f50: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 41 4e 41  /* Result of ANA
9f60: 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
9f70: 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
9f80: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
9f90: 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 2f 2a  le *pTable;   /*
9fa0: 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
9fb0: 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
9fc0: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
9fd0: 20 20 20 2f 2a 20 50 61 67 65 20 63 6f 6e 74 61     /* Page conta
9fe0: 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
9ff0: 69 73 20 69 6e 64 65 78 20 69 6e 20 64 61 74 61  is index in data
a000: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
a010: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
a020: 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
a030: 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
a040: 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
a050: 2f 0a 20 20 75 38 20 61 75 74 6f 49 6e 64 65 78  /.  u8 autoIndex
a060: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
a070: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
a080: 20 63 72 65 61 74 65 64 20 28 65 78 3a 20 62 79   created (ex: by
a090: 20 55 4e 49 51 55 45 29 20 2a 2f 0a 20 20 63 68   UNIQUE) */.  ch
a0a0: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 2f  ar *zColAff;   /
a0b0: 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
a0c0: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
a0d0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
a0e0: 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
a0f0: 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
a100: 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
a110: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
a120: 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
a130: 20 2a 70 53 63 68 65 6d 61 3b 20 2f 2a 20 53 63   *pSchema; /* Sc
a140: 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
a150: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
a160: 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
a170: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 69 7a   /* Array of siz
a180: 65 20 49 6e 64 65 78 2e 6e 43 6f 6c 75 6d 6e 2e  e Index.nColumn.
a190: 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
a1a0: 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
a1b0: 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 2f 2a  r **azColl;   /*
a1c0: 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
a1d0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
a1e0: 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
a1f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
a200: 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
a210: 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
a220: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
a230: 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
a240: 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
a250: 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
a260: 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
a270: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
a280: 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
a290: 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
a2a0: 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
a2b0: 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
a2c0: 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
a2d0: 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
a2e0: 6b 65 20 61 6e 79 20 61 73 73 75 70 74 69 6f 6e  ke any assuption
a2f0: 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
a300: 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
a310: 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
a320: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
a330: 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  n {.  const unsi
a340: 67 6e 65 64 20 63 68 61 72 20 2a 7a 3b 20 2f 2a  gned char *z; /*
a350: 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
a360: 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
a370: 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
a380: 6e 73 69 67 6e 65 64 20 64 79 6e 20 20 3a 20 31  nsigned dyn  : 1
a390: 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66  ;      /* True f
a3a0: 6f 72 20 6d 61 6c 6c 6f 63 65 64 20 6d 65 6d 6f  or malloced memo
a3b0: 72 79 2c 20 66 61 6c 73 65 20 66 6f 72 20 73 74  ry, false for st
a3c0: 61 74 69 63 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  atic */.  unsign
a3d0: 65 64 20 6e 20 20 20 20 3a 20 33 31 3b 20 20 20  ed n    : 31;   
a3e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
a3f0: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
a400: 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
a410: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
a420: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
a430: 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
a440: 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
a450: 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
a460: 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
a470: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
a480: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
a490: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
a4a0: 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
a4b0: 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
a4c0: 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
a4d0: 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
a4e0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
a4f0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
a500: 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
a510: 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
a520: 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
a530: 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
a540: 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
a550: 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
a560: 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
a570: 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
a580: 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
a590: 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
a5a0: 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
a5b0: 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
a5c0: 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
a5d0: 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
a5e0: 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
a5f0: 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
a600: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
a610: 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
a620: 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
a630: 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
a640: 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
a650: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
a660: 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
a670: 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
a680: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
a690: 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
a6a0: 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
a6b0: 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
a6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6d0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
a6e0: 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
a6f0: 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
a700: 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
a710: 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
a720: 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
a730: 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
a740: 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
a750: 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
a760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a770: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
a780: 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
a790: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
a7a0: 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
a7b0: 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
a7c0: 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
a7d0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
a7e0: 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
a7f0: 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
a800: 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
a810: 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
a820: 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
a830: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
a840: 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
a850: 78 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  x */.  struct Ag
a860: 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
a870: 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
a880: 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
a890: 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
a8a0: 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
a8b0: 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
a8c0: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
a8d0: 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
a8e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
a8f0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
a900: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
a910: 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a930: 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
a940: 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
a950: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
a960: 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
a970: 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
a980: 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
a990: 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
a9a0: 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
a9c0: 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
a9d0: 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
a9e0: 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
a9f0: 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
aa00: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
aa10: 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
aa20: 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
aa30: 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
aa40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
aa50: 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
aa60: 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
aa70: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 41  /.  int nColumnA
aa80: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 4e  lloc;       /* N
aa90: 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
aaa0: 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
aab0: 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
aac0: 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
aad0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
aae0: 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
aaf0: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
ab00: 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
ab30: 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
ab40: 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
ab50: 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
ab80: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
ab90: 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
aba0: 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
abb0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
abc0: 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
abd0: 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
abe0: 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
abf0: 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
ac00: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
ac10: 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
ac20: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
ac30: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
ac40: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ac50: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
ac80: 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
ac90: 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
aca0: 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
acb0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
acc0: 70 68 65 72 6d 65 72 61 6c 20 74 61 62 6c 65 20  phermeral table 
acd0: 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
ace0: 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
acf0: 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
ad00: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
ad10: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
ad20: 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
ad30: 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 75 6e 63  ] */.  int nFunc
ad40: 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
ad50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
ad60: 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
ad70: 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
ad80: 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
ad90: 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
ada0: 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
adb0: 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
adc0: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
add0: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
ade0: 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
adf0: 64 65 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  de.  The integer
ae00: 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
ae10: 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
ae20: 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
ae30: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
ae40: 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
ae50: 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
ae60: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
ae70: 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
ae80: 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
ae90: 72 2e 20 20 54 68 69 73 20 73 61 6d 65 20 69 6e  r.  This same in
aea0: 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
aeb0: 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
aec0: 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
aed0: 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
aee0: 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
aef0: 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
af00: 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tree..**.** Expr
af10: 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
af20: 2e 70 4c 65 66 74 20 61 72 65 20 73 75 62 65 78  .pLeft are subex
af30: 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 78 70 72  pressions.  Expr
af40: 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
af50: 0a 2a 2a 20 6f 66 20 61 72 67 75 6d 65 6e 74 20  .** of argument 
af60: 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
af70: 6e 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 2e  n is a function.
af80: 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 74 6f 6b 65  .**.** Expr.toke
af90: 6e 20 69 73 20 74 68 65 20 6f 70 65 72 61 74 6f  n is the operato
afa0: 72 20 74 6f 6b 65 6e 20 66 6f 72 20 74 68 69 73  r token for this
afb0: 20 6e 6f 64 65 2e 20 20 46 6f 72 20 73 6f 6d 65   node.  For some
afc0: 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 2a 2a 20   expressions.** 
afd0: 74 68 61 74 20 68 61 76 65 20 73 75 62 65 78 70  that have subexp
afe0: 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 74  ressions, Expr.t
aff0: 6f 6b 65 6e 20 63 61 6e 20 62 65 20 74 68 65 20  oken can be the 
b000: 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 74 68  complete text th
b010: 61 74 20 67 61 76 65 0a 2a 2a 20 72 69 73 65 20  at gave.** rise 
b020: 74 6f 20 74 68 65 20 45 78 70 72 2e 20 20 49 6e  to the Expr.  In
b030: 20 74 68 65 20 6c 61 74 74 65 72 20 63 61 73 65   the latter case
b040: 2c 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 6d  , the token is m
b050: 61 72 6b 65 64 20 61 73 20 62 65 69 6e 67 0a 2a  arked as being.*
b060: 2a 20 61 20 63 6f 6d 70 6f 75 6e 64 20 74 6f 6b  * a compound tok
b070: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  en..**.** An exp
b080: 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
b090: 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
b0a0: 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
b0b0: 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
b0c0: 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
b0d0: 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
b0e0: 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
b0f0: 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
b100: 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
b110: 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
b120: 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
b130: 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
b140: 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
b150: 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
b160: 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
b170: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
b180: 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
b190: 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
b1a0: 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
b1b0: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
b1c0: 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
b1d0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
b1e0: 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
b1f0: 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
b200: 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
b210: 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
b220: 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
b230: 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
b240: 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
b250: 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
b260: 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
b270: 6f 6e 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e  on is a function
b280: 2c 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  , the Expr.iTabl
b290: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
b2a0: 63 6f 64 65 0a 2a 2a 20 72 65 70 72 65 73 65 6e  code.** represen
b2b0: 74 69 6e 67 20 77 68 69 63 68 20 66 75 6e 63 74  ting which funct
b2c0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 65 78 70  ion.  If the exp
b2d0: 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
b2e0: 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 0a 2a  bound variable.*
b2f0: 2a 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  * marker (a ques
b300: 74 69 6f 6e 20 6d 61 72 6b 20 63 68 61 72 61 63  tion mark charac
b310: 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
b320: 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
b330: 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 69 54  n the.** Expr.iT
b340: 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
b350: 6e 64 65 78 20 6e 75 6d 62 65 72 20 66 6f 72 20  ndex number for 
b360: 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
b370: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
b380: 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
b390: 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
b3a0: 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
b3b0: 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
b3c0: 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
b3d0: 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
b3e0: 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
b3f0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
b400: 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
b410: 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
b420: 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
b430: 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
b440: 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
b450: 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
b460: 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
b470: 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
b480: 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
b490: 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
b4a0: 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
b4b0: 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
b4c0: 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
b4d0: 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  bquery..**.** Th
b4e0: 65 20 45 78 70 72 2e 70 53 65 6c 65 63 74 20 66  e Expr.pSelect f
b4f0: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 61  ield points to a
b500: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
b510: 74 2e 20 20 54 68 65 20 53 45 4c 45 43 54 20 6d  t.  The SELECT m
b520: 69 67 68 74 0a 2a 2a 20 62 65 20 74 68 65 20 72  ight.** be the r
b530: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
b540: 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 2e 20  an IN operator. 
b550: 20 4f 72 2c 20 69 66 20 61 20 73 63 61 6c 61 72   Or, if a scalar
b560: 20 53 45 4c 45 43 54 20 61 70 70 65 61 72 73 0a   SELECT appears.
b570: 2a 2a 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73  ** in an express
b580: 69 6f 6e 20 74 68 65 20 6f 70 63 6f 64 65 20 69  ion the opcode i
b590: 73 20 54 4b 5f 53 45 4c 45 43 54 20 61 6e 64 20  s TK_SELECT and 
b5a0: 45 78 70 72 2e 70 53 65 6c 65 63 74 20 69 73 20  Expr.pSelect is 
b5b0: 74 68 65 20 6f 6e 6c 79 0a 2a 2a 20 6f 70 65 72  the only.** oper
b5c0: 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  and..**.** If th
b5d0: 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
b5e0: 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
b5f0: 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
b600: 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
b610: 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
b620: 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
b630: 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
b640: 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
b650: 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
b660: 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
b670: 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  efinition..*/.st
b680: 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
b690: 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
b6a0: 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
b6b0: 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
b6c0: 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
b6d0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
b6e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
b6f0: 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
b700: 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
b710: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36   column */.  u16
b720: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
b730: 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
b740: 6c 61 67 73 2e 20 20 53 65 65 20 62 65 6c 6f 77  lags.  See below
b750: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
b760: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Coll;        /* 
b770: 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79  The collation ty
b780: 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
b790: 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20   or 0 */.  Expr 
b7a0: 2a 70 4c 65 66 74 2c 20 2a 70 52 69 67 68 74 3b  *pLeft, *pRight;
b7b0: 20 20 2f 2a 20 4c 65 66 74 20 61 6e 64 20 72 69    /* Left and ri
b7c0: 67 68 74 20 73 75 62 6e 6f 64 65 73 20 2a 2f 0a  ght subnodes */.
b7d0: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
b7e0: 74 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 6c 69  t;       /* A li
b7f0: 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
b800: 73 20 75 73 65 64 20 61 73 20 66 75 6e 63 74 69  s used as functi
b810: 6f 6e 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 20  on arguments.   
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b830: 20 20 20 20 20 20 2a 2a 20 6f 72 20 69 6e 20 22        ** or in "
b840: 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70 72  <expr> IN (<expr
b850: 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 54 6f 6b  -list)" */.  Tok
b860: 65 6e 20 74 6f 6b 65 6e 3b 20 20 20 20 20 20 20  en token;       
b870: 20 20 20 20 2f 2a 20 41 6e 20 6f 70 65 72 61 6e      /* An operan
b880: 64 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 54 6f 6b  d token */.  Tok
b890: 65 6e 20 73 70 61 6e 3b 20 20 20 20 20 20 20 20  en span;        
b8a0: 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
b8b0: 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
b8c0: 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ession */.  int 
b8d0: 69 54 61 62 6c 65 2c 20 69 43 6f 6c 75 6d 6e 3b  iTable, iColumn;
b8e0: 20 20 20 2f 2a 20 57 68 65 6e 20 6f 70 3d 3d 54     /* When op==T
b8f0: 4b 5f 43 4f 4c 55 4d 4e 2c 20 74 68 65 6e 20 74  K_COLUMN, then t
b900: 68 69 73 20 65 78 70 72 20 6e 6f 64 65 20 6d 65  his expr node me
b910: 61 6e 73 20 74 68 65 0a 20 20 20 20 20 20 20 20  ans the.        
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 20 2a 2a 20 69 43 6f 6c 75 6d 6e 2d 74 68 20 66   ** iColumn-th f
b940: 69 65 6c 64 20 6f 66 20 74 68 65 20 69 54 61 62  ield of the iTab
b950: 6c 65 2d 74 68 20 74 61 62 6c 65 2e 20 2a 2f 0a  le-th table. */.
b960: 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
b970: 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
b980: 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
b990: 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
b9a0: 43 54 49 4f 4e 20 2a 2f 0a 20 20 69 6e 74 20 69  CTION */.  int i
b9b0: 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
b9c0: 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
b9d0: 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
b9e0: 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
b9f0: 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 52 69 67 68  ] */.  int iRigh
ba00: 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
ba10: 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
ba20: 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
ba30: 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
ba40: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
ba50: 74 3b 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e  t;       /* When
ba60: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
ba70: 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 2e  is a sub-select.
ba80: 20 20 41 6c 73 6f 20 74 68 65 0a 20 20 20 20 20    Also the.     
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baa0: 20 20 20 20 2a 2a 20 72 69 67 68 74 20 73 69 64      ** right sid
bab0: 65 20 6f 66 20 22 3c 65 78 70 72 3e 20 49 4e 20  e of "<expr> IN 
bac0: 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20  (<select>)" */. 
bad0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
bae0: 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
baf0: 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 20 65   for OP_Column e
bb00: 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 23  xpressions. */.#
bb10: 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
bb20: 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
bb30: 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
bb40: 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
bb50: 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
bb60: 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
bb70: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
bb80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
bb90: 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
bba0: 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
bbb0: 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
bbc0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
bbd0: 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30  FromJoin   0x000
bbe0: 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64  1  /* Originated
bbf0: 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   in ON or USING 
bc00: 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
bc10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
bc20: 67 67 20 20 20 20 20 20 20 20 30 78 30 30 30 32  gg        0x0002
bc30: 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e    /* Contains on
bc40: 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
bc50: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
bc60: 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
bc70: 6c 76 65 64 20 20 20 30 78 30 30 30 34 20 20 2f  lved   0x0004  /
bc80: 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
bc90: 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
bca0: 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
bcb0: 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78 30  P_Error      0x0
bcc0: 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69  008  /* Expressi
bcd0: 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
bce0: 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
bcf0: 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
bd00: 74 69 6e 63 74 20 20 20 30 78 30 30 31 30 20 20  tinct   0x0010  
bd10: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
bd20: 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
bd30: 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
bd40: 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
bd50: 65 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20  ect  0x0020  /* 
bd60: 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
bd70: 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
bd80: 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
bd90: 50 5f 44 65 71 75 6f 74 65 64 20 20 20 30 78 30  P_Dequoted   0x0
bda0: 30 34 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  040  /* True if 
bdb0: 74 68 65 20 73 74 72 69 6e 67 20 68 61 73 20 62  the string has b
bdc0: 65 65 6e 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  een dequoted */.
bdd0: 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78  #define EP_Infix
bde0: 46 75 6e 63 20 20 30 78 30 30 38 30 20 20 2f 2a  Func  0x0080  /*
bdf0: 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66   True for an inf
be00: 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b  ix function: LIK
be10: 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a  E, GLOB, etc */.
be20: 23 64 65 66 69 6e 65 20 45 50 5f 45 78 70 43 6f  #define EP_ExpCo
be30: 6c 6c 61 74 65 20 30 78 30 31 30 30 20 20 2f 2a  llate 0x0100  /*
be40: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
be50: 6e 63 65 20 73 70 65 63 69 66 69 65 64 20 65 78  nce specified ex
be60: 70 6c 69 63 69 74 6c 79 20 2a 2f 0a 23 64 65 66  plicitly */.#def
be70: 69 6e 65 20 45 50 5f 41 6e 79 41 66 66 20 20 20  ine EP_AnyAff   
be80: 20 20 30 78 30 32 30 30 20 20 2f 2a 20 43 61 6e    0x0200  /* Can
be90: 20 74 61 6b 65 20 61 20 63 61 63 68 65 64 20 63   take a cached c
bea0: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 79 20 61 66 66  olumn of any aff
beb0: 69 6e 69 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  inity */.#define
bec0: 20 45 50 5f 46 69 78 65 64 44 65 73 74 20 20 30   EP_FixedDest  0
bed0: 78 30 34 30 30 20 20 2f 2a 20 52 65 73 75 6c 74  x0400  /* Result
bee0: 20 6e 65 65 64 65 64 20 69 6e 20 61 20 73 70 65   needed in a spe
bef0: 63 69 66 69 63 20 72 65 67 69 73 74 65 72 20 2a  cific register *
bf00: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  /../*.** These m
bf10: 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
bf20: 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
bf30: 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
bf40: 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
bf50: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
bf60: 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
bf70: 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
bf80: 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
bf90: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
bfa0: 78 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74  xprHasAnyPropert
bfb0: 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
bfc0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
bfd0: 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
bfe0: 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
bff0: 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
c000: 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
c010: 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
c020: 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
c030: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
c040: 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
c050: 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
c060: 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
c070: 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
c080: 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
c090: 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
c0a0: 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
c0b0: 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
c0c0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
c0d0: 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
c0e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
c0f0: 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
c100: 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
c110: 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
c120: 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
c130: 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
c140: 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
c150: 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
c160: 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
c170: 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
c180: 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
c190: 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
c1a0: 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  sed..*/.struct E
c1b0: 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
c1c0: 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
c1d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c1e0: 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
c1f0: 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74  he list */.  int
c200: 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
c210: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c220: 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
c230: 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e  ed below */.  in
c240: 74 20 69 45 43 75 72 73 6f 72 3b 20 20 20 20 20  t iECursor;     
c250: 20 20 20 20 20 2f 2a 20 56 44 42 45 20 43 75 72       /* VDBE Cur
c260: 73 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  sor associated w
c270: 69 74 68 20 74 68 69 73 20 45 78 70 72 4c 69 73  ith this ExprLis
c280: 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
c290: 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  prList_item {.  
c2a0: 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
c2b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
c2c0: 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
c2d0: 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ons */.    char 
c2e0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
c2f0: 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
c300: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
c310: 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
c320: 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
c330: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
c340: 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
c350: 41 53 43 20 2a 2f 0a 20 20 20 20 75 38 20 69 73  ASC */.    u8 is
c360: 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
c370: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
c380: 73 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  s is an aggregat
c390: 65 20 6c 69 6b 65 20 63 6f 75 6e 74 28 2a 29 20  e like count(*) 
c3a0: 2a 2f 0a 20 20 20 20 75 38 20 64 6f 6e 65 3b 20  */.    u8 done; 
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c3c0: 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
c3d0: 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
c3e0: 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
c3f0: 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20  */.  } *a;      
c400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
c410: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
c420: 68 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  h expression */.
c430: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
c440: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
c450: 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
c460: 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
c470: 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
c480: 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
c490: 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
c4a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
c4b0: 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
c4c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
c4d0: 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
c4e0: 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
c4f0: 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
c500: 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
c510: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
c520: 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
c530: 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
c540: 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
c550: 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
c560: 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
c570: 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
c580: 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
c590: 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
c5a0: 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
c5b0: 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
c5c0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
c5d0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
c5e0: 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
c5f0: 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
c600: 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
c610: 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
c620: 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
c630: 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
c640: 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
c650: 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
c660: 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
c670: 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
c680: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
c690: 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
c6a0: 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
c6b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
c6c0: 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
c6d0: 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
c6e0: 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
c6f0: 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
c700: 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
c710: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
c720: 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
c730: 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  ist */.  int nAl
c740: 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
c750: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
c760: 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 5b 5d  llocated for a[]
c770: 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
c780: 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20  .** The bitmask 
c790: 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64  datatype defined
c7a0: 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66   below is used f
c7b0: 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  or various optim
c7c0: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  izations..**.** 
c7d0: 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72  Changing this fr
c7e0: 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61  om a 64-bit to a
c7f0: 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d   32-bit type lim
c800: 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  its the number o
c810: 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61  f.** tables in a
c820: 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74   join to 32 inst
c830: 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20  ead of 64.  But 
c840: 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20  it also reduces 
c850: 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74  the size.** of t
c860: 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33  he library by 73
c870: 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e  8 bytes on ix86.
c880: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20  .*/.typedef u64 
c890: 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20  Bitmask;../*.** 
c8a0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
c8b0: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
c8c0: 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
c8d0: 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
c8e0: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
c8f0: 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
c900: 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
c910: 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
c920: 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
c930: 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
c940: 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
c950: 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
c960: 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
c970: 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
c980: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
c990: 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
c9a0: 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
c9b0: 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
c9c0: 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
c9d0: 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
c9e0: 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
c9f0: 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
ca00: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
ca10: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
ca20: 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
ca30: 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
ca40: 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
ca50: 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
ca60: 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
ca70: 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
ca80: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
ca90: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
caa0: 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
cab0: 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
cac0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
cad0: 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
cae0: 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
caf0: 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
cb00: 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
cb10: 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
cb20: 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
cb30: 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
cb40: 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
cb50: 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
cb60: 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
cb70: 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
cb80: 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
cb90: 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
cba0: 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
cbb0: 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
cbc0: 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
cbd0: 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
cbe0: 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
cbf0: 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
cc00: 20 7b 0a 20 20 69 31 36 20 6e 53 72 63 3b 20 20   {.  i16 nSrc;  
cc10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cc20: 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
cc30: 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
cc40: 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
cc50: 69 31 36 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  i16 nAlloc;     
cc60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
cc70: 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
cc80: 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
cc90: 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
cca0: 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
ccb0: 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
ccc0: 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
ccd0: 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
cce0: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
ccf0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
cd00: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
cd10: 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
cd20: 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
cd30: 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
cd40: 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
cd50: 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
cd60: 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
cd70: 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
cd80: 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
cd90: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
cda0: 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
cdb0: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
cdc0: 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
cdd0: 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
cde0: 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
cdf0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 73 50 6f 70   */.    u8 isPop
ce00: 75 6c 61 74 65 64 3b 20 20 20 2f 2a 20 54 65 6d  ulated;   /* Tem
ce10: 70 6f 72 61 72 79 20 74 61 62 6c 65 20 61 73 73  porary table ass
ce20: 6f 63 69 61 74 65 64 20 77 69 74 68 20 53 45 4c  ociated with SEL
ce30: 45 43 54 20 69 73 20 70 6f 70 75 6c 61 74 65 64  ECT is populated
ce40: 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74   */.    u8 joint
ce50: 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
ce60: 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
ce70: 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20  n this able and 
ce80: 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
ce90: 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
cea0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
ceb0: 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
cec0: 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
ced0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
cee0: 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
cef0: 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
cf00: 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
cf10: 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
cf20: 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
cf30: 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
cf40: 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
cf50: 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
cf60: 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
cf70: 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 72  t if column N or
cf80: 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
cf90: 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
cfa0: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
cfb0: 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
cfc0: 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
cfd0: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
cfe0: 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
cff0: 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
d000: 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
d010: 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
d020: 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
d030: 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
d040: 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
d050: 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
d060: 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
d070: 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
d080: 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
d090: 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
d0a0: 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
d0b0: 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
d0c0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
d0d0: 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
d0e0: 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
d0f0: 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
d100: 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
d110: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
d120: 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
d130: 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
d140: 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
d150: 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
d160: 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
d170: 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
d180: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
d190: 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
d1a0: 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
d1b0: 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
d1c0: 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
d1d0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20  e */../*.** For 
d1e0: 65 61 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70  each nested loop
d1f0: 20 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75   in a WHERE clau
d200: 73 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  se implementatio
d210: 6e 2c 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  n, the WhereInfo
d220: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 63 6f  .** structure co
d230: 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20  ntains a single 
d240: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
d250: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 69   structure.  Thi
d260: 73 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  s structure.** i
d270: 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65  s intended to be
d280: 20 70 72 69 76 61 74 65 20 74 68 65 20 74 68 65   private the the
d290: 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20   where.c module 
d2a0: 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  and should not b
d2b0: 65 0a 2a 2a 20 61 63 63 65 73 73 20 6f 72 20 6d  e.** access or m
d2c0: 6f 64 69 66 69 65 64 20 62 79 20 6f 74 68 65 72  odified by other
d2d0: 20 6d 6f 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20   modules..**.** 
d2e0: 54 68 65 20 70 49 64 78 49 6e 66 6f 20 61 6e 64  The pIdxInfo and
d2f0: 20 70 42 65 73 74 49 64 78 20 66 69 65 6c 64 73   pBestIdx fields
d300: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c   are used to hel
d310: 70 20 70 69 63 6b 20 74 68 65 20 62 65 73 74 0a  p pick the best.
d320: 2a 2a 20 69 6e 64 65 78 20 6f 6e 20 61 20 76 69  ** index on a vi
d330: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
d340: 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74  e pIdxInfo point
d350: 65 72 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65  er contains inde
d360: 78 69 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  xing.** informat
d370: 69 6f 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ion for the i-th
d380: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52   table in the FR
d390: 4f 4d 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65  OM clause before
d3a0: 20 72 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20   reordering..** 
d3b0: 41 6c 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f  All the pIdxInfo
d3c0: 20 70 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72   pointers are fr
d3d0: 65 65 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f  eed by whereInfo
d3e0: 46 72 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e  Free() in where.
d3f0: 63 2e 0a 2a 2a 20 54 68 65 20 70 42 65 73 74 49  c..** The pBestI
d400: 64 78 20 70 6f 69 6e 74 65 72 20 69 73 20 61 20  dx pointer is a 
d410: 63 6f 70 79 20 6f 66 20 70 49 64 78 49 6e 66 6f  copy of pIdxInfo
d420: 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61   for the i-th ta
d430: 62 6c 65 20 61 66 74 65 72 0a 2a 2a 20 46 52 4f  ble after.** FRO
d440: 4d 20 63 6c 61 75 73 65 20 6f 72 64 65 72 69 6e  M clause orderin
d450: 67 2e 20 20 54 68 69 73 20 69 73 20 61 20 6c 69  g.  This is a li
d460: 74 74 6c 65 20 63 6f 6e 66 75 73 69 6e 67 20 73  ttle confusing s
d470: 6f 20 49 20 77 69 6c 6c 20 72 65 70 65 61 74 0a  o I will repeat.
d480: 2a 2a 20 69 74 20 69 6e 20 64 69 66 66 65 72 65  ** it in differe
d490: 6e 74 20 77 6f 72 64 73 2e 20 20 57 68 65 72 65  nt words.  Where
d4a0: 49 6e 66 6f 2e 61 5b 69 5d 2e 70 49 64 78 49 6e  Info.a[i].pIdxIn
d4b0: 66 6f 20 69 73 20 69 6e 64 65 78 20 69 6e 66 6f  fo is index info
d4c0: 72 6d 61 74 69 6f 6e 20 0a 2a 2a 20 66 6f 72 20  rmation .** for 
d4d0: 57 68 65 72 65 49 6e 66 6f 2e 70 54 61 62 4c 69  WhereInfo.pTabLi
d4e0: 73 74 2e 61 5b 69 5d 2e 20 20 57 68 65 72 65 49  st.a[i].  WhereI
d4f0: 6e 66 6f 2e 61 5b 69 5d 2e 70 42 65 73 74 49 6e  nfo.a[i].pBestIn
d500: 66 6f 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 64  fo is the.** ind
d510: 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ex information f
d520: 6f 72 20 74 68 65 20 69 2d 74 68 20 6c 6f 6f 70  or the i-th loop
d530: 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 20 70   of the join.  p
d540: 42 65 73 74 49 6e 66 6f 20 69 73 20 61 6c 77 61  BestInfo is alwa
d550: 79 73 0a 2a 2a 20 65 69 74 68 65 72 20 4e 55 4c  ys.** either NUL
d560: 4c 20 6f 72 20 61 20 63 6f 70 79 20 6f 66 20 73  L or a copy of s
d570: 6f 6d 65 20 70 49 64 78 49 6e 66 6f 2e 20 20 53  ome pIdxInfo.  S
d580: 6f 20 66 6f 72 20 63 6c 65 61 6e 75 70 20 69 74  o for cleanup it
d590: 20 69 73 20 0a 2a 2a 20 73 75 66 66 69 63 69 65   is .** sufficie
d5a0: 6e 74 20 74 6f 20 66 72 65 65 20 61 6c 6c 20 6f  nt to free all o
d5b0: 66 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70  f the pIdxInfo p
d5c0: 6f 69 6e 74 65 72 73 2e 0a 2a 2a 20 0a 2a 2f 0a  ointers..** .*/.
d5d0: 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76 65  struct WhereLeve
d5e0: 6c 20 7b 0a 20 20 69 6e 74 20 69 46 72 6f 6d 3b  l {.  int iFrom;
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
d600: 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  hich entry in th
d610: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
d620: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
d630: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
d640: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
d650: 68 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  h this level */.
d660: 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
d670: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
d680: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65   memory cell use
d690: 64 20 62 79 20 74 68 69 73 20 6c 65 76 65 6c 20  d by this level 
d6a0: 2a 2f 0a 20 20 69 6e 74 20 69 4c 65 66 74 4a 6f  */.  int iLeftJo
d6b0: 69 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 65  in;        /* Me
d6c0: 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65 64 20 74  mory cell used t
d6d0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 4c 45 46 54  o implement LEFT
d6e0: 20 4f 55 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20   OUTER JOIN */. 
d6f0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
d700: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
d710: 75 73 65 64 2e 20 20 4e 55 4c 4c 20 69 66 20 6e  used.  NULL if n
d720: 6f 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  o index */.  int
d730: 20 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20   iTabCur;       
d740: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
d750: 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63  ursor used to ac
d760: 63 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a  cess the table *
d770: 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b  /.  int iIdxCur;
d780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
d790: 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65   VDBE cursor use
d7a0: 64 20 74 6f 20 61 63 65 73 73 73 20 70 49 64 78  d to acesss pIdx
d7b0: 20 2a 2f 0a 20 20 69 6e 74 20 62 72 6b 3b 20 20   */.  int brk;  
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
d7d0: 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61  ump here to brea
d7e0: 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f  k out of the loo
d7f0: 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 78 74 3b 20  p */.  int nxt; 
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d810: 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61  Jump here to sta
d820: 72 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63  rt the next IN c
d830: 6f 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20  ombination */.  
d840: 69 6e 74 20 63 6f 6e 74 3b 20 20 20 20 20 20 20  int cont;       
d850: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
d860: 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77  re to continue w
d870: 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f  ith the next loo
d880: 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74  p cycle */.  int
d890: 20 74 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20   top;           
d8a0: 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74     /* First inst
d8b0: 72 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72  ruction of inter
d8c0: 69 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  ior of the loop 
d8d0: 2a 2f 0a 20 20 69 6e 74 20 6f 70 2c 20 70 31 2c  */.  int op, p1,
d8e0: 20 70 32 3b 20 20 20 20 20 20 20 2f 2a 20 4f 70   p2;       /* Op
d8f0: 63 6f 64 65 20 75 73 65 64 20 74 6f 20 74 65 72  code used to ter
d900: 6d 69 6e 61 74 65 20 74 68 65 20 6c 6f 6f 70 20  minate the loop 
d910: 2a 2f 0a 20 20 69 6e 74 20 6e 45 71 3b 20 20 20  */.  int nEq;   
d920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d930: 6d 62 65 72 20 6f 66 20 3d 3d 20 6f 72 20 49 4e  mber of == or IN
d940: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20   constraints on 
d950: 74 68 69 73 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69  this loop */.  i
d960: 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20  nt nIn;         
d970: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d980: 66 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 63  f IN operators c
d990: 6f 6e 73 74 72 61 69 6e 69 6e 67 20 74 68 69 73  onstraining this
d9a0: 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63   loop */.  struc
d9b0: 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20 20 69  t InLoop {.    i
d9c0: 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
d9d0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
d9e0: 45 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  E cursor used by
d9f0: 20 74 68 69 73 20 49 4e 20 6f 70 65 72 61 74 6f   this IN operato
da00: 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 6f 70  r */.    int top
da10: 41 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  Addr;           
da20: 2f 2a 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e  /* Top of the IN
da30: 20 6c 6f 6f 70 20 2a 2f 0a 20 20 7d 20 2a 61 49   loop */.  } *aI
da40: 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nLoop;          
da50: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
da60: 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65  about each neste
da70: 64 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f  d IN operator */
da80: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  .  sqlite3_index
da90: 5f 69 6e 66 6f 20 2a 70 42 65 73 74 49 64 78 3b  _info *pBestIdx;
daa0: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 72    /* Index infor
dab0: 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  mation for this 
dac0: 6c 65 76 65 6c 20 2a 2f 0a 0a 20 20 2f 2a 20 54  level */..  /* T
dad0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65  he following fie
dae0: 6c 64 20 69 73 20 72 65 61 6c 6c 79 20 6e 6f 74  ld is really not
daf0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 75 72   part of the cur
db00: 72 65 6e 74 20 6c 65 76 65 6c 2e 20 20 42 75 74  rent level.  But
db10: 0a 20 20 2a 2a 20 77 65 20 6e 65 65 64 20 61 20  .  ** we need a 
db20: 70 6c 61 63 65 20 74 6f 20 63 61 63 68 65 20 69  place to cache i
db30: 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ndex information
db40: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20   for each table 
db50: 69 6e 20 74 68 65 0a 20 20 2a 2a 20 46 52 4f 4d  in the.  ** FROM
db60: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
db70: 57 68 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63  WhereLevel struc
db80: 74 75 72 65 20 69 73 20 61 20 63 6f 6e 76 65 6e  ture is a conven
db90: 69 65 6e 74 20 70 6c 61 63 65 2e 0a 20 20 2a 2f  ient place..  */
dba0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  .  sqlite3_index
dbb0: 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b  _info *pIdxInfo;
dbc0: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20    /* Index info 
dbd0: 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63 65 20  for n-th source 
dbe0: 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
dbf0: 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
dc00: 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 66 6c  iate for the wfl
dc10: 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
dc20: 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
dc30: 69 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  in()..*/.#define
dc40: 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
dc50: 4f 52 4d 41 4c 20 20 20 20 20 30 20 20 20 2f 2a  ORMAL     0   /*
dc60: 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
dc70: 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
dc80: 4d 49 4e 20 20 20 20 20 20 20 20 31 20 20 20 2f  MIN        1   /
dc90: 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
dca0: 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20  ssing for min() 
dcb0: 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
dcc0: 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41  WHERE_ORDERBY_MA
dcd0: 58 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  X        2   /* 
dce0: 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
dcf0: 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
dd00: 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
dd10: 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
dd20: 52 45 44 20 20 20 20 34 20 20 20 2f 2a 20 57 61  RED    4   /* Wa
dd30: 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
dd40: 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
dd50: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57 48  */../*.** The WH
dd60: 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63 65  ERE clause proce
dd70: 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20 68 61  ssing routine ha
dd80: 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20 20 54  s two halves.  T
dd90: 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61 72 74  he.** first part
dda0: 20 64 6f 65 73 20 74 68 65 20 73 74 61 72 74 20   does the start 
ddb0: 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f  of the WHERE loo
ddc0: 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64  p and the second
ddd0: 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20 74 68  .** half does th
dde0: 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20 57 48  e tail of the WH
ddf0: 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20 69 6e  ERE loop.  An in
de00: 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
de10: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 72  s structure is r
de20: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 66  eturned by the f
de30: 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20 70 61  irst half and pa
de40: 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74 68 65  ssed.** into the
de50: 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74 6f 20   second half to 
de60: 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74 69 6e  give some contin
de70: 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uity..*/.struct 
de80: 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20 50 61  WhereInfo {.  Pa
de90: 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
dea0: 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e     /* Parsing an
deb0: 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6e  d code generatin
dec0: 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 75  g context */.  u
ded0: 38 20 6f 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20  8 okOnePass;    
dee0: 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65      /* Ok to use
def0: 20 6f 6e 65 2d 70 61 73 73 20 61 6c 67 6f 72 69   one-pass algori
df00: 74 68 6d 20 66 6f 72 20 55 50 44 41 54 45 20 6f  thm for UPDATE o
df10: 72 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20 53 72  r DELETE */.  Sr
df20: 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73 74 3b  cList *pTabList;
df30: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61     /* List of ta
df40: 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
df50: 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20   */.  int iTop; 
df60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
df70: 65 20 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67  e very beginning
df80: 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f   of the WHERE lo
df90: 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e  op */.  int iCon
dfa0: 74 69 6e 75 65 3b 20 20 20 20 20 20 20 2f 2a 20  tinue;       /* 
dfb0: 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e  Jump here to con
dfc0: 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78 74 20  tinue with next 
dfd0: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
dfe0: 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20  iBreak;         
dff0: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
e000: 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20 74 68   break out of th
e010: 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20  e loop */.  int 
e020: 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  nLevel;         
e030: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
e040: 73 74 65 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73  sted loop */.  s
e050: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
e060: 6f 20 2a 2a 61 70 49 6e 66 6f 3b 20 20 2f 2a 20  o **apInfo;  /* 
e070: 41 72 72 61 79 20 6f 66 20 70 6f 69 6e 74 65 72  Array of pointer
e080: 73 20 74 6f 20 69 6e 64 65 78 20 69 6e 66 6f 20  s to index info 
e090: 73 74 72 75 63 74 75 72 65 73 20 2a 2f 0a 20 20  structures */.  
e0a0: 57 68 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b  WhereLevel a[1];
e0b0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
e0c0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e  ion about each n
e0d0: 65 73 74 20 6c 6f 6f 70 20 69 6e 20 74 68 65 20  est loop in the 
e0e0: 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  WHERE */.};../*.
e0f0: 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
e100: 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
e110: 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
e120: 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
e130: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
e140: 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
e150: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
e160: 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
e170: 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
e180: 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
e190: 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
e1a0: 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
e1b0: 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
e1c0: 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
e1d0: 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
e1e0: 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
e1f0: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
e200: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
e210: 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
e220: 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
e230: 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
e240: 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
e250: 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
e260: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
e270: 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
e280: 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
e290: 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
e2a0: 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
e2b0: 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
e2c0: 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
e2d0: 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
e2e0: 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
e2f0: 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
e300: 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
e310: 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
e320: 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
e330: 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
e340: 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
e350: 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
e360: 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
e370: 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
e380: 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
e390: 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
e3a0: 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
e3b0: 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
e3c0: 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
e3d0: 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
e3e0: 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
e3f0: 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
e400: 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
e410: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
e420: 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
e430: 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
e440: 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
e450: 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
e460: 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
e470: 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
e480: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
e490: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
e4a0: 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
e4b0: 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
e4c0: 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
e4d0: 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
e4e0: 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
e4f0: 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
e500: 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
e510: 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
e520: 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
e530: 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
e540: 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
e550: 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
e560: 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
e570: 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
e580: 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
e590: 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
e5a0: 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
e5b0: 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
e5c0: 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
e5d0: 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
e5e0: 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
e5f0: 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
e600: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  s */.  int nRef;
e610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e620: 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
e630: 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
e640: 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
e650: 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
e660: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
e670: 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
e680: 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
e690: 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20  g names */.  u8 
e6a0: 61 6c 6c 6f 77 41 67 67 3b 20 20 20 20 20 20 20  allowAgg;       
e6b0: 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
e6c0: 75 6e 63 74 69 6f 6e 73 20 61 6c 6c 6f 77 65 64  unctions allowed
e6d0: 20 68 65 72 65 20 2a 2f 0a 20 20 75 38 20 68 61   here */.  u8 ha
e6e0: 73 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  sAgg;           
e6f0: 2f 2a 20 54 72 75 65 20 69 66 20 61 67 67 72 65  /* True if aggre
e700: 67 61 74 65 73 20 61 72 65 20 73 65 65 6e 20 2a  gates are seen *
e710: 2f 0a 20 20 75 38 20 69 73 43 68 65 63 6b 3b 20  /.  u8 isCheck; 
e720: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
e730: 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
e740: 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
e750: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 69  onstraint */.  i
e760: 6e 74 20 6e 44 65 70 74 68 3b 20 20 20 20 20 20  nt nDepth;      
e770: 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
e780: 73 75 62 71 75 65 72 79 20 72 65 63 75 72 73 69  subquery recursi
e790: 6f 6e 2e 20 31 20 66 6f 72 20 6e 6f 20 72 65 63  on. 1 for no rec
e7a0: 75 72 73 69 6f 6e 20 2a 2f 0a 20 20 41 67 67 49  ursion */.  AggI
e7b0: 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
e7c0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
e7d0: 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
e7e0: 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
e7f0: 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
e800: 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
e810: 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
e820: 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
e830: 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 7d 3b 0a 0a  utermost */.};..
e840: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
e850: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
e860: 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
e870: 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
e880: 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
e890: 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
e8a0: 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
e8b0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
e8c0: 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
e8d0: 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
e8e0: 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
e8f0: 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
e900: 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
e910: 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
e920: 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
e930: 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
e940: 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
e950: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
e960: 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
e970: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
e980: 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
e990: 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
e9a0: 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
e9b0: 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
e9c0: 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
e9d0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
e9e0: 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
e9f0: 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
ea00: 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
ea10: 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
ea20: 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
ea30: 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
ea40: 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
ea50: 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
ea60: 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
ea70: 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
ea80: 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
ea90: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
eaa0: 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
eab0: 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
eac0: 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
ead0: 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
eae0: 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
eaf0: 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
eb00: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
eb10: 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
eb20: 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
eb30: 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
eb40: 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
eb50: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
eb60: 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
eb70: 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
eb80: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
eb90: 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
eba0: 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
ebb0: 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
ebc0: 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
ebd0: 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
ebe0: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
ebf0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
ec00: 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
ec10: 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
ec20: 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
ec30: 61 6e 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  an[2] contains c
ec40: 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
ec50: 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
ec60: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
ec70: 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
ec80: 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
ec90: 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
eca0: 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
ecb0: 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
ecc0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
ecd0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
ece0: 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
ecf0: 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
ed00: 43 45 50 54 20 2a 2f 0a 20 20 75 38 20 69 73 44  CEPT */.  u8 isD
ed10: 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
ed20: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
ed30: 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
ed40: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
ed50: 20 75 38 20 69 73 52 65 73 6f 6c 76 65 64 3b 20   u8 isResolved; 
ed60: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
ed70: 6f 6e 63 65 20 73 71 6c 69 74 65 33 53 65 6c 65  once sqlite3Sele
ed80: 63 74 52 65 73 6f 6c 76 65 28 29 20 68 61 73 20  ctResolve() has 
ed90: 72 75 6e 2e 20 2a 2f 0a 20 20 75 38 20 69 73 41  run. */.  u8 isA
eda0: 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
edb0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
edc0: 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
edd0: 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 38 20 75   query */.  u8 u
ede0: 73 65 73 45 70 68 6d 3b 20 20 20 20 20 20 20 20  sesEphm;        
edf0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 73     /* True if us
ee00: 65 73 20 61 6e 20 4f 70 65 6e 45 70 68 65 6d 65  es an OpenEpheme
ee10: 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  ral opcode */.  
ee20: 75 38 20 64 69 73 61 6c 6c 6f 77 4f 72 64 65 72  u8 disallowOrder
ee30: 42 79 3b 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  By;    /* Do not
ee40: 20 61 6c 6c 6f 77 20 61 6e 20 4f 52 44 45 52 20   allow an ORDER 
ee50: 42 59 20 74 6f 20 62 65 20 61 74 74 61 63 68 65  BY to be attache
ee60: 64 20 69 66 20 54 52 55 45 20 2a 2f 0a 20 20 63  d if TRUE */.  c
ee70: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
ee80: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 52 65 63        /* MakeRec
ee90: 6f 72 64 20 77 69 74 68 20 74 68 69 73 20 61 66  ord with this af
eea0: 66 69 6e 69 74 79 20 66 6f 72 20 53 52 54 5f 53  finity for SRT_S
eeb0: 65 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  et */.  SrcList 
eec0: 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
eed0: 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
eee0: 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
eef0: 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
ef00: 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
ef10: 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
ef20: 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
ef30: 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
ef40: 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
ef50: 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
ef60: 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
ef70: 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
ef80: 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
ef90: 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
efa0: 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
efb0: 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
efc0: 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
efd0: 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
efe0: 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
eff0: 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
f000: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
f010: 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
f020: 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
f030: 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65  compound */.  Se
f040: 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74  lect *pRightmost
f050: 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f  ;    /* Right-mo
f060: 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  st select in a c
f070: 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
f080: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78  tatement */.  Ex
f090: 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
f0a0: 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
f0b0: 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
f0c0: 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
f0d0: 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
f0e0: 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
f0f0: 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
f100: 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
f110: 75 73 65 64 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  used. */.  int i
f120: 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
f130: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
f140: 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
f150: 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
f160: 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61  nters */.  int a
f170: 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20  ddrOpenEphm[3]; 
f180: 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
f190: 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
f1a0: 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
f1b0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
f1c0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
f1d0: 65 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69 73  elect can be dis
f1e0: 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
f1f0: 72 61 6c 20 77 61 79 73 2e 0a 2a 2f 0a 23 64 65  ral ways..*/.#de
f200: 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
f210: 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
f220: 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
f230: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
f240: 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
f250: 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
f260: 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
f270: 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
f280: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
f290: 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
f2a0: 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
f2b0: 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
f2c0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
f2d0: 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
f2e0: 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
f2f0: 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
f300: 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54  nywhere */../* T
f310: 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
f320: 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
f330: 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
f340: 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
f350: 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
f360: 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
f370: 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65  RT_Discard)..#de
f380: 66 69 6e 65 20 53 52 54 5f 43 61 6c 6c 62 61 63  fine SRT_Callbac
f390: 6b 20 20 20 20 20 35 20 20 2f 2a 20 49 6e 76 6f  k     5  /* Invo
f3a0: 6b 65 20 61 20 63 61 6c 6c 62 61 63 6b 20 77 69  ke a callback wi
f3b0: 74 68 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  th each row of r
f3c0: 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
f3d0: 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
f3e0: 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    6  /* Store re
f3f0: 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
f400: 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
f410: 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
f420: 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 6e 6f    7  /* Store no
f430: 6e 2d 6e 75 6c 6c 20 72 65 73 75 6c 74 73 20 61  n-null results a
f440: 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
f450: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
f460: 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38  T_Table        8
f470: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
f480: 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
f490: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
f4a0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
f4b0: 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20  _EphemTab     9 
f4c0: 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
f4d0: 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
f4e0: 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
f4f0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
f500: 5f 53 75 62 72 6f 75 74 69 6e 65 20 20 31 30 20  _Subroutine  10 
f510: 20 2f 2a 20 43 61 6c 6c 20 61 20 73 75 62 72 6f   /* Call a subro
f520: 75 74 69 6e 65 20 74 6f 20 68 61 6e 64 6c 65 20  utine to handle 
f530: 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a  results */../*.*
f540: 2a 20 41 20 73 74 72 75 63 74 75 72 65 20 75 73  * A structure us
f550: 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20  ed to customize 
f560: 74 68 65 20 62 65 68 61 76 69 6f 75 72 20 6f 66  the behaviour of
f570: 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 29   sqlite3Select()
f580: 2e 20 53 65 65 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  . See.** comment
f590: 73 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 53  s above sqlite3S
f5a0: 65 6c 65 63 74 28 29 20 66 6f 72 20 64 65 74 61  elect() for deta
f5b0: 69 6c 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ils..*/.typedef 
f5c0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
f5d0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 73 74  t SelectDest;.st
f5e0: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
f5f0: 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
f600: 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
f610: 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
f620: 65 73 75 6c 74 73 20 2a 2f 0a 20 20 75 38 20 61  esults */.  u8 a
f630: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f640: 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
f650: 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
f660: 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72  et */.  int iPar
f670: 6d 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  m;        /* A p
f680: 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
f690: 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
f6a0: 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
f6b0: 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
f6c0: 20 20 2f 2a 20 52 65 74 75 72 6e 20 61 64 64 72    /* Return addr
f6d0: 65 73 73 20 72 65 67 69 73 74 65 72 20 66 6f 72  ess register for
f6e0: 20 53 52 54 5f 53 75 62 72 6f 75 74 69 6e 65 20   SRT_Subroutine 
f6f0: 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  */.  int iMem;  
f700: 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
f710: 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
f720: 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
f730: 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  n */.  int nMem;
f740: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f750: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
f760: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a  allocated */.};.
f770: 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
f780: 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
f790: 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
f7a0: 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
f7b0: 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
f7c0: 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
f7d0: 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
f7e0: 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
f7f0: 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
f800: 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
f810: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
f820: 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
f830: 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
f840: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
f850: 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
f860: 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
f870: 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
f880: 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
f890: 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
f8a0: 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
f8b0: 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
f8c0: 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
f8d0: 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
f8e0: 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
f8f0: 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
f900: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
f910: 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
f920: 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
f930: 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
f940: 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
f950: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
f960: 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
f970: 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
f980: 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
f990: 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
f9a0: 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
f9b0: 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
f9c0: 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
f9d0: 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
f9e0: 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
f9f0: 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
fa00: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
fa10: 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
fa20: 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
fa30: 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
fa40: 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
fa50: 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
fa60: 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
fa70: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
fa80: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
fa90: 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
faa0: 75 63 74 75 72 65 20 2a 2f 0a 20 20 69 6e 74 20  ucture */.  int 
fab0: 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
fac0: 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
fad0: 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
fae0: 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
faf0: 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
fb00: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
fb10: 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
fb20: 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
fb30: 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
fb40: 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
fb50: 6f 64 65 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ode */.  u8 colN
fb60: 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
fb70: 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
fb80: 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
fb90: 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
fba0: 62 65 20 2a 2f 0a 20 20 75 38 20 6e 61 6d 65 43  be */.  u8 nameC
fbb0: 6c 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  lash;        /* 
fbc0: 41 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c  A permanent tabl
fbd0: 65 20 6e 61 6d 65 20 63 6c 61 73 68 65 73 20 77  e name clashes w
fbe0: 69 74 68 20 74 65 6d 70 20 74 61 62 6c 65 20 6e  ith temp table n
fbf0: 61 6d 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  ame */.  u8 chec
fc00: 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
fc10: 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
fc20: 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
fc30: 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
fc40: 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
fc50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
fc60: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
fc70: 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
fc80: 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
fc90: 20 75 38 20 70 61 72 73 65 45 72 72 6f 72 3b 20   u8 parseError; 
fca0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
fcb0: 74 65 72 20 61 20 70 61 72 73 69 6e 67 20 65 72  ter a parsing er
fcc0: 72 6f 72 2e 20 20 54 69 63 6b 65 74 20 23 31 37  ror.  Ticket #17
fcd0: 39 34 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  94 */.  u8 nTemp
fce0: 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
fcf0: 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
fd00: 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
fd10: 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
fd20: 20 75 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b 20   u8 nTempInUse; 
fd30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fd40: 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d 20 63 75  of aTempReg[] cu
fd50: 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
fd60: 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  out */.  int aTe
fd70: 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
fd80: 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
fd90: 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
fda0: 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
fdb0: 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
fdc0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
fdd0: 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
fde0: 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
fdf0: 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
fe00: 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
fe10: 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
fe20: 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
fe30: 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
fe40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
fe50: 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
fe60: 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
fe70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fe80: 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
fe90: 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
fea0: 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
feb0: 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
fec0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fed0: 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
fee0: 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
fef0: 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
ff00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ff10: 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
ff20: 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  far */.  int ckB
ff30: 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
ff40: 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
ff50: 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
ff60: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
ff70: 2a 2f 0a 20 20 69 6e 74 20 64 69 73 61 62 6c 65  */.  int disable
ff80: 43 6f 6c 43 61 63 68 65 3b 20 2f 2a 20 54 72 75  ColCache; /* Tru
ff90: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 61 64 64  e to disable add
ffa0: 69 6e 67 20 74 6f 20 63 6f 6c 75 6d 6e 20 63 61  ing to column ca
ffb0: 63 68 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  che */.  int nCo
ffc0: 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 2f 2a  lCache;       /*
ffd0: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
ffe0: 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  es in the column
fff0: 20 63 61 63 68 65 20 2a 2f 0a 20 20 69 6e 74 20   cache */.  int 
10000 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  iColCache;      
10010 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 6f   /* Next entry o
10020 66 20 74 68 65 20 63 61 63 68 65 20 74 6f 20 72  f the cache to r
10030 65 70 6c 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  eplace */.  stru
10040 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
10050 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
10060 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
10070 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
10080 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
10090 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
100a0 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
100b0 62 65 72 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ber */.    char 
100c0 61 66 66 43 68 61 6e 67 65 3b 20 20 20 20 20 20  affChange;      
100d0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
100e0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 68 61   register has ha
100f0 64 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  d an affinity ch
10100 61 6e 67 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ange */.    int 
10110 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
10120 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
10130 6c 64 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74  lding value of t
10140 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
10150 7d 20 61 43 6f 6c 43 61 63 68 65 5b 31 30 5d 3b  } aColCache[10];
10160 20 20 20 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20       /* One for 
10170 65 61 63 68 20 76 61 6c 69 64 20 63 6f 6c 75 6d  each valid colum
10180 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
10190 0a 20 20 75 33 32 20 77 72 69 74 65 4d 61 73 6b  .  u32 writeMask
101a0 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 61 72 74  ;       /* Start
101b0 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
101c0 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
101d0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 75 33 32  tabases */.  u32
101e0 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 20 20   cookieMask;    
101f0 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
10200 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
10210 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
10220 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20  nt cookieGoto;  
10230 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
10240 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f  f OP_Goto to coo
10250 6b 69 65 20 76 65 72 69 66 69 65 72 20 73 75 62  kie verifier sub
10260 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  routine */.  int
10270 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
10280 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
10290 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
102a0 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
102b0 72 69 66 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rify */.#ifndef 
102c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
102d0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
102e0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
102f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
10300 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
10310 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
10320 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
10330 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
10340 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
10350 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
10360 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 65 67  #endif.  int reg
10370 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
10380 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
10390 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
103a0 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
103b0 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
103c0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
103d0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
103e0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
103f0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
10400 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63  .  /* Above is c
10410 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
10420 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
10430 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
10440 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
10450 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
10460 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b   */..  int nVar;
10470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10480 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
10490 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
104a0 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
104b0 0a 20 20 69 6e 74 20 6e 56 61 72 45 78 70 72 3b  .  int nVarExpr;
104c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
104d0 72 20 6f 66 20 75 73 65 64 20 73 6c 6f 74 73 20  r of used slots 
104e0 69 6e 20 61 70 56 61 72 45 78 70 72 5b 5d 20 2a  in apVarExpr[] *
104f0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 45 78 70 72  /.  int nVarExpr
10500 41 6c 6c 6f 63 3b 20 20 20 2f 2a 20 4e 75 6d 62  Alloc;   /* Numb
10510 65 72 20 6f 66 20 61 6c 6c 6f 63 61 74 65 64 20  er of allocated 
10520 73 6c 6f 74 73 20 69 6e 20 61 70 56 61 72 45 78  slots in apVarEx
10530 70 72 5b 5d 20 2a 2f 0a 20 20 45 78 70 72 20 2a  pr[] */.  Expr *
10540 2a 61 70 56 61 72 45 78 70 72 3b 20 20 20 20 2f  *apVarExpr;    /
10550 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 3a 61  * Pointers to :a
10560 61 61 20 61 6e 64 20 24 61 61 61 61 20 77 69 6c  aa and $aaaa wil
10570 64 63 61 72 64 20 65 78 70 72 65 73 73 69 6f 6e  dcard expression
10580 73 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  s */.  u8 explai
10590 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
105a0 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
105b0 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
105c0 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
105d0 0a 20 20 54 6f 6b 65 6e 20 73 45 72 72 54 6f 6b  .  Token sErrTok
105e0 65 6e 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 74  en;     /* The t
105f0 6f 6b 65 6e 20 61 74 20 77 68 69 63 68 20 74 68  oken at which th
10600 65 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  e error occurred
10610 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
10620 65 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 6f  eToken;    /* To
10630 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
10640 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
10650 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
10660 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
10670 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
10680 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ken parsed */.  
10690 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
106a0 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20  ;    /* All SQL 
106b0 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
106c0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 2f  char *zTail;   /
106d0 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
106e0 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
106f0 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
10700 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
10710 62 6c 65 3b 20 20 20 20 2f 2a 20 41 20 74 61 62  ble;    /* A tab
10720 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
10730 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
10740 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
10750 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
10760 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
10770 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
10780 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
10790 45 52 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  ER */.  TriggerS
107a0 74 61 63 6b 20 2a 74 72 69 67 53 74 61 63 6b 3b  tack *trigStack;
107b0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 61 63 74    /* Trigger act
107c0 69 6f 6e 73 20 62 65 69 6e 67 20 63 6f 64 65 64  ions being coded
107d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
107e0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
107f0 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
10800 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
10810 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
10820 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
10830 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
10840 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10860 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
10870 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
10880 6e 74 20 2a 2f 0a 20 20 75 38 20 64 65 63 6c 61  nt */.  u8 decla
10890 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
108a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
108b0 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
108c0 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
108d0 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
108e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
108f0 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
10900 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
10910 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
10920 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
10930 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
10940 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
10950 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
10960 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65  #endif.  int nHe
10970 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
10980 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
10990 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
109a0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
109b0 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
109c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
109d0 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
109e0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
109f0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
10a00 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
10a10 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
10a20 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
10a30 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
10a40 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10a50 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
10a60 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
10a70 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
10a80 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
10a90 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
10aa0 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
10ab0 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
10ac0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
10ad0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
10ae0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
10af0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
10b00 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
10b10 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
10b20 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
10b30 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
10b40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
10b50 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
10b60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
10b70 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
10b80 50 32 20 76 61 6c 75 65 20 69 6e 20 4f 50 5f 49  P2 value in OP_I
10b90 6e 73 65 72 74 20 61 6e 64 20 4f 50 5f 44 65 6c  nsert and OP_Del
10ba0 65 74 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ete.*/.#define O
10bb0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
10bc0 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
10bd0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
10be0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
10bf0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 32 20  LAG_LASTROWID 2 
10c00 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
10c10 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ate db->lastRowi
10c20 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
10c30 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 34 20  LAG_ISUPDATE  4 
10c40 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
10c50 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
10c60 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
10c70 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
10c80 20 20 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69    8    /* This i
10c90 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
10ca0 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 0a 2f 2a 0a  n append */../*.
10cb0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
10cc0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
10cd0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
10ce0 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
10cf0 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
10d00 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
10d10 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
10d20 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
10d30 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
10d40 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
10d50 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
10d60 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
10d70 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
10d80 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
10d90 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
10da0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
10db0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
10dc0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
10dd0 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
10de0 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
10df0 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
10e00 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
10e10 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
10e20 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
10e30 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
10e40 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
10e50 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
10e60 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
10e70 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
10e80 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
10e90 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
10ea0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
10eb0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
10ec0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
10ed0 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
10ee0 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
10ef0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
10f00 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
10f10 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
10f20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
10f30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
10f40 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
10f50 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
10f60 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
10f70 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
10f80 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 6e 61 6d  er {.  char *nam
10f90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
10fa0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
10fb0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
10fe0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
10ff0 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
11000 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
11010 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
11020 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11040 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
11050 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
11060 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
11070 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
11080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
11090 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
110a0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
110b0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
110c0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
110d0 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
110e0 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
110f0 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
11100 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
11110 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
11120 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
11130 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
11140 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
11150 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11170 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
11180 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
11190 2a 2f 0a 20 20 54 6f 6b 65 6e 20 6e 61 6d 65 54  */.  Token nameT
111a0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  oken;        /* 
111b0 54 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 69 6e 67  Token containing
111c0 20 7a 4e 61 6d 65 2e 20 55 73 65 20 64 75 72 69   zName. Use duri
111d0 6e 67 20 70 61 72 73 69 6e 67 20 6f 6e 6c 79 20  ng parsing only 
111e0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
111f0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
11200 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
11210 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
11220 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
11230 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
11240 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
11250 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
11260 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
11270 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
11280 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
11290 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
112a0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
112b0 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
112c0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
112d0 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
112e0 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
112f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
11300 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
11310 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
11320 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
11330 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
11340 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
11350 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a  mine which. .**.
11360 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
11370 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
11380 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
11390 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
113a0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
113b0 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
113c0 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
113d0 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
113e0 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
113f0 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
11400 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
11410 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
11420 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
11430 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
11440 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
11450 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
11460 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
11470 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
11480 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
11490 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49  rogram. . *. * I
114a0 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
114b0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
114c0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
114d0 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
114e0 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
114f0 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
11500 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
11510 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
11520 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
11530 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  he . * associate
11540 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
11550 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
11560 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
11570 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
11580 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
11590 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
115a0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20  ger-program.. * 
115b0 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
115c0 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
115d0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
115e0 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
115f0 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
11600 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
11610 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
11620 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
11630 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
11640 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20  rmined by the . 
11650 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
11660 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
11670 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
11680 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
11690 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
116a0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
116b0 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
116c0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
116d0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
116e0 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
116f0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
11710 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
11720 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
11730 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
11740 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
11750 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
11760 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
11770 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
11780 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
11790 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
117a0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
117b0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
117c0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
117d0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
117e0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
117f0 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
11800 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
11810 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
11820 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
11830 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
11840 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
11850 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
11860 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
11870 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
11880 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
11890 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
118a0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
118c0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
118d0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
118e0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
118f0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
11900 69 6e 67 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ing the name of 
11910 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
11920 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
11930 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
11940 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
11950 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
11960 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
11970 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
11980 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
11990 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
119a0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
119b0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
119c0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
119d0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
119e0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
119f0 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
11a00 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
11a10 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
11a20 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
11a30 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
11a40 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
11a50 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
11a60 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
11a70 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
11a80 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
11a90 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
11aa0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
11ab0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
11ac0 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
11ad0 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
11ae0 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
11af0 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
11b00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
11b10 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
11b20 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
11b30 74 65 70 20 7b 0a 20 20 69 6e 74 20 6f 70 3b 20  tep {.  int op; 
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11b50 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
11b60 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
11b70 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
11b80 54 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  T */.  int orcon
11b90 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  f;          /* O
11ba0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
11bb0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
11bc0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
11bd0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
11be0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
11bf0 74 20 6f 66 20 2a 2f 0a 0a 20 20 53 65 6c 65 63  t of */..  Selec
11c00 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
11c10 2f 2a 20 56 61 6c 69 64 20 66 6f 72 20 53 45 4c  /* Valid for SEL
11c20 45 43 54 20 61 6e 64 20 73 6f 6d 65 74 69 6d 65  ECT and sometime
11c30 73 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s .             
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 53               INS
11c50 45 52 54 20 73 74 65 70 73 20 28 77 68 65 6e 20  ERT steps (when 
11c60 70 45 78 70 72 4c 69 73 74 20 3d 3d 20 30 29 20  pExprList == 0) 
11c70 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
11c80 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  t;        /* Val
11c90 69 64 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  id for DELETE, U
11ca0 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 73 74  PDATE, INSERT st
11cb0 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  eps */.  Expr *p
11cc0 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
11cd0 20 56 61 6c 69 64 20 66 6f 72 20 44 45 4c 45 54   Valid for DELET
11ce0 45 2c 20 55 50 44 41 54 45 20 73 74 65 70 73 20  E, UPDATE steps 
11cf0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
11d00 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 56 61 6c  ExprList; /* Val
11d10 69 64 20 66 6f 72 20 55 50 44 41 54 45 20 73 74  id for UPDATE st
11d20 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 73 6f 6d  atements and som
11d30 65 74 69 6d 65 73 20 0a 20 20 20 20 20 20 20 20  etimes .        
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 20 20 49 4e 53 45 52 54 20 73 74 65 70 73 20     INSERT steps 
11d60 28 77 68 65 6e 20 70 53 65 6c 65 63 74 20 3d 3d  (when pSelect ==
11d70 20 30 29 20 20 20 20 20 20 20 20 20 2a 2f 0a 20   0)         */. 
11d80 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
11d90 3b 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 20 66  ;     /* Valid f
11da0 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
11db0 65 6e 74 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 54  ents only */.  T
11dc0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
11dd0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
11de0 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
11df0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
11e00 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
11e10 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
11e20 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
11e30 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
11e40 7d 3b 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73  };../*. * An ins
11e50 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
11e60 54 72 69 67 67 65 72 53 74 61 63 6b 20 73 74 6f  TriggerStack sto
11e70 72 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  res information 
11e80 72 65 71 75 69 72 65 64 20 64 75 72 69 6e 67 20  required during 
11e90 63 6f 64 65 0a 20 2a 20 67 65 6e 65 72 61 74 69  code. * generati
11ea0 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 74  on of a single t
11eb0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
11ec0 57 68 69 6c 65 20 74 68 65 20 74 72 69 67 67 65  While the trigge
11ed0 72 20 70 72 6f 67 72 61 6d 20 69 73 20 62 65 69  r program is bei
11ee0 6e 67 0a 20 2a 20 63 6f 64 65 64 2c 20 69 74 73  ng. * coded, its
11ef0 20 61 73 73 6f 63 69 61 74 65 64 20 54 72 69 67   associated Trig
11f00 67 65 72 53 74 61 63 6b 20 69 6e 73 74 61 6e 63  gerStack instanc
11f10 65 20 69 73 20 70 6f 69 6e 74 65 64 20 74 6f 20  e is pointed to 
11f20 62 79 20 74 68 65 0a 20 2a 20 22 70 54 72 69 67  by the. * "pTrig
11f30 67 65 72 53 74 61 63 6b 22 20 6d 65 6d 62 65 72  gerStack" member
11f40 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 73 74   of the Parse st
11f50 72 75 63 74 75 72 65 2e 0a 20 2a 0a 20 2a 20 54  ructure.. *. * T
11f60 68 65 20 70 54 61 62 20 6d 65 6d 62 65 72 20 70  he pTab member p
11f70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 74 61 62  oints to the tab
11f80 6c 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73  le that triggers
11f90 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
11fa0 20 6f 6e 2e 20 54 68 65 20 0a 20 2a 20 6e 65 77   on. The . * new
11fb0 49 64 78 20 6d 65 6d 62 65 72 20 63 6f 6e 74 61  Idx member conta
11fc0 69 6e 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66  ins the index of
11fd0 20 74 68 65 20 76 64 62 65 20 63 75 72 73 6f 72   the vdbe cursor
11fe0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 61 74 20   that points at 
11ff0 74 68 65 20 74 65 6d 70 0a 20 2a 20 74 61 62 6c  the temp. * tabl
12000 65 20 74 68 61 74 20 73 74 6f 72 65 73 20 74 68  e that stores th
12010 65 20 6e 65 77 2e 2a 20 72 65 66 65 72 65 6e 63  e new.* referenc
12020 65 73 2e 20 49 66 20 6e 65 77 2e 2a 20 72 65 66  es. If new.* ref
12030 65 72 65 6e 63 65 73 20 61 72 65 20 6e 6f 74 20  erences are not 
12040 76 61 6c 69 64 0a 20 2a 20 66 6f 72 20 74 68 65  valid. * for the
12050 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20 63   trigger being c
12060 6f 64 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  oded (for exampl
12070 65 20 61 6e 20 4f 4e 20 44 45 4c 45 54 45 20 74  e an ON DELETE t
12080 72 69 67 67 65 72 29 2c 20 74 68 65 6e 20 6e 65  rigger), then ne
12090 77 49 64 78 0a 20 2a 20 69 73 20 73 65 74 20 74  wIdx. * is set t
120a0 6f 20 2d 31 2e 20 54 68 65 20 6f 6c 64 49 64 78  o -1. The oldIdx
120b0 20 6d 65 6d 62 65 72 20 69 73 20 61 6e 61 6c 6f   member is analo
120c0 67 6f 75 73 20 74 6f 20 6e 65 77 49 64 78 2c 20  gous to newIdx, 
120d0 66 6f 72 20 6f 6c 64 2e 2a 20 72 65 66 65 72 65  for old.* refere
120e0 6e 63 65 73 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  nces.. *. * The 
120f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
12100 63 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  cy to be used fo
12110 72 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  r the trigger pr
12120 6f 67 72 61 6d 20 73 74 65 70 73 20 69 73 20 73  ogram steps is s
12130 74 6f 72 65 64 20 0a 20 2a 20 61 73 20 74 68 65  tored . * as the
12140 20 6f 72 63 6f 6e 66 20 6d 65 6d 62 65 72 2e 20   orconf member. 
12150 49 66 20 74 68 69 73 20 69 73 20 4f 45 5f 44 65  If this is OE_De
12160 66 61 75 6c 74 2c 20 74 68 65 6e 20 74 68 65 20  fault, then the 
12170 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
12180 73 65 20 0a 20 2a 20 73 70 65 63 69 66 69 65 64  se . * specified
12190 20 66 6f 72 20 69 6e 64 69 76 69 64 75 61 6c 20   for individual 
121a0 74 72 69 67 67 65 72 73 20 73 74 65 70 73 20 69  triggers steps i
121b0 73 20 75 73 65 64 2e 0a 20 2a 0a 20 2a 20 73 74  s used.. *. * st
121c0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 61 63  ruct TriggerStac
121d0 6b 20 68 61 73 20 61 20 22 70 4e 65 78 74 22 20  k has a "pNext" 
121e0 6d 65 6d 62 65 72 2c 20 74 6f 20 61 6c 6c 6f 77  member, to allow
121f0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 73 20 74 6f   linked lists to
12200 20 62 65 0a 20 2a 20 63 6f 6e 73 74 72 75 63 74   be. * construct
12210 65 64 2e 20 57 68 65 6e 20 63 6f 64 69 6e 67 20  ed. When coding 
12220 6e 65 73 74 65 64 20 74 72 69 67 67 65 72 73 20  nested triggers 
12230 28 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20  (triggers fired 
12240 62 79 20 6f 74 68 65 72 20 74 72 69 67 67 65 72  by other trigger
12250 73 29 0a 20 2a 20 65 61 63 68 20 6e 65 73 74 65  s). * each neste
12260 64 20 74 72 69 67 67 65 72 20 73 74 6f 72 65 73  d trigger stores
12270 20 69 74 73 20 70 61 72 65 6e 74 20 74 72 69 67   its parent trig
12280 67 65 72 27 73 20 54 72 69 67 67 65 72 53 74 61  ger's TriggerSta
12290 63 6b 20 61 73 20 74 68 65 20 22 70 4e 65 78 74  ck as the "pNext
122a0 22 20 0a 20 2a 20 70 6f 69 6e 74 65 72 2e 20 4f  " . * pointer. O
122b0 6e 63 65 20 74 68 65 20 6e 65 73 74 65 64 20 74  nce the nested t
122c0 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
122d0 63 6f 64 65 64 2c 20 74 68 65 20 70 4e 65 78 74  coded, the pNext
122e0 20 76 61 6c 75 65 20 69 73 20 72 65 73 74 6f 72   value is restor
122f0 65 64 0a 20 2a 20 74 6f 20 74 68 65 20 70 54 72  ed. * to the pTr
12300 69 67 67 65 72 53 74 61 63 6b 20 6d 65 6d 62 65  iggerStack membe
12310 72 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 73  r of the Parse s
12320 74 75 63 74 75 72 65 20 61 6e 64 20 63 6f 64 69  tucture and codi
12330 6e 67 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74  ng of the parent
12340 0a 20 2a 20 74 72 69 67 67 65 72 20 63 6f 6e 74  . * trigger cont
12350 69 6e 75 65 73 2e 0a 20 2a 0a 20 2a 20 42 65 66  inues.. *. * Bef
12360 6f 72 65 20 61 20 6e 65 73 74 65 64 20 74 72 69  ore a nested tri
12370 67 67 65 72 20 69 73 20 63 6f 64 65 64 2c 20 74  gger is coded, t
12380 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 70  he linked list p
12390 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 74 68 65  ointed to by the
123a0 20 0a 20 2a 20 70 54 72 69 67 67 65 72 53 74 61   . * pTriggerSta
123b0 63 6b 20 69 73 20 73 63 61 6e 6e 65 64 20 74 6f  ck is scanned to
123c0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
123d0 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20   trigger is not 
123e0 61 62 6f 75 74 20 74 6f 20 62 65 20 63 6f 64 65  about to be code
123f0 64 0a 20 2a 20 72 65 63 75 72 73 69 76 65 6c 79  d. * recursively
12400 2e 20 49 66 20 74 68 69 73 20 63 6f 6e 64 69 74  . If this condit
12410 69 6f 6e 20 69 73 20 64 65 74 65 63 74 65 64 2c  ion is detected,
12420 20 74 68 65 20 6e 65 73 74 65 64 20 74 72 69 67   the nested trig
12430 67 65 72 20 69 73 20 6e 6f 74 20 63 6f 64 65 64  ger is not coded
12440 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
12450 67 67 65 72 53 74 61 63 6b 20 7b 0a 20 20 54 61  ggerStack {.  Ta
12460 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
12470 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 61 74     /* Table that
12480 20 74 72 69 67 67 65 72 73 20 61 72 65 20 63 75   triggers are cu
12490 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 63 6f  rrently being co
124a0 64 65 64 20 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ded on */.  int 
124b0 6e 65 77 49 64 78 3b 20 20 20 20 20 20 20 20 20  newIdx;         
124c0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 76 64 62   /* Index of vdb
124d0 65 20 63 75 72 73 6f 72 20 74 6f 20 22 6e 65 77  e cursor to "new
124e0 22 20 74 65 6d 70 20 74 61 62 6c 65 20 2a 2f 0a  " temp table */.
124f0 20 20 69 6e 74 20 6f 6c 64 49 64 78 3b 20 20 20    int oldIdx;   
12500 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
12510 6f 66 20 76 64 62 65 20 63 75 72 73 6f 72 20 74  of vdbe cursor t
12520 6f 20 22 6f 6c 64 22 20 74 65 6d 70 20 74 61 62  o "old" temp tab
12530 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 43  le */.  u32 newC
12540 6f 6c 4d 61 73 6b 3b 0a 20 20 75 33 32 20 6f 6c  olMask;.  u32 ol
12550 64 43 6f 6c 4d 61 73 6b 3b 0a 20 20 69 6e 74 20  dColMask;.  int 
12560 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
12570 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 72 63 6f   /* Current orco
12580 6e 66 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 69  nf policy */.  i
12590 6e 74 20 69 67 6e 6f 72 65 4a 75 6d 70 3b 20 20  nt ignoreJump;  
125a0 20 20 20 20 2f 2a 20 77 68 65 72 65 20 74 6f 20      /* where to 
125b0 6a 75 6d 70 20 74 6f 20 66 6f 72 20 61 20 52 41  jump to for a RA
125c0 49 53 45 28 49 47 4e 4f 52 45 29 20 2a 2f 0a 20  ISE(IGNORE) */. 
125d0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
125e0 65 72 3b 20 20 20 2f 2a 20 54 68 65 20 74 72 69  er;   /* The tri
125f0 67 67 65 72 20 63 75 72 72 65 6e 74 6c 79 20 62  gger currently b
12600 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20  eing coded */.  
12610 54 72 69 67 67 65 72 53 74 61 63 6b 20 2a 70 4e  TriggerStack *pN
12620 65 78 74 3b 20 2f 2a 20 4e 65 78 74 20 74 72 69  ext; /* Next tri
12630 67 67 65 72 20 64 6f 77 6e 20 6f 6e 20 74 68 65  gger down on the
12640 20 74 72 69 67 67 65 72 20 73 74 61 63 6b 20 2a   trigger stack *
12650 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
12660 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12670 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
12680 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
12690 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
126a0 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
126b0 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
126c0 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
126d0 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
126e0 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
126f0 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20  t.  .*/.typedef 
12700 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
12710 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
12720 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
12730 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
12740 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
12750 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
12760 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
12770 65 72 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ere */.  const c
12780 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
12790 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
127a0 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
127b0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
127c0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
127d0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
127e0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
127f0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
12800 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
12810 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
12820 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
12830 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
12840 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
12850 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
12860 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
12870 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
12880 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
12890 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
128a0 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
128b0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
128c0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
128d0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
128e0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
128f0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
12900 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20  char *zBase;    
12910 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
12920 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
12930 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
12940 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 2f  ar *zText;     /
12950 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
12960 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
12970 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20  .  int  nChar;  
12980 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
12990 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
129a0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c  ar */.  int  nAl
129b0 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 41 6d 6f 75  loc;     /* Amou
129c0 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
129d0 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
129e0 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63  /.  int  mxAlloc
129f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
12a00 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69  mum allowed stri
12a10 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75  ng length */.  u
12a20 38 20 20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  8   mallocFailed
12a30 3b 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74  ;   /* Becomes t
12a40 72 75 65 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72  rue if any memor
12a50 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69  y allocation fai
12a60 6c 73 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65  ls */.  u8   use
12a70 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  Malloc;      /* 
12a80 54 72 75 65 20 69 66 20 7a 54 65 78 74 20 69 73  True if zText is
12a90 20 65 6e 6c 61 72 67 61 62 6c 65 20 75 73 69 6e   enlargable usin
12aa0 67 20 72 65 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  g realloc */.  u
12ab0 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20 20 20  8   tooBig;     
12ac0 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74      /* Becomes t
12ad0 72 75 65 20 69 66 20 73 74 72 69 6e 67 20 73 69  rue if string si
12ae0 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d 69 74  ze exceeds limit
12af0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
12b00 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
12b10 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
12b20 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
12b30 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
12b40 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
12b50 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
12b60 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
12b70 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
12b80 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
12b90 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
12ba0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
12bb0 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
12bc0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
12bd0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
12be0 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
12bf0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
12c00 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
12c10 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
12c20 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
12c30 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
12c40 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
12c50 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ere */.  int rc;
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12c70 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
12c80 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
12c90 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73  tData;../*.** As
12ca0 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
12cb0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
12cc0 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
12cd0 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
12ce0 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
12cf0 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
12d00 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
12d10 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
12d20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
12d30 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
12d40 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
12d50 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
12d60 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
12d70 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
12da0 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
12db0 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
12dd0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
12e10 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 52 52   The SQLITE_CORR
12e20 55 50 54 5f 42 4b 50 54 20 6d 61 63 72 6f 20 63  UPT_BKPT macro c
12e30 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 63  an be either a c
12e40 6f 6e 73 74 61 6e 74 20 28 66 6f 72 20 70 72 6f  onstant (for pro
12e50 64 75 63 74 69 6f 6e 0a 2a 2a 20 62 75 69 6c 64  duction.** build
12e60 73 29 20 6f 72 20 61 20 66 75 6e 63 74 69 6f 6e  s) or a function
12e70 20 63 61 6c 6c 20 28 66 6f 72 20 64 65 62 75 67   call (for debug
12e80 67 69 6e 67 29 2e 20 20 49 66 20 69 74 20 69 73  ging).  If it is
12e90 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c   a function call
12ea0 2c 0a 2a 2a 20 69 74 20 61 6c 6c 6f 77 73 20 74  ,.** it allows t
12eb0 68 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 73  he operator to s
12ec0 65 74 20 61 20 62 72 65 61 6b 70 6f 69 6e 74 20  et a breakpoint 
12ed0 61 74 20 74 68 65 20 73 70 6f 74 20 77 68 65 72  at the spot wher
12ee0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
12ef0 72 72 75 70 74 69 6f 6e 20 69 73 20 66 69 72 73  rruption is firs
12f00 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2f 0a 23  t detected..*/.#
12f10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
12f20 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  UG.  int sqlite3
12f30 43 6f 72 72 75 70 74 28 76 6f 69 64 29 3b 0a 23  Corrupt(void);.#
12f40 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
12f50 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
12f60 74 65 33 43 6f 72 72 75 70 74 28 29 0a 23 20 64  te3Corrupt().# d
12f70 65 66 69 6e 65 20 44 45 42 55 47 4f 4e 4c 59 28  efine DEBUGONLY(
12f80 58 29 20 20 20 20 20 20 20 20 58 0a 23 65 6c 73  X)        X.#els
12f90 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
12fa0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 53  E_CORRUPT_BKPT S
12fb0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 0a 23 20  QLITE_CORRUPT.# 
12fc0 64 65 66 69 6e 65 20 44 45 42 55 47 4f 4e 4c 59  define DEBUGONLY
12fd0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
12fe0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
12ff0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
13000 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
13010 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 20  ICmp(const char 
13020 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
13030 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
13040 4e 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  NICmp(const char
13050 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
13060 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
13070 74 65 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e 73  te3IsNumber(cons
13080 74 20 63 68 61 72 2a 2c 20 69 6e 74 2a 2c 20 75  t char*, int*, u
13090 38 29 3b 0a 0a 76 6f 69 64 20 2a 73 71 6c 69 74  8);..void *sqlit
130a0 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 6e 73  e3MallocZero(uns
130b0 69 67 6e 65 64 29 3b 0a 76 6f 69 64 20 2a 73 71  igned);.void *sq
130c0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
130d0 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 6e 73 69  o(sqlite3*, unsi
130e0 67 6e 65 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  gned);.void *sql
130f0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
13100 73 71 6c 69 74 65 33 2a 2c 20 75 6e 73 69 67 6e  sqlite3*, unsign
13110 65 64 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ed);.char *sqlit
13120 65 33 53 74 72 44 75 70 28 63 6f 6e 73 74 20 63  e3StrDup(const c
13130 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
13140 69 74 65 33 53 74 72 4e 44 75 70 28 63 6f 6e 73  ite3StrNDup(cons
13150 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 63  t char*, int);.c
13160 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
13170 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
13180 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
13190 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
131a0 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
131b0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76  t char*, int);.v
131c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
131d0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
131e0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
131f0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
13200 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
13210 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
13220 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
13230 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 20  MallocSize(void 
13240 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  *);..int sqlite3
13250 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 0a  IsNaN(double);..
13260 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
13270 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
13280 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
13290 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
132a0 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
132b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
132c0 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
132d0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
132e0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
132f0 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
13300 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
13310 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
13320 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
13330 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
13340 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
13350 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 63  lite3TextToPtr(c
13360 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
13370 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
13380 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
13390 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
133a0 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
133b0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
133c0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
133d0 6c 69 74 65 33 45 72 72 6f 72 43 6c 65 61 72 28  lite3ErrorClear(
133e0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
133f0 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
13400 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
13410 33 44 65 71 75 6f 74 65 45 78 70 72 28 73 71 6c  3DequoteExpr(sql
13420 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ite3*, Expr*);.i
13430 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
13440 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
13450 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
13460 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
13470 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
13480 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
13490 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
134a0 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
134b0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
134c0 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
134d0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
134e0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
134f0 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
13500 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
13510 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
13520 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
13530 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
13540 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
13550 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
13560 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  xpr(sqlite3*, in
13570 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
13580 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
13590 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
135a0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
135b0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
135c0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
135d0 72 20 2a 73 71 6c 69 74 65 33 52 65 67 69 73 74  r *sqlite3Regist
135e0 65 72 45 78 70 72 28 50 61 72 73 65 2a 2c 54 6f  erExpr(Parse*,To
135f0 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
13600 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
13610 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
13620 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
13630 45 78 70 72 53 70 61 6e 28 45 78 70 72 2a 2c 54  ExprSpan(Expr*,T
13640 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 45  oken*,Token*);.E
13650 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
13660 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
13670 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
13680 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
13690 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
136a0 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
136b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
136c0 45 78 70 72 44 65 6c 65 74 65 28 45 78 70 72 2a  ExprDelete(Expr*
136d0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
136e0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
136f0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
13700 73 74 2a 2c 45 78 70 72 2a 2c 54 6f 6b 65 6e 2a  st*,Expr*,Token*
13710 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
13720 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 45 78  xprListDelete(Ex
13730 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
13740 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
13750 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
13760 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
13770 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
13780 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
13790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
137a0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
137b0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
137c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
137d0 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
137e0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
137f0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
13800 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61  te3BeginParse(Pa
13810 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
13820 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
13830 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
13840 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  ite3*);.Table *s
13850 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
13860 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 63  fSelect(Parse*,c
13870 68 61 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  har*,Select*);.v
13880 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
13890 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
138a0 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
138b0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
138c0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
138d0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
138e0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
138f0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
13900 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
13910 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
13920 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
13930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
13940 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
13950 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
13960 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
13970 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
13980 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
13990 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
139a0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
139b0 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
139c0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
139d0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
139e0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
139f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
13a00 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
13a10 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
13a20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
13a30 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
13a40 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
13a50 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  *);..Bitvec *sql
13a60 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
13a70 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
13a80 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
13a90 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
13aa0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
13ab0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
13ac0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
13ad0 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
13ae0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
13af0 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
13b00 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73  (Bitvec*);.int s
13b10 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
13b20 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
13b30 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
13b40 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
13b50 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
13b60 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69  Token*,Select*,i
13b70 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
13b80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
13b90 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
13ba0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
13bb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
13bc0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
13bd0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
13be0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
13bf0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
13c00 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
13c10 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
13c20 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
13c30 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
13c40 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
13c50 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
13c60 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
13c70 65 28 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  e(Table*);.void 
13c80 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
13c90 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
13ca0 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63  ExprList*, Selec
13cb0 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
13cc0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
13cd0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
13ce0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
13cf0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 69  ,int,int*,int*,i
13d00 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
13d10 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
13d20 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
13d30 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
13d40 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
13d50 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
13d60 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
13d70 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
13d80 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
13d90 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
13da0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
13db0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
13dc0 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
13dd0 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
13de0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
13df0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 53 65 6c 65 63 74 2a 2c 20 45 78 70      Select*, Exp
13e30 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
13e40 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
13e50 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
13e60 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
13e70 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
13e80 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
13e90 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
13ea0 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
13eb0 44 65 6c 65 74 65 28 49 64 4c 69 73 74 2a 29 3b  Delete(IdList*);
13ec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
13ed0 4c 69 73 74 44 65 6c 65 74 65 28 53 72 63 4c 69  ListDelete(SrcLi
13ee0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
13ef0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
13f00 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
13f10 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
13f20 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
13f30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
13f40 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
13f50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
13f60 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
13f70 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
13f80 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
13f90 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
13fa0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
13fb0 6c 65 63 74 44 65 73 74 2a 2c 20 53 65 6c 65 63  lectDest*, Selec
13fc0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 63  t*, int, int*, c
13fd0 68 61 72 20 2a 61 66 66 29 3b 0a 53 65 6c 65 63  har *aff);.Selec
13fe0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
13ff0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
14000 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
14010 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
14040 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 45 78 70 72  prList*,int,Expr
14050 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
14060 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
14070 74 65 28 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  te(Select*);.Tab
14080 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
14090 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
140a0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
140b0 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
140c0 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
140d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
140e0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
140f0 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
14100 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
14110 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
14120 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
14130 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
14140 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
14150 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
14160 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
14170 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
14180 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
14190 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
141a0 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  n(Parse*, SrcLis
141b0 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  t*, Expr*, ExprL
141c0 69 73 74 2a 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  ist**, u8);.void
141d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
141e0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
141f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
14200 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
14210 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
14220 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
14230 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
14240 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
14250 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
14260 20 73 71 6c 69 74 65 33 45 78 70 72 43 6c 65 61   sqlite3ExprClea
14270 72 43 6f 6c 75 6d 6e 43 61 63 68 65 28 50 61 72  rColumnCache(Par
14280 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
14290 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
142a0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
142b0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
142c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
142d0 72 57 72 69 74 61 62 6c 65 52 65 67 69 73 74 65  rWritableRegiste
142e0 72 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  r(Parse*,int,int
142f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
14300 78 70 72 48 61 72 64 43 6f 70 79 28 50 61 72 73  xprHardCopy(Pars
14310 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  e*,int,int);.int
14320 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
14330 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
14340 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
14350 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
14360 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
14370 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
14380 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
14390 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
143a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
143b0 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
143c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
143d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
143e0 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74  ExprCodeConstant
143f0 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  s(Parse*, Expr*)
14400 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
14410 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
14420 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
14430 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
14440 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
14450 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
14460 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
14470 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
14480 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
14490 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
144a0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
144b0 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
144c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
144d0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
144e0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
144f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
14500 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
14510 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
14520 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
14530 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
14540 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
14550 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
14560 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
14570 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
14580 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
14590 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
145a0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
145b0 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
145c0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
145d0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
145e0 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29  e3Vacuum(Parse*)
145f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
14600 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
14610 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a  qlite3*);.char *
14620 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
14630 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
14640 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
14650 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
14660 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xpr*, Expr*);.in
14670 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 73  t sqlite3ExprRes
14680 6f 6c 76 65 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  olveNames(NameCo
14690 6e 74 65 78 74 20 2a 2c 20 45 78 70 72 20 2a 29  ntext *, Expr *)
146a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
146b0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
146c0 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
146d0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
146e0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
146f0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
14700 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
14710 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
14720 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
14730 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
14740 61 74 65 49 64 45 78 70 72 28 50 61 72 73 65 20  ateIdExpr(Parse 
14750 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
14760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
14770 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
14780 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
14790 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
147a0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
147b0 65 33 50 72 6e 67 52 65 73 65 74 53 74 61 74 65  e3PrngResetState
147c0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
147d0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
147e0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
147f0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
14800 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
14810 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
14820 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
14830 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
14840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
14850 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
14860 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
14870 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
14880 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
14890 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
148a0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
148b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
148c0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
148d0 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
148e0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
148f0 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
14900 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
14910 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
14920 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
14930 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
14940 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
14950 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
14960 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
14970 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
14980 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
14990 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
149a0 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
149b0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
149c0 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74   int, int*);.int
149d0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
149e0 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
149f0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
14a00 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
14a10 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
14a20 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
14a30 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
14a40 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  int,.           
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 20 20 20 20 20 20 20 20 69 6e 74 2a 2c 69            int*,i
14a70 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
14a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
14a90 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
14aa0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
14ab0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 69 6e  nt, int, int*,in
14ac0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
14ad0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
14ae0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
14af0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
14b00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
14b10 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
14b20 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
14b30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 45 78 70  , int, int);.Exp
14b40 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
14b50 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
14b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
14b70 6f 6b 65 6e 43 6f 70 79 28 73 71 6c 69 74 65 33  okenCopy(sqlite3
14b80 2a 2c 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  *,Token*, Token*
14b90 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
14ba0 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
14bb0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
14bc0 74 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  t*);.SrcList *sq
14bd0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
14be0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
14bf0 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
14c00 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
14c10 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
14c20 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
14c30 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
14c40 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 46 75 6e 63  *,Select*);.Func
14c50 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
14c60 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
14c70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
14c80 74 2c 69 6e 74 2c 75 38 2c 69 6e 74 29 3b 0a 76  t,int,u8,int);.v
14c90 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
14ca0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
14cb0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
14cc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
14cd0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
14ce0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
14cf0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
14d00 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  BUG.  int sqlite
14d10 33 53 61 66 65 74 79 4f 6e 28 73 71 6c 69 74 65  3SafetyOn(sqlite
14d20 33 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  3*);.  int sqlit
14d30 65 33 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69  e3SafetyOff(sqli
14d40 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
14d50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 61 66  efine sqlite3Saf
14d60 65 74 79 4f 6e 28 41 29 20 30 0a 23 20 64 65 66  etyOn(A) 0.# def
14d70 69 6e 65 20 73 71 6c 69 74 65 33 53 61 66 65 74  ine sqlite3Safet
14d80 79 4f 66 66 28 41 29 20 30 0a 23 65 6e 64 69 66  yOff(A) 0.#endif
14d90 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
14da0 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
14db0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
14dc0 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
14dd0 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
14de0 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
14df0 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
14e00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
14e10 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
14e20 77 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  w(Parse*, Select
14e30 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
14e40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
14e50 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
14e60 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
14e70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
14e80 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
14e90 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
14ea0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ec0 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
14ed0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
14ee0 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
14ef0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
14f00 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
14f10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
14f20 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
14f30 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
14f40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
14f50 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
14f60 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
14f70 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 54 72  .  int sqlite3Tr
14f80 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
14f90 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
14fa0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 69   ExprList*);.  i
14fb0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  nt sqlite3CodeRo
14fc0 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
14fd0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
14fe0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 20 69   int, Table *, i
14ff0 6e 74 2c 20 69 6e 74 2c 20 0a 20 20 20 20 20 20  nt, int, .      
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 75       int, int, u
15020 33 32 2a 2c 20 75 33 32 2a 29 3b 0a 20 20 76 6f  32*, u32*);.  vo
15030 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
15040 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
15050 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
15060 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
15070 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
15080 74 65 54 72 69 67 67 65 72 53 74 65 70 28 54 72  teTriggerStep(Tr
15090 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54  iggerStep*);.  T
150a0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
150b0 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74  te3TriggerSelect
150c0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  Step(sqlite3*,Se
150d0 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65  lect*);.  Trigge
150e0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
150f0 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
15100 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
15110 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65    ExprList*,Sele
15150 63 74 2a 2c 69 6e 74 29 3b 0a 20 20 54 72 69 67  ct*,int);.  Trig
15160 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
15170 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
15180 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
15190 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
151a0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 54 72 69 67  r*, int);.  Trig
151b0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
151c0 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
151d0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
151e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
151f0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
15200 72 69 67 67 65 72 28 54 72 69 67 67 65 72 2a 29  rigger(Trigger*)
15210 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
15220 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
15230 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
15240 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
15250 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
15260 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
15270 45 78 69 73 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  Exist(A,B,C,D,E,
15280 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
15290 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
152a0 65 72 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  er(A).# define s
152b0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
152c0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
152d0 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
152e0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
152f0 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
15300 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
15310 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
15320 2c 46 2c 47 2c 48 2c 49 2c 4a 2c 4b 29 20 30 0a  ,F,G,H,I,J,K) 0.
15330 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
15340 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
15350 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
15360 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
15370 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
15380 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
15390 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
153a0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
153b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
153c0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
153d0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
153e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
153f0 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
15400 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
15410 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
15420 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
15430 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
15440 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
15450 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
15460 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
15470 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
15480 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
15490 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
154a0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
154b0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
154c0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
154d0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
154e0 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
154f0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
15500 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
15510 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
15520 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
15530 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
15540 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
15550 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
15560 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
15570 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
15580 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
15590 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
155a0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
155b0 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
155c0 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
155d0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
155e0 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
155f0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  se*, Expr*);.int
15600 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
15610 74 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  tory(const sqlit
15620 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
15630 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 0a 20  ar *zFilename,. 
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 69 6e 74 20 6f 6d 69 74 4a 6f        int omitJo
15660 75 72 6e 61 6c 2c 20 69 6e 74 20 6e 43 61 63 68  urnal, int nCach
15670 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 42 74  e, int flags, Bt
15680 72 65 65 20 2a 2a 70 70 42 74 72 65 65 29 3b 0a  ree **ppBtree);.
15690 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 49 6e  int sqlite3FixIn
156a0 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
156b0 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
156c0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
156d0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
156e0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
156f0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
15700 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
15710 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
15720 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
15730 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
15740 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
15750 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
15760 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
15770 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
15780 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
15790 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
157a0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
157b0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
157c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
157d0 75 62 6c 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71  uble*);.char *sq
157e0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 69  lite3_snprintf(i
157f0 6e 74 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  nt,char*,const c
15800 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 69 6e 74 20 73  har*,...);.int s
15810 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
15820 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
15830 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
15840 69 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73  itsIn64Bits(cons
15850 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
15860 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
15870 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
15880 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
15890 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
158a0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
158b0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
158c0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 69 6e 74   int nByte);.int
158d0 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
158e0 28 63 6f 6e 73 74 20 75 38 2a 2c 20 63 6f 6e 73  (const u8*, cons
158f0 74 20 75 38 2a 2c 20 63 6f 6e 73 74 20 75 38 2a  t u8*, const u8*
15900 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  *);../*.** Routi
15910 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
15920 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
15930 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
15940 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
15950 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
15960 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
15970 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
15980 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
15990 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20  util.c.** file. 
159a0 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65   Code should use
159b0 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73   the MACRO forms
159c0 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56   below, as the V
159d0 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73  arint32 versions
159e0 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f  .** are coded to
159f0 20 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67   assume the sing
15a00 6c 65 20 62 79 74 65 20 63 61 73 65 20 69 73 20  le byte case is 
15a10 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20  already handled 
15a20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d  (which .** the M
15a30 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e  ACRO form does).
15a40 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
15a50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
15a60 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69  d char*, u64);.i
15a70 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
15a80 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63  int32(unsigned c
15a90 68 61 72 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  har*, u32);.int 
15aa0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
15ab0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
15ac0 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
15ad0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
15ae0 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
15af0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
15b00 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
15b10 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
15b20 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65  );../*.** The he
15b30 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64  ader of a record
15b40 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73   consists of a s
15b50 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65  equence variable
15b60 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
15b70 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67  ..** These integ
15b80 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61  ers are almost a
15b90 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20  lways small and 
15ba0 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61  are encoded as a
15bb0 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a   single byte..**
15bc0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
15bd0 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e  acros take advan
15be0 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74  tage this fact t
15bf0 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74  o provide a fast
15c00 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64   encode.** and d
15c10 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74  ecode of the int
15c20 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72  egers in a recor
15c30 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69 73  d header.  It is
15c40 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65 20   faster for the 
15c50 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77  common.** case w
15c60 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65 72  here the integer
15c70 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74   is a single byt
15c80 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74 74  e.  It is a litt
15c90 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74  le slower when t
15ca0 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73  he.** integer is
15cb0 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74   two or more byt
15cc0 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c  es.  But overall
15cd0 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a   it is faster..*
15ce0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
15cf0 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  ng expressions a
15d00 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a  re equivalent:.*
15d10 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  *.**     x = sql
15d20 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
15d30 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20   A, &B );.**    
15d40 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56   x = sqlite3PutV
15d50 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
15d60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67  .**.**     x = g
15d70 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  etVarint32( A, B
15d80 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70   );.**     x = p
15d90 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
15da0 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e   );.**.*/.#defin
15db0 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
15dc0 42 29 20 20 28 28 2a 28 41 29 3c 28 75 6e 73 69  B)  ((*(A)<(unsi
15dd0 67 6e 65 64 20 63 68 61 72 29 30 78 38 30 29 20  gned char)0x80) 
15de0 3f 20 28 28 42 29 20 3d 20 28 75 33 32 29 2a 28  ? ((B) = (u32)*(
15df0 41 29 29 2c 31 20 3a 20 73 71 6c 69 74 65 33 47  A)),1 : sqlite3G
15e00 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 20  etVarint32((A), 
15e10 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
15e20 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
15e30 20 28 28 28 42 29 3c 28 75 33 32 29 30 78 38 30   (((B)<(u32)0x80
15e40 29 20 3f 20 28 2a 28 41 29 20 3d 20 28 75 6e 73  ) ? (*(A) = (uns
15e50 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
15e60 31 20 3a 20 73 71 6c 69 74 65 33 50 75 74 56 61  1 : sqlite3PutVa
15e70 72 69 6e 74 33 32 28 28 41 29 2c 20 28 42 29 29  rint32((A), (B))
15e80 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
15e90 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
15ea0 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
15eb0 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
15ec0 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
15ed0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 64 65  void sqlite3Inde
15ee0 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
15ef0 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
15f00 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
15f10 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
15f20 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68   *, Table *);.ch
15f30 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
15f40 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
15f50 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
15f60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
15f70 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
15f80 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
15f90 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
15fa0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
15fb0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
15fc0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
15fd0 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
15fe0 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
15ff0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
16000 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
16010 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
16020 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
16030 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
16040 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
16050 6e 74 20 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt n);.int sqlit
16060 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
16070 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
16080 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
16090 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
160a0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
160b0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
160c0 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
160d0 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
160e0 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
160f0 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
16100 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
16110 72 20 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 43 6f  r *,int,int);.Co
16120 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
16130 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
16140 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
16150 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e   char *zName, in
16160 74 20 6e 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  t nName);.CollSe
16170 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
16180 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
16190 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
161a0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
161b0 45 78 70 72 53 65 74 43 6f 6c 6c 28 50 61 72 73  ExprSetColl(Pars
161c0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
161d0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
161e0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
161f0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
16200 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
16210 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
16220 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
16230 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
16240 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
16250 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
16260 2a 2c 20 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20  *, int);..const 
16270 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
16280 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
16290 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
162a0 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
162b0 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
162c0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
162d0 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
162e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
162f0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
16300 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
16320 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
16330 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
16340 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
16350 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
16360 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
16370 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
16380 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
16390 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
163a0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
163b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
163c0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
163d0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
163e0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
163f0 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
16400 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
16410 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
16420 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
16430 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
16440 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
16450 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
16460 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
16470 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
16480 5d 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  ];.#endif.void s
16490 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
164a0 76 65 64 28 44 62 2a 2c 20 69 6e 74 2c 20 69 6e  ved(Db*, int, in
164b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
164c0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
164d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
164e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
164f0 65 72 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  erFunctions(sqli
16500 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
16510 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
16520 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
16530 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
16540 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
16550 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
16560 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
16570 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
16580 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
16590 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
165a0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
165b0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
165c0 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
165d0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
165e0 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
165f0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 29 3b  arse *, Expr *);
16600 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
16610 63 74 52 65 73 6f 6c 76 65 28 50 61 72 73 65 20  ctResolve(Parse 
16620 2a 2c 20 53 65 6c 65 63 74 20 2a 2c 20 4e 61 6d  *, Select *, Nam
16630 65 43 6f 6e 74 65 78 74 20 2a 29 3b 0a 76 6f 69  eContext *);.voi
16640 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
16650 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
16660 61 62 6c 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  able *, int);.vo
16670 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
16680 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50  inishAddColumn(P
16690 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  arse *, Token *)
166a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
166b0 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d  terBeginAddColum
166c0 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  n(Parse *, SrcLi
166d0 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  st *);.CollSeq *
166e0 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65  sqlite3GetCollSe
166f0 71 28 73 71 6c 69 74 65 33 2a 2c 20 43 6f 6c 6c  q(sqlite3*, Coll
16700 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
16710 72 20 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  r *, int);.char 
16720 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
16730 79 70 65 28 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  ype(const Token*
16740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
16750 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
16760 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
16770 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
16780 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
16790 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
167a0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
167b0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
167c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
167d0 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
167e0 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
167f0 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
16800 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
16810 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
16820 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
16830 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
16840 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
16850 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
16860 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
16870 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
16880 74 65 33 41 74 74 61 63 68 46 75 6e 63 74 69 6f  te3AttachFunctio
16890 6e 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ns(sqlite3 *);.v
168a0 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
168b0 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
168c0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
168d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
168e0 6d 61 46 72 65 65 28 76 6f 69 64 20 2a 29 3b 0a  maFree(void *);.
168f0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
16900 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
16910 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
16920 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
16930 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
16940 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
16950 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49  eyInfo *sqlite3I
16960 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73  ndexKeyinfo(Pars
16970 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69  e *, Index *);.i
16980 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
16990 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
169a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
169b0 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
169c0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
169d0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
169e0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
169f0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
16a00 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
16a10 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
16a20 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
16a30 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
16a40 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  ));.int sqlite3A
16a50 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
16a60 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
16a70 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
16a80 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
16a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
16aa0 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
16ab0 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
16ac0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  *,int);.char *sq
16ad0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
16ae0 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
16af0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
16b00 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
16b10 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
16b20 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
16b30 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
16b40 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  ,int);../*.** Th
16b50 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
16b60 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
16b70 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
16b80 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
16b90 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73  Alloc(void*(*)(s
16ba0 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71  ize_t));.void sq
16bb0 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
16bc0 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
16bd0 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
16be0 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
16bf0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
16c00 72 73 65 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69  rse*);..int sqli
16c10 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
16c20 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
16c30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
16c40 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
16c50 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
16c60 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
16c70 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
16c80 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
16c90 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
16ca0 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
16cb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16cc0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
16cd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
16ce0 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
16cf0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
16d00 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
16d10 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
16d20 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
16d30 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
16d40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
16d50 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
16d60 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
16d70 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
16d80 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16d90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
16da0 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
16db0 74 65 33 56 74 61 62 43 6c 65 61 72 28 58 29 0a  te3VtabClear(X).
16dc0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
16dd0 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 28  3VtabSync(X,Y) (
16de0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
16df0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
16e00 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
16e10 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
16e20 58 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  X).#else.   void
16e30 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
16e40 72 28 54 61 62 6c 65 2a 29 3b 0a 20 20 20 69 6e  r(Table*);.   in
16e50 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
16e60 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  c(sqlite3 *db, i
16e70 6e 74 20 72 63 29 3b 0a 20 20 20 69 6e 74 20 73  nt rc);.   int s
16e80 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
16e90 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
16ea0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
16eb0 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
16ec0 33 20 2a 64 62 29 3b 0a 23 65 6e 64 69 66 0a 76  3 *db);.#endif.v
16ed0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
16ee0 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
16ef0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
16f00 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
16f10 28 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b  (sqlite3_vtab*);
16f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
16f30 62 55 6e 6c 6f 63 6b 28 73 71 6c 69 74 65 33 2a  bUnlock(sqlite3*
16f40 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29  , sqlite3_vtab*)
16f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
16f60 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
16f70 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
16f80 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
16f90 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
16fa0 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
16fb0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
16fc0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
16fd0 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
16fe0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
16ff0 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
17000 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
17010 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
17020 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
17030 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
17040 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
17050 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
17060 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
17070 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
17080 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
17090 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
170a0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
170b0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
170c0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  n(sqlite3 *, sql
170d0 69 74 65 33 5f 76 74 61 62 20 2a 29 3b 0a 46 75  ite3_vtab *);.Fu
170e0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
170f0 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
17100 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
17110 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
17120 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
17130 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
17140 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
17150 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
17160 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20  3_value**);.int 
17170 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
17180 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
17190 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
171a0 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
171b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
171c0 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
171d0 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
171e0 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
171f0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
17200 45 78 70 72 20 2a 29 3b 0a 0a 0a 2f 2a 0a 2a 2a  Expr *);.../*.**
17210 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
17220 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
17230 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
17240 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
17250 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
17260 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
17270 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
17280 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
17290 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
172a0 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
172b0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
172c0 20 74 68 65 20 66 61 75 6c 74 20 69 6e 6a 65 63   the fault injec
172d0 74 6f 72 20 73 75 62 73 79 73 74 65 6d 2e 20 20  tor subsystem.  
172e0 49 66 20 74 68 65 20 66 61 75 6c 74 20 69 6e 6a  If the fault inj
172f0 65 63 74 6f 72 0a 2a 2a 20 6d 65 63 68 61 6e 69  ector.** mechani
17300 73 6d 20 69 73 20 64 69 73 61 62 6c 65 64 20 61  sm is disabled a
17310 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 74  t compile-time t
17320 68 65 6e 20 73 65 74 20 75 70 20 6d 61 63 72 6f  hen set up macro
17330 73 20 73 6f 20 74 68 61 74 20 6e 6f 0a 2a 2a 20  s so that no.** 
17340 75 6e 6e 65 63 65 73 73 61 72 79 20 63 6f 64 65  unnecessary code
17350 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a 2a   is generated..*
17360 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
17370 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
17380 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
17390 33 46 61 75 6c 74 43 6f 6e 66 69 67 28 69 6e 74  3FaultConfig(int
173a0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 20 20 69 6e 74  ,int,int);.  int
173b0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 46 61 69   sqlite3FaultFai
173c0 6c 75 72 65 73 28 69 6e 74 29 3b 0a 20 20 69 6e  lures(int);.  in
173d0 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 42 65  t sqlite3FaultBe
173e0 6e 69 67 6e 46 61 69 6c 75 72 65 73 28 69 6e 74  nignFailures(int
173f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
17400 46 61 75 6c 74 50 65 6e 64 69 6e 67 28 69 6e 74  FaultPending(int
17410 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
17420 33 46 61 75 6c 74 42 65 67 69 6e 42 65 6e 69 67  3FaultBeginBenig
17430 6e 28 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  n(int);.  void s
17440 71 6c 69 74 65 33 46 61 75 6c 74 45 6e 64 42 65  qlite3FaultEndBe
17450 6e 69 67 6e 28 69 6e 74 29 3b 0a 20 20 69 6e 74  nign(int);.  int
17460 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 74 65   sqlite3FaultSte
17470 70 28 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  p(int);.#else.# 
17480 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61  define sqlite3Fa
17490 75 6c 74 43 6f 6e 66 69 67 28 41 2c 42 2c 43 29  ultConfig(A,B,C)
174a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
174b0 33 46 61 75 6c 74 46 61 69 6c 75 72 65 73 28 41  3FaultFailures(A
174c0 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 64 65  )         0.# de
174d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
174e0 74 42 65 6e 69 67 6e 46 61 69 6c 75 72 65 73 28  tBenignFailures(
174f0 41 29 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  A)   0.# define 
17500 73 71 6c 69 74 65 33 46 61 75 6c 74 50 65 6e 64  sqlite3FaultPend
17510 69 6e 67 28 41 29 20 20 20 20 20 20 20 20 20 20  ing(A)          
17520 28 2d 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (-1).# define sq
17530 6c 69 74 65 33 46 61 75 6c 74 42 65 67 69 6e 42  lite3FaultBeginB
17540 65 6e 69 67 6e 28 41 29 0a 23 20 64 65 66 69 6e  enign(A).# defin
17550 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 45 6e  e sqlite3FaultEn
17560 64 42 65 6e 69 67 6e 28 41 29 0a 23 20 64 65 66  dBenign(A).# def
17570 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
17580 53 74 65 70 28 41 29 20 20 20 20 20 20 20 20 20  Step(A)         
17590 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 20 20 0a      0.#endif.  .
175a0 20 20 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    ..#define IN_I
175b0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
175c0 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
175d0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
175e0 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
175f0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
17600 20 20 20 20 20 20 20 20 20 20 20 33 0a 69 6e 74             3.int
17610 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
17620 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
17630 72 20 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64  r *, int);..#ifd
17640 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
17650 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
17660 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
17670 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
17680 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
17690 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
176a0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
176b0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
176c0 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
176d0 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
176e0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
176f0 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
17700 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
17710 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
17720 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
17730 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
17740 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
17750 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
17760 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
17770 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
17780 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
17790 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
177a0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
177b0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
177c0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
177d0 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  e sqlite3ExprSet
177e0 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64  Height(x,y).  #d
177f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
17800 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
17810 20 30 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73   0.#endif..u32 s
17820 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
17830 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
17840 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
17850 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
17860 65 66 20 53 51 4c 49 54 45 5f 53 53 45 0a 23 69  ef SQLITE_SSE.#i
17870 6e 63 6c 75 64 65 20 22 73 73 65 49 6e 74 2e 68  nclude "sseInt.h
17880 22 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ".#endif..#ifdef
17890 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
178a0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
178b0 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
178c0 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
178d0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
178e0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
178f0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
17900 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
17910 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
17920 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
17930 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
17940 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
17950 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
17960 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
17970 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  . .*/.#ifdef SQL
17980 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
17990 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
179a0 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
179b0 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
179c0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
179d0 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
179e0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
179f0 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58  dbe*);.SQLITE_EX
17a00 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69  TERN void (*sqli
17a10 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
17a20 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
17a30 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
17a40 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
17a50 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
17a60 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
17a70 0a 0a 23 65 6e 64 69 66 0a                       ..#endif.