/ Hex Artifact Content
Login

Artifact 5bb95f64a2f86b2d14a66e35edba4a2564a6ecd7:


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 31 34 33 20 32 30 30 32 2f 30 38  ,v 1.143 2002/08
01d0: 2f 32 34 20 31 38 3a 32 34 3a 35 35 20 64 72 68  /24 18:24:55 drh
01e0: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
01f0: 64 65 20 22 73 71 6c 69 74 65 2e 68 22 0a 23 69  de "sqlite.h".#i
0200: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
0210: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
0220: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
0230: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 62  e.h".#include "b
0240: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
0250: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
0260: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
0270: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
0280: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
0290: 65 72 74 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68  ert.h>../*.** Th
02a0: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
02b0: 20 6f 66 20 69 6e 2d 6d 65 6d 6f 72 79 20 70 61   of in-memory pa
02c0: 67 65 73 20 74 6f 20 75 73 65 20 66 6f 72 20 74  ges to use for t
02d0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
02e0: 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 66 6f  .** table and fo
02f0: 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  r temporary tabl
0300: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
0310: 41 58 5f 50 41 47 45 53 20 20 20 32 30 30 30 0a  AX_PAGES   2000.
0320: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 50 41 47  #define TEMP_PAG
0330: 45 53 20 20 20 35 30 30 0a 0a 2f 2a 0a 2a 2a 20  ES   500../*.** 
0340: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
0350: 20 6d 61 63 72 6f 20 69 73 20 73 65 74 20 74 6f   macro is set to
0360: 20 31 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61   1, then NULL va
0370: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
0380: 72 65 64 0a 2a 2a 20 64 69 73 74 69 6e 63 74 20  red.** distinct 
0390: 66 6f 72 20 74 68 65 20 53 45 4c 45 43 54 20 44  for the SELECT D
03a0: 49 53 54 49 4e 43 54 20 73 74 61 74 65 6d 65 6e  ISTINCT statemen
03b0: 74 20 61 6e 64 20 66 6f 72 20 55 4e 49 4f 4e 20  t and for UNION 
03c0: 6f 72 20 45 58 43 45 50 54 0a 2a 2a 20 63 6f 6d  or EXCEPT.** com
03d0: 70 6f 75 6e 64 20 71 75 65 72 69 65 73 2e 20 20  pound queries.  
03e0: 4e 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  No other SQL dat
03f0: 61 62 61 73 65 20 65 6e 67 69 6e 65 20 28 61 6d  abase engine (am
0400: 6f 6e 67 20 74 68 6f 73 65 20 74 65 73 74 65 64  ong those tested
0410: 29 20 0a 2a 2a 20 77 6f 72 6b 73 20 74 68 69 73  ) .** works this
0420: 20 77 61 79 20 65 78 63 65 70 74 20 66 6f 72 20   way except for 
0430: 4f 43 45 4c 4f 54 2e 20 20 42 75 74 20 74 68 65  OCELOT.  But the
0440: 20 53 51 4c 39 32 20 73 70 65 63 20 69 6d 70 6c   SQL92 spec impl
0450: 69 65 73 20 74 68 61 74 0a 2a 2a 20 74 68 69 73  ies that.** this
0460: 20 69 73 20 68 6f 77 20 74 68 69 6e 67 73 20 73   is how things s
0470: 68 6f 75 6c 64 20 77 6f 72 6b 2e 0a 2a 2a 0a 2a  hould work..**.*
0480: 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * If the followi
0490: 6e 67 20 6d 61 63 72 6f 20 69 73 20 73 65 74 20  ng macro is set 
04a0: 74 6f 20 30 2c 20 74 68 65 6e 20 4e 55 4c 4c 73  to 0, then NULLs
04b0: 20 61 72 65 20 69 6e 64 69 73 74 69 6e 63 74 20   are indistinct 
04c0: 66 6f 72 0a 2a 2a 20 53 45 4c 45 43 54 20 44 49  for.** SELECT DI
04d0: 53 54 49 4e 43 54 20 61 6e 64 20 66 6f 72 20 55  STINCT and for U
04e0: 4e 49 4f 4e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NION..*/.#define
04f0: 20 4e 55 4c 4c 5f 41 4c 57 41 59 53 5f 44 49 53   NULL_ALWAYS_DIS
0500: 54 49 4e 43 54 20 30 0a 0a 2f 2a 0a 2a 2a 20 49  TINCT 0../*.** I
0510: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0520: 6d 61 63 72 6f 20 69 73 20 73 65 74 20 74 6f 20  macro is set to 
0530: 31 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  1, then NULL val
0540: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
0550: 65 64 0a 2a 2a 20 64 69 73 74 69 6e 63 74 20 77  ed.** distinct w
0560: 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  hen determining 
0570: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
0580: 77 6f 20 65 6e 74 72 69 65 73 20 61 72 65 20 74  wo entries are t
0590: 68 65 20 73 61 6d 65 0a 2a 2a 20 69 6e 20 61 20  he same.** in a 
05a0: 55 4e 49 51 55 45 20 69 6e 64 65 78 2e 20 20 54  UNIQUE index.  T
05b0: 68 69 73 20 69 73 20 74 68 65 20 77 61 79 20 50  his is the way P
05c0: 6f 73 74 67 72 65 53 51 4c 2c 20 4f 72 61 63 6c  ostgreSQL, Oracl
05d0: 65 2c 20 44 42 32 2c 20 4d 79 53 51 4c 2c 0a 2a  e, DB2, MySQL,.*
05e0: 2a 20 4f 43 45 4c 4f 54 2c 20 61 6e 64 20 46 69  * OCELOT, and Fi
05f0: 72 65 62 69 72 64 20 61 6c 6c 20 77 6f 72 6b 2e  rebird all work.
0600: 20 20 54 68 65 20 53 51 4c 39 32 20 73 70 65 63    The SQL92 spec
0610: 20 65 78 70 6c 69 63 69 74 6c 79 20 73 61 79 73   explicitly says
0620: 20 74 68 69 73 0a 2a 2a 20 69 73 20 74 68 65 20   this.** is the 
0630: 77 61 79 20 74 68 69 6e 67 73 20 61 72 65 20 73  way things are s
0640: 75 70 70 6f 73 65 20 74 6f 20 77 6f 72 6b 2e 0a  uppose to work..
0650: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c  **.** If the fol
0660: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20  lowing macro is 
0670: 73 65 74 20 74 6f 20 30 2c 20 74 68 65 20 4e 55  set to 0, the NU
0680: 4c 4c 73 20 61 72 65 20 69 6e 64 69 73 74 69 6e  LLs are indistin
0690: 63 74 20 66 6f 72 0a 2a 2a 20 61 20 55 4e 49 51  ct for.** a UNIQ
06a0: 55 45 20 69 6e 64 65 78 2e 20 20 49 6e 20 74 68  UE index.  In th
06b0: 69 73 20 6d 6f 64 65 2c 20 79 6f 75 20 63 61 6e  is mode, you can
06c0: 20 6f 6e 6c 79 20 68 61 76 65 20 61 20 73 69 6e   only have a sin
06d0: 67 6c 65 20 4e 55 4c 4c 20 65 6e 74 72 79 0a 2a  gle NULL entry.*
06e0: 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 64  * for a column d
06f0: 65 63 6c 61 72 65 64 20 55 4e 49 51 55 45 2e 20  eclared UNIQUE. 
0700: 20 54 68 69 73 20 69 73 20 74 68 65 20 77 61 79   This is the way
0710: 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 20 53 51   Informix and SQ
0720: 4c 20 53 65 72 76 65 72 0a 2a 2a 20 77 6f 72 6b  L Server.** work
0730: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 55 4c  ..*/.#define NUL
0740: 4c 5f 44 49 53 54 49 4e 43 54 5f 46 4f 52 5f 55  L_DISTINCT_FOR_U
0750: 4e 49 51 55 45 20 31 0a 0a 2f 2a 0a 2a 2a 20 49  NIQUE 1../*.** I
0760: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
0770: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
0780: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
0790: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
07a0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
07b0: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
07c0: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
07d0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
07e0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
07f0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
0800: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
0810: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
0820: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
0830: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
0840: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
0850: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
0860: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
0870: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
0880: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
0890: 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a  PE unsigned int.
08a0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
08b0: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 64 65 66  INT16_TYPE.# def
08c0: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
08d0: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
08e0: 6e 74 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  nt.#endif.#ifnde
08f0: 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 64  f UINT8_TYPE.# d
0900: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
0910: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
0920: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
0930: 54 50 54 52 5f 54 59 50 45 0a 23 20 64 65 66 69  TPTR_TYPE.# defi
0940: 6e 65 20 49 4e 54 50 54 52 5f 54 59 50 45 20 69  ne INTPTR_TYPE i
0950: 6e 74 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65  nt.#endif.typede
0960: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33  f UINT32_TYPE u3
0970: 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2;           /* 
0980: 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  4-byte unsigned 
0990: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
09a0: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ef UINT16_TYPE u
09b0: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  16;           /*
09c0: 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   2-byte unsigned
09d0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
09e0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
09f0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
0a00: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
0a10: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
0a20: 65 64 65 66 20 49 4e 54 50 54 52 5f 54 59 50 45  edef INTPTR_TYPE
0a30: 20 70 74 72 3b 20 20 20 20 20 20 20 20 20 20 20   ptr;           
0a40: 2f 2a 20 42 69 67 20 65 6e 6f 75 67 68 20 74 6f  /* Big enough to
0a50: 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 20   hold a pointer 
0a60: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
0a70: 6e 65 64 20 49 4e 54 50 54 52 5f 54 59 50 45 20  ned INTPTR_TYPE 
0a80: 75 70 74 72 3b 20 2f 2a 20 42 69 67 20 65 6e 6f  uptr; /* Big eno
0a90: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
0aa0: 69 6e 74 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  inter */../*.** 
0ab0: 54 68 69 73 20 6d 61 63 72 6f 20 63 61 73 74 73  This macro casts
0ac0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
0ad0: 20 69 6e 74 65 67 65 72 2e 20 20 55 73 65 66 75   integer.  Usefu
0ae0: 6c 20 66 6f 72 20 64 6f 69 6e 67 0a 2a 2a 20 70  l for doing.** p
0af0: 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69  ointer arithmeti
0b00: 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 64  c..*/.#define Ad
0b10: 64 72 28 58 29 20 20 28 28 75 70 74 72 29 58 29  dr(X)  ((uptr)X)
0b20: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 78 69  ../*.** The maxi
0b30: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  mum number of by
0b40: 74 65 73 20 6f 66 20 64 61 74 61 20 74 68 61 74  tes of data that
0b50: 20 63 61 6e 20 62 65 20 70 75 74 20 69 6e 74 6f   can be put into
0b60: 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
0b70: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 74 61 62   of a single tab
0b80: 6c 65 2e 20 20 54 68 65 20 75 70 70 65 72 20 62  le.  The upper b
0b90: 6f 75 6e 64 20 6f 6e 20 74 68 69 73 20 6c 69 6d  ound on this lim
0ba0: 69 74 20 69 73 20 31 36 37 37 37 32 31 35 0a 2a  it is 16777215.*
0bb0: 2a 20 62 79 74 65 73 20 28 6f 72 20 31 36 4d 42  * bytes (or 16MB
0bc0: 2d 31 29 2e 20 20 57 65 20 68 61 76 65 20 61 72  -1).  We have ar
0bd0: 62 69 74 72 61 72 69 6c 79 20 73 65 74 20 74 68  bitrarily set th
0be0: 65 20 6c 69 6d 69 74 20 74 6f 20 6a 75 73 74 20  e limit to just 
0bf0: 31 4d 42 0a 2a 2a 20 68 65 72 65 20 62 65 63 61  1MB.** here beca
0c00: 75 73 65 20 74 68 65 20 6f 76 65 72 66 6c 6f 77  use the overflow
0c10: 20 70 61 67 65 20 63 68 61 69 6e 20 69 73 20 69   page chain is i
0c20: 6e 65 66 66 69 63 69 65 6e 74 20 66 6f 72 20 72  nefficient for r
0c30: 65 61 6c 6c 79 20 62 69 67 0a 2a 2a 20 72 65 63  eally big.** rec
0c40: 6f 72 64 73 20 61 6e 64 20 77 65 20 77 61 6e 74  ords and we want
0c50: 20 74 6f 20 64 69 73 63 6f 75 72 61 67 65 20 70   to discourage p
0c60: 65 6f 70 6c 65 20 66 72 6f 6d 20 74 68 69 6e 6b  eople from think
0c70: 69 6e 67 20 74 68 61 74 20 0a 2a 2a 20 6d 75 6c  ing that .** mul
0c80: 74 69 2d 6d 65 67 61 62 79 74 65 20 72 65 63 6f  ti-megabyte reco
0c90: 72 64 73 20 61 72 65 20 4f 4b 2e 20 20 49 66 20  rds are OK.  If 
0ca0: 79 6f 75 72 20 6e 65 65 64 73 20 61 72 65 20 64  your needs are d
0cb0: 69 66 66 65 72 65 6e 74 2c 20 79 6f 75 20 63 61  ifferent, you ca
0cc0: 6e 0a 2a 2a 20 63 68 61 6e 67 65 20 74 68 69 73  n.** change this
0cd0: 20 64 65 66 69 6e 65 20 61 6e 64 20 72 65 63 6f   define and reco
0ce0: 6d 70 69 6c 65 20 74 6f 20 69 6e 63 72 65 61 73  mpile to increas
0cf0: 65 20 6f 72 20 64 65 63 72 65 61 73 65 20 74 68  e or decrease th
0d00: 65 20 72 65 63 6f 72 64 0a 2a 2a 20 73 69 7a 65  e record.** size
0d10: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 58  ..*/.#define MAX
0d20: 5f 42 59 54 45 53 5f 50 45 52 5f 52 4f 57 20 20  _BYTES_PER_ROW  
0d30: 31 30 34 38 35 37 36 0a 0a 2f 2a 0a 2a 2a 20 49  1048576../*.** I
0d40: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
0d50: 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 20 61 72 65  ion problems are
0d60: 20 66 6f 75 6e 64 2c 20 72 65 63 6f 6d 70 69 6c   found, recompil
0d70: 65 20 77 69 74 68 0a 2a 2a 0a 2a 2a 20 20 20 20  e with.**.**    
0d80: 20 20 2d 44 4d 45 4d 4f 52 59 5f 44 45 42 55 47    -DMEMORY_DEBUG
0d90: 3d 31 0a 2a 2a 0a 2a 2a 20 74 6f 20 65 6e 61 62  =1.**.** to enab
0da0: 6c 65 20 73 6f 6d 65 20 73 61 6e 69 74 79 20 63  le some sanity c
0db0: 68 65 63 6b 69 6e 67 20 6f 6e 20 6d 61 6c 6c 6f  hecking on mallo
0dc0: 63 28 29 20 61 6e 64 20 66 72 65 65 28 29 2e 20  c() and free(). 
0dd0: 20 54 6f 0a 2a 2a 20 63 68 65 63 6b 20 66 6f 72   To.** check for
0de0: 20 6d 65 6d 6f 72 79 20 6c 65 61 6b 73 2c 20 72   memory leaks, r
0df0: 65 63 6f 6d 70 69 6c 65 20 77 69 74 68 0a 2a 2a  ecompile with.**
0e00: 0a 2a 2a 20 20 20 20 20 20 2d 44 4d 45 4d 4f 52  .**      -DMEMOR
0e10: 59 5f 44 45 42 55 47 3d 32 0a 2a 2a 0a 2a 2a 20  Y_DEBUG=2.**.** 
0e20: 61 6e 64 20 61 20 6c 69 6e 65 20 6f 66 20 74 65  and a line of te
0e30: 78 74 20 77 69 6c 6c 20 62 65 20 77 72 69 74 74  xt will be writt
0e40: 65 6e 20 74 6f 20 73 74 61 6e 64 61 72 64 20 65  en to standard e
0e50: 72 72 6f 72 20 66 6f 72 0a 2a 2a 20 65 61 63 68  rror for.** each
0e60: 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 66 72   malloc() and fr
0e70: 65 65 28 29 2e 20 20 54 68 69 73 20 6f 75 74 70  ee().  This outp
0e80: 75 74 20 63 61 6e 20 62 65 20 61 6e 61 6c 79 7a  ut can be analyz
0e90: 65 64 0a 2a 2a 20 62 79 20 61 6e 20 41 57 4b 20  ed.** by an AWK 
0ea0: 73 63 72 69 70 74 20 74 6f 20 64 65 74 65 72 6d  script to determ
0eb0: 69 6e 65 20 69 66 20 74 68 65 72 65 20 61 72 65  ine if there are
0ec0: 20 61 6e 79 20 6c 65 61 6b 73 2e 0a 2a 2f 0a 23   any leaks..*/.#
0ed0: 69 66 64 65 66 20 4d 45 4d 4f 52 59 5f 44 45 42  ifdef MEMORY_DEB
0ee0: 55 47 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  UG.# define sqli
0ef0: 74 65 4d 61 6c 6c 6f 63 28 58 29 20 20 20 20 73  teMalloc(X)    s
0f00: 71 6c 69 74 65 4d 61 6c 6c 6f 63 5f 28 58 2c 5f  qliteMalloc_(X,_
0f10: 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f 5f  _FILE__,__LINE__
0f20: 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
0f30: 65 46 72 65 65 28 58 29 20 20 20 20 20 20 73 71  eFree(X)      sq
0f40: 6c 69 74 65 46 72 65 65 5f 28 58 2c 5f 5f 46 49  liteFree_(X,__FI
0f50: 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  LE__,__LINE__).#
0f60: 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 52 65   define sqliteRe
0f70: 61 6c 6c 6f 63 28 58 2c 59 29 20 73 71 6c 69 74  alloc(X,Y) sqlit
0f80: 65 52 65 61 6c 6c 6f 63 5f 28 58 2c 59 2c 5f 5f  eRealloc_(X,Y,__
0f90: 46 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f 5f 29  FILE__,__LINE__)
0fa0: 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
0fb0: 53 74 72 44 75 70 28 58 29 20 20 20 20 73 71 6c  StrDup(X)    sql
0fc0: 69 74 65 53 74 72 44 75 70 5f 28 58 2c 5f 5f 46  iteStrDup_(X,__F
0fd0: 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f 5f 29 0a  ILE__,__LINE__).
0fe0: 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 53  # define sqliteS
0ff0: 74 72 4e 44 75 70 28 58 2c 59 29 20 73 71 6c 69  trNDup(X,Y) sqli
1000: 74 65 53 74 72 4e 44 75 70 5f 28 58 2c 59 2c 5f  teStrNDup_(X,Y,_
1010: 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f 5f  _FILE__,__LINE__
1020: 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 53  ).  void sqliteS
1030: 74 72 52 65 61 6c 6c 6f 63 28 63 68 61 72 2a 2a  trRealloc(char**
1040: 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1050: 65 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c  e sqliteStrReall
1060: 6f 63 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  oc(X).#endif../*
1070: 0a 2a 2a 20 54 68 69 73 20 76 61 72 69 61 62 6c  .** This variabl
1080: 65 20 67 65 74 73 20 73 65 74 20 69 66 20 6d 61  e gets set if ma
1090: 6c 6c 6f 63 28 29 20 65 76 65 72 20 66 61 69 6c  lloc() ever fail
10a0: 73 2e 20 20 41 66 74 65 72 20 69 74 20 67 65 74  s.  After it get
10b0: 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 20 53 51  s set,.** the SQ
10c0: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 73 68 75  Lite library shu
10d0: 74 73 20 64 6f 77 6e 20 70 65 72 6d 61 6e 65 6e  ts down permanen
10e0: 74 6c 79 2e 0a 2a 2f 0a 65 78 74 65 72 6e 20 69  tly..*/.extern i
10f0: 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  nt sqlite_malloc
1100: 5f 66 61 69 6c 65 64 3b 0a 0a 2f 2a 0a 2a 2a 20  _failed;../*.** 
1110: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  The following gl
1120: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 73 20 61  obal variables a
1130: 72 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  re used for test
1140: 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e  ing and debuggin
1150: 67 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  g.** only.  They
1160: 20 6f 6e 6c 79 20 77 6f 72 6b 20 69 66 20 4d 45   only work if ME
1170: 4d 4f 52 59 5f 44 45 42 55 47 20 69 73 20 64 65  MORY_DEBUG is de
1180: 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  fined..*/.#ifdef
1190: 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47 0a 65 78   MEMORY_DEBUG.ex
11a0: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 5f  tern int sqlite_
11b0: 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  nMalloc;       /
11c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69  * Number of sqli
11d0: 74 65 4d 61 6c 6c 6f 63 28 29 20 63 61 6c 6c 73  teMalloc() calls
11e0: 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73   */.extern int s
11f0: 71 6c 69 74 65 5f 6e 46 72 65 65 3b 20 20 20 20  qlite_nFree;    
1200: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1210: 66 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 63  f sqliteFree() c
1220: 61 6c 6c 73 20 2a 2f 0a 65 78 74 65 72 6e 20 69  alls */.extern i
1230: 6e 74 20 73 71 6c 69 74 65 5f 69 4d 61 6c 6c 6f  nt sqlite_iMallo
1240: 63 46 61 69 6c 3b 20 20 20 2f 2a 20 46 61 69 6c  cFail;   /* Fail
1250: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20   sqliteMalloc() 
1260: 61 66 74 65 72 20 74 68 69 73 20 6d 61 6e 79 20  after this many 
1270: 63 61 6c 6c 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  calls */.#endif.
1280: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
1290: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
12a0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
12b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
12c0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
12d0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
12e0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
12f0: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
1300: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
1310: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
1320: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
1330: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
1340: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
1350: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
1360: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
1370: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
1380: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
1390: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
13a0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
13b0: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
13c0: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
13d0: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
13e0: 65 28 58 29 20 20 20 20 28 73 69 7a 65 6f 66 28  e(X)    (sizeof(
13f0: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
1400: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20  ../*.** Forward 
1410: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74  references to st
1420: 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65  ructures.*/.type
1430: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d  def struct Colum
1440: 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65  n Column;.typede
1450: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
1460: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
1470: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
1480: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
1490: 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 49 6e 73   Instruction Ins
14a0: 74 72 75 63 74 69 6f 6e 3b 0a 74 79 70 65 64 65  truction;.typede
14b0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
14c0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
14d0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
14e0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
14f0: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
1500: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
1510: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
1520: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
1530: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
1540: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
1550: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
1560: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
1570: 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a  Info WhereInfo;.
1580: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
1590: 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72 65 4c  hereLevel WhereL
15a0: 65 76 65 6c 3b 0a 74 79 70 65 64 65 66 20 73 74  evel;.typedef st
15b0: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
15c0: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
15d0: 63 74 20 41 67 67 45 78 70 72 20 41 67 67 45 78  ct AggExpr AggEx
15e0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
15f0: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
1600: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
1610: 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67  ct Trigger Trigg
1620: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
1630: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
1640: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
1650: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
1660: 65 72 53 74 61 63 6b 20 54 72 69 67 67 65 72 53  erStack TriggerS
1670: 74 61 63 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  tack;../*.** Eac
1680: 68 20 64 61 74 61 62 61 73 65 20 69 73 20 61 6e  h database is an
1690: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
16a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
16b0: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
16c0: 73 71 6c 69 74 65 2e 66 69 6c 65 5f 66 6f 72 6d  sqlite.file_form
16d0: 61 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  at is initialize
16e0: 64 20 62 79 20 74 68 65 20 64 61 74 61 62 61 73  d by the databas
16f0: 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 68 65  e file.** and he
1700: 6c 70 73 20 64 65 74 65 72 6d 69 6e 65 73 20 68  lps determines h
1710: 6f 77 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ow the data in t
1720: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1730: 20 69 73 0a 2a 2a 20 72 65 70 72 65 73 65 6e 74   is.** represent
1740: 65 64 2e 20 20 54 68 69 73 20 66 69 65 6c 64 20  ed.  This field 
1750: 61 6c 6c 6f 77 73 20 6e 65 77 65 72 20 76 65 72  allows newer ver
1760: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 62  sions of the lib
1770: 72 61 72 79 0a 2a 2a 20 74 6f 20 72 65 61 64 20  rary.** to read 
1780: 61 6e 64 20 77 72 69 74 65 20 6f 6c 64 65 72 20  and write older 
1790: 64 61 74 61 62 61 73 65 73 2e 20 20 54 68 65 20  databases.  The 
17a0: 76 61 72 69 6f 75 73 20 66 69 6c 65 20 66 6f 72  various file for
17b0: 6d 61 74 73 0a 2a 2a 20 61 72 65 20 61 73 20 66  mats.** are as f
17c0: 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ollows:.**.**   
17d0: 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31    file_format==1
17e0: 20 20 20 20 56 65 72 73 69 6f 6e 20 32 2e 31 2e      Version 2.1.
17f0: 30 2e 0a 2a 2a 20 20 20 20 20 66 69 6c 65 5f 66  0..**     file_f
1800: 6f 72 6d 61 74 3d 3d 32 20 20 20 20 56 65 72 73  ormat==2    Vers
1810: 69 6f 6e 20 32 2e 32 2e 30 2e 20 41 64 64 20 73  ion 2.2.0. Add s
1820: 75 70 70 6f 72 74 20 66 6f 72 20 49 4e 54 45 47  upport for INTEG
1830: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a  ER PRIMARY KEY..
1840: 2a 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d  **     file_form
1850: 61 74 3d 3d 33 20 20 20 20 56 65 72 73 69 6f 6e  at==3    Version
1860: 20 32 2e 36 2e 30 2e 20 46 69 78 20 65 6d 70 74   2.6.0. Fix empt
1870: 79 2d 73 74 72 69 6e 67 20 69 6e 64 65 78 20 62  y-string index b
1880: 75 67 2e 0a 2a 2a 20 20 20 20 20 66 69 6c 65 5f  ug..**     file_
1890: 66 6f 72 6d 61 74 3d 3d 34 20 20 20 20 56 65 72  format==4    Ver
18a0: 73 69 6f 6e 20 32 2e 37 2e 30 2e 20 41 64 64 20  sion 2.7.0. Add 
18b0: 73 75 70 70 6f 72 74 20 66 6f 72 20 73 65 70 61  support for sepa
18c0: 72 61 74 65 20 6e 75 6d 65 72 69 63 20 61 6e 64  rate numeric and
18d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18e0: 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 64            text d
18f0: 61 74 61 74 79 70 65 73 2e 0a 2a 2f 0a 73 74 72  atatypes..*/.str
1900: 75 63 74 20 73 71 6c 69 74 65 20 7b 0a 20 20 42  uct sqlite {.  B
1910: 74 72 65 65 20 2a 70 42 65 3b 20 20 20 20 20 20  tree *pBe;      
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1930: 54 68 65 20 42 2a 54 72 65 65 20 62 61 63 6b 65  The B*Tree backe
1940: 6e 64 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  nd */.  Btree *p
1950: 42 65 54 65 6d 70 3b 20 20 20 20 20 20 20 20 20  BeTemp;         
1960: 20 20 20 20 20 20 2f 2a 20 42 61 63 6b 65 6e 64        /* Backend
1970: 20 66 6f 72 20 73 65 73 73 69 6f 6e 20 74 65 6d   for session tem
1980: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 2a 2f  porary tables */
1990: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b0: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 6f 75 73   /* Miscellanous
19c0: 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f   flags. See belo
19d0: 77 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  w */.  int file_
19e0: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 20 20  format;         
19f0: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 66 69 6c       /* What fil
1a00: 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  e format version
1a10: 20 69 73 20 74 68 69 73 20 64 61 74 61 62 61 73   is this databas
1a20: 65 3f 20 2a 2f 0a 20 20 69 6e 74 20 73 63 68 65  e? */.  int sche
1a30: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 20 20 20  ma_cookie;      
1a40: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
1a50: 75 6d 62 65 72 20 74 68 61 74 20 63 68 61 6e 67  umber that chang
1a60: 65 73 20 77 69 74 68 20 74 68 65 20 73 63 68 65  es with the sche
1a70: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  ma */.  int next
1a80: 5f 63 6f 6f 6b 69 65 3b 20 20 20 20 20 20 20 20  _cookie;        
1a90: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
1aa0: 66 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  f schema_cookie 
1ab0: 61 66 74 65 72 20 63 6f 6d 6d 69 74 20 2a 2f 0a  after commit */.
1ac0: 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65    int cache_size
1ad0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
1af0: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
1b00: 20 63 61 63 68 65 20 2a 2f 0a 20 20 69 6e 74 20   cache */.  int 
1b10: 6e 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  nTable;         
1b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b30: 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 69 6e  ber of tables in
1b40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   the database */
1b50: 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41 72  .  void *pBusyAr
1b60: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1b70: 20 2f 2a 20 31 73 74 20 41 72 67 75 6d 65 6e 74   /* 1st Argument
1b80: 20 74 6f 20 74 68 65 20 62 75 73 79 20 63 61 6c   to the busy cal
1b90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 28  lback */.  int (
1ba0: 2a 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 29 28  *xBusyCallback)(
1bb0: 76 6f 69 64 20 2a 2c 63 6f 6e 73 74 20 63 68 61  void *,const cha
1bc0: 72 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65  r*,int);  /* The
1bd0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
1be0: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
1bf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c00: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
1c10: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
1c20: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
1c30: 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1c40: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
1c50: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
1c60: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
1c70: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c90: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
1ca0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
1cb0: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 2f 2a 20 41 6c 6c 20 66 75 6e 63 74 69 6f 6e 73  /* All functions
1ce0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 20   that can be in 
1cf0: 53 51 4c 20 65 78 70 72 73 20 2a 2f 0a 20 20 69  SQL exprs */.  i
1d00: 6e 74 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  nt lastRowid;   
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d20: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
1d30: 63 65 6e 74 20 69 6e 73 65 72 74 20 2a 2f 0a 20  cent insert */. 
1d40: 20 69 6e 74 20 70 72 69 6f 72 4e 65 77 52 6f 77   int priorNewRow
1d50: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  id;            /
1d60: 2a 20 4c 61 73 74 20 72 61 6e 64 6f 6d 6c 79 20  * Last randomly 
1d70: 67 65 6e 65 72 61 74 65 64 20 52 4f 57 49 44 20  generated ROWID 
1d80: 2a 2f 0a 20 20 69 6e 74 20 6f 6e 45 72 72 6f 72  */.  int onError
1d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1da0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 63 6f     /* Default co
1db0: 6e 66 6c 69 63 74 20 61 6c 67 6f 72 69 74 68 6d  nflict algorithm
1dc0: 20 2a 2f 0a 20 20 69 6e 74 20 6d 61 67 69 63 3b   */.  int magic;
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
1df0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
1e00: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
1e10: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f   /* Number of ro
1e40: 77 73 20 63 68 61 6e 67 65 64 20 2a 2f 0a 20 20  ws changed */.  
1e50: 69 6e 74 20 72 65 63 75 72 73 69 6f 6e 44 65 70  int recursionDep
1e60: 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1e70: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1e80: 64 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  d calls to sqlit
1e90: 65 5f 65 78 65 63 28 29 20 2a 2f 0a 7d 3b 0a 0a  e_exec() */.};..
1ea0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
1eb0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
1ec0: 6c 69 74 65 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23  lite.flags..*/.#
1ed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
1ee0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
1ef0: 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65  0000001  /* True
1f00: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
1f10: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
1f20: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 69 74 69  ine SQLITE_Initi
1f30: 61 6c 69 7a 65 64 20 20 20 20 30 78 30 30 30 30  alized    0x0000
1f40: 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 61 66  0002  /* True af
1f50: 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1f60: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
1f70: 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 20 20  LITE_Interrupt  
1f80: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20      0x00000004  
1f90: 2f 2a 20 43 61 6e 63 65 6c 20 63 75 72 72 65 6e  /* Cancel curren
1fa0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
1fb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
1fc0: 54 72 61 6e 73 20 20 20 20 20 20 20 20 30 78 30  Trans        0x0
1fd0: 30 30 30 30 30 30 38 20 20 2f 2a 20 54 72 75 65  0000008  /* True
1fe0: 20 69 66 20 69 6e 20 61 20 74 72 61 6e 73 61 63   if in a transac
1ff0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
2000: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
2010: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 31 30  nges  0x00000010
2020: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
2030: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
2040: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
2050: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
2060: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
2070: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
2080: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
2090: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
20a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
20b0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
20c0: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
20d0: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
20e0: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2110: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
2120: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
2130: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2160: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
2170: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
2180: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2190: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
21a0: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
21b0: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
21c0: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
21d0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2200: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
2210: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
2220: 20 53 51 4c 49 54 45 5f 52 65 73 75 6c 74 44 65   SQLITE_ResultDe
2230: 74 61 69 6c 73 20 20 30 78 30 30 30 30 30 31 30  tails  0x0000010
2240: 30 20 20 2f 2a 20 44 65 74 61 69 6c 73 20 61 64  0  /* Details ad
2250: 64 65 64 20 74 6f 20 72 65 73 75 6c 74 20 73 65  ded to result se
2260: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
2270: 49 54 45 5f 55 6e 72 65 73 65 74 56 69 65 77 73  ITE_UnresetViews
2280: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
2290: 2a 20 54 72 75 65 20 69 66 20 6f 6e 65 20 6f 72  * True if one or
22a0: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
22b0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22e0: 20 20 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d     defined colum
22f0: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
2300: 6e 65 20 53 51 4c 49 54 45 5f 52 65 70 6f 72 74  ne SQLITE_Report
2310: 54 79 70 65 73 20 20 20 20 30 78 30 30 30 30 30  Types    0x00000
2320: 34 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20  400  /* Include 
2330: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 64  information on d
2340: 61 74 61 74 79 70 65 73 20 2a 2f 0a 20 20 20 20  atatypes */.    
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 20 20 20 20 20 2f 2a 20 20 20 69 6e 20 34 74        /*   in 4t
2380: 68 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 63 61  h argument of ca
2390: 6c 6c 62 61 63 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  llback */../*.**
23a0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
23b0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
23c0: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
23d0: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
23e0: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
23f0: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
2400: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
2410: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
2420: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
2430: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
2440: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2450: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
2460: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
2470: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
2480: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2490: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
24a0: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
24b0: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
24c0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
24d0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
24e0: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
24f0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
2500: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
2510: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
2520: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
2530: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
2540: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
2550: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
2560: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
2570: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
2580: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
2590: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
25a0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
25b0: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
25c0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
25d0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
25e0: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
25f0: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
2600: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
2610: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
2620: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
2630: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
2640: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
2650: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
2660: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
2670: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 76 6f  t FuncDef {.  vo
2680: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
2690: 74 65 5f 66 75 6e 63 2a 2c 69 6e 74 2c 63 6f 6e  te_func*,int,con
26a0: 73 74 20 63 68 61 72 2a 2a 29 3b 20 20 2f 2a 20  st char**);  /* 
26b0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
26c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
26d0: 65 70 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a  ep)(sqlite_func*
26e0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
26f0: 2a 29 3b 20 20 2f 2a 20 41 67 67 72 65 67 61 74  *);  /* Aggregat
2700: 65 20 66 75 6e 63 74 69 6f 6e 20 73 74 65 70 20  e function step 
2710: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
2720: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 5f 66 75  alize)(sqlite_fu
2730: 6e 63 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  nc*);           
2740: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
2750: 63 74 69 6f 6e 20 66 69 6e 69 61 6c 69 7a 65 72  ction finializer
2760: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20   */.  int nArg; 
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2790: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
27a0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  guments */.  int
27b0: 20 64 61 74 61 54 79 70 65 3b 20 20 20 20 20 20   dataType;      
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 74          /* Datat
27e0: 79 70 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ype of the resul
27f0: 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  t */.  void *pUs
2800: 65 72 44 61 74 61 3b 20 20 20 20 20 20 20 20 20  erData;         
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
2830: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
2840: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
2870: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
2880: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 7d 3b 0a 0a  ame name */.};..
2890: 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
28a0: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
28b0: 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
28c0: 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
28d0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
28e0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
28f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
2900: 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
2910: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
2920: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
2930: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
2940: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
2950: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
2960: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
2970: 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74  Type;     /* Dat
2980: 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20  a type for this 
2990: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 38 20 6e  column */.  u8 n
29a0: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
29b0: 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
29c0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
29d0: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 75 38 20 69  traint */.  u8 i
29e0: 73 50 72 69 6d 4b 65 79 3b 20 20 20 20 2f 2a 20  sPrimKey;    /* 
29f0: 54 72 75 65 20 69 66 20 74 68 69 73 20 63 6f 6c  True if this col
2a00: 75 6d 6e 20 69 73 20 61 6e 20 49 4e 54 45 47 45  umn is an INTEGE
2a10: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
2a20: 0a 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b  .  u8 sortOrder;
2a30: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
2a40: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
2a50: 45 5f 53 4f 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  E_SO_... values 
2a60: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
2a70: 20 61 6c 6c 6f 77 65 64 20 73 6f 72 74 20 6f 72   allowed sort or
2a80: 64 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ders..**.** The 
2a90: 54 45 58 54 20 61 6e 64 20 4e 55 4d 20 76 61 6c  TEXT and NUM val
2aa0: 75 65 73 20 75 73 65 20 62 69 74 73 20 74 68 61  ues use bits tha
2ab0: 74 20 64 6f 20 6e 6f 74 20 6f 76 65 72 6c 61 70  t do not overlap
2ac0: 20 77 69 74 68 20 44 45 53 43 20 61 6e 64 20 41   with DESC and A
2ad0: 53 43 2e 0a 2a 2a 20 54 68 61 74 20 77 61 79 20  SC..** That way 
2ae0: 74 68 65 20 74 77 6f 20 63 61 6e 20 62 65 20 63  the two can be c
2af0: 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
2b00: 69 6e 67 6c 65 20 6e 75 6d 62 65 72 2e 0a 2a 2f  ingle number..*/
2b10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2b20: 53 4f 5f 55 4e 4b 20 20 20 20 20 20 20 30 20 20  SO_UNK       0  
2b30: 2f 2a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  /* Use the defau
2b40: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 74 79 70  lt collating typ
2b50: 65 2e 20 20 28 53 43 54 5f 4e 55 4d 29 20 2a 2f  e.  (SCT_NUM) */
2b60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2b70: 53 4f 5f 54 45 58 54 20 20 20 20 20 20 32 20 20  SO_TEXT      2  
2b80: 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20 6d 65  /* Sort using me
2b90: 6d 63 6d 70 28 29 20 2a 2f 0a 23 64 65 66 69 6e  mcmp() */.#defin
2ba0: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 4e 55 4d 20  e SQLITE_SO_NUM 
2bb0: 20 20 20 20 20 20 34 20 20 2f 2a 20 53 6f 72 74        4  /* Sort
2bc0: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 43 6f 6d   using sqliteCom
2bd0: 70 61 72 65 28 29 20 2a 2f 0a 23 64 65 66 69 6e  pare() */.#defin
2be0: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 54 59 50 45  e SQLITE_SO_TYPE
2bf0: 4d 41 53 4b 20 20 36 20 20 2f 2a 20 4d 61 73 6b  MASK  6  /* Mask
2c00: 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20   to extract the 
2c10: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
2c20: 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ce */.#define SQ
2c30: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
2c40: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
2c50: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
2c60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2c70: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
2c80: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 64 65 73    /* Sort in des
2c90: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
2ca0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2cb0: 53 4f 5f 44 49 52 4d 41 53 4b 20 20 20 31 20 20  SO_DIRMASK   1  
2cc0: 2f 2a 20 4d 61 73 6b 20 74 6f 20 65 78 74 72 61  /* Mask to extra
2cd0: 63 74 20 74 68 65 20 73 6f 72 74 20 64 69 72 65  ct the sort dire
2ce0: 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ction */../*.** 
2cf0: 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69  Each SQL table i
2d00: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
2d10: 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e   memory by an in
2d20: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a  stance of the.**
2d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
2d40: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
2d50: 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  .zName is the na
2d60: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  me of the table.
2d70: 20 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68    The case of th
2d80: 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52  e original.** CR
2d90: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
2da0: 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20  ment is stored, 
2db0: 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20  but case is not 
2dc0: 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a  significant for.
2dd0: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a  ** comparisons..
2de0: 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6e 43 6f 6c 20  **.** Expr.nCol 
2df0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2e00: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
2e10: 20 74 61 62 6c 65 2e 20 20 45 78 70 72 2e 61 43   table.  Expr.aC
2e20: 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  ol is a.** point
2e30: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
2e40: 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75  f Column structu
2e50: 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63  res, one for eac
2e60: 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20  h column..**.** 
2e70: 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  If the table has
2e80: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
2e90: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 45 78  ARY KEY, then Ex
2ea0: 70 72 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  pr.iPKey is the 
2eb0: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
2ec0: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
2ed0: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
2ee0: 77 69 73 65 20 45 78 70 72 2e 69 50 4b 65 79 20  wise Expr.iPKey 
2ef0: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
2f00: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
2f10: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
2f20: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
2f30: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
2f40: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
2f50: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
2f60: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
2f70: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
2f80: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
2f90: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
2fa0: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
2fb0: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
2fc0: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
2fd0: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
2fe0: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
2ff0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
3000: 68 65 20 74 61 62 6c 65 2e 20 20 45 78 70 72 2e  he table.  Expr.
3010: 68 61 73 50 72 69 6d 4b 65 79 20 69 73 20 74 72  hasPrimKey is tr
3020: 75 65 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62  ue if.** the tab
3030: 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41  le has any PRIMA
3040: 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20  RY KEY, INTEGER 
3050: 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a  or otherwise..**
3060: 0a 2a 2a 20 45 78 70 72 2e 74 6e 75 6d 20 69 73  .** Expr.tnum is
3070: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3080: 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54   for the root BT
3090: 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  ree page of the 
30a0: 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20  table in the.** 
30b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
30c0: 49 66 20 45 78 70 72 2e 69 73 54 65 6d 70 20 69  If Expr.isTemp i
30d0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 69  s true, then thi
30e0: 73 20 70 61 67 65 20 6f 63 63 75 72 73 20 69 6e  s page occurs in
30f0: 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
3100: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  y database file,
3110: 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
3120: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66  tabase file.  If
3130: 20 45 78 70 72 2e 69 73 54 72 61 6e 73 69 65 6e   Expr.isTransien
3140: 74 0a 2a 2a 20 69 73 20 74 72 75 65 2c 20 74 68  t.** is true, th
3150: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
3160: 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65  stored in a file
3170: 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74   that is automat
3180: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a  ically deleted.*
3190: 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  * when the VDBE 
31a0: 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61  cursor to the ta
31b0: 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20  ble is closed.  
31c0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 45 78 70  In this case Exp
31d0: 72 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  r.tnum .** refer
31e0: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
31f0: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
3200: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
3210: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
3220: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
3230: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
3240: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
3250: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
3260: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
3270: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
3280: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
3290: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
32a0: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
32b0: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
32c0: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
32d0: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
32e0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
32f0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
3300: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  le */.  int nCol
3310: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
3320: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
3330: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
3340: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
3350: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
3360: 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
3370: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 50 4b 65  mn */.  int iPKe
3380: 79 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e  y;       /* If n
3390: 6f 74 20 6c 65 73 73 20 74 68 65 6e 20 30 2c 20  ot less then 0, 
33a0: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
33b0: 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  as the primary k
33c0: 65 79 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  ey */.  Index *p
33d0: 49 6e 64 65 78 3b 20 20 20 2f 2a 20 4c 69 73 74  Index;   /* List
33e0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
33f0: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
3400: 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
3410: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
3420: 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73  ee node for this
3430: 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65   table (see note
3440: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 53 65 6c   above) */.  Sel
3450: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 2f 2a  ect *pSelect; /*
3460: 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
3470: 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
3480: 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
3490: 77 2e 20 2a 2f 0a 20 20 75 38 20 72 65 61 64 4f  w. */.  u8 readO
34a0: 6e 6c 79 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  nly;     /* True
34b0: 20 69 66 20 74 68 69 73 20 74 61 62 6c 65 20 73   if this table s
34c0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 77 72 69  hould not be wri
34d0: 74 74 65 6e 20 62 79 20 74 68 65 20 75 73 65 72  tten by the user
34e0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 65 6d 70 3b   */.  u8 isTemp;
34f0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
3500: 66 20 73 74 6f 72 65 64 20 69 6e 20 64 62 2d 3e  f stored in db->
3510: 70 42 65 54 65 6d 70 20 69 6e 73 74 65 61 64 20  pBeTemp instead 
3520: 6f 66 20 64 62 2d 3e 70 42 65 20 2a 2f 0a 20 20  of db->pBe */.  
3530: 75 38 20 69 73 54 72 61 6e 73 69 65 6e 74 3b 20  u8 isTransient; 
3540: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 75 74 6f   /* True if auto
3550: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
3560: 64 20 77 68 65 6e 20 56 44 42 45 20 66 69 6e 69  d when VDBE fini
3570: 73 68 65 73 20 2a 2f 0a 20 20 75 38 20 68 61 73  shes */.  u8 has
3580: 50 72 69 6d 4b 65 79 3b 20 20 20 2f 2a 20 54 72  PrimKey;   /* Tr
3590: 75 65 20 69 66 20 74 68 65 72 65 20 65 78 69 73  ue if there exis
35a0: 74 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  ts a primary key
35b0: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
35c0: 3b 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74  ;      /* What t
35d0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
35e0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
35f0: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
3600: 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
3610: 67 65 72 3b 20 2f 2a 20 4c 69 73 74 20 6f 66 20  ger; /* List of 
3620: 53 51 4c 20 74 72 69 67 67 65 72 73 20 6f 6e 20  SQL triggers on 
3630: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b  this table */.};
3640: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
3650: 75 70 70 6f 72 74 73 20 35 20 64 69 66 66 65 72  upports 5 differ
3660: 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
3670: 6c 76 65 20 61 20 63 6f 6e 74 72 61 69 6e 74 0a  lve a contraint.
3680: 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
3690: 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
36a0: 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
36b0: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
36c0: 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
36d0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
36e0: 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
36f0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
3700: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
3710: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
3720: 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
3730: 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
3740: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
3750: 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
3760: 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
3770: 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
3780: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
3790: 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
37a0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
37b0: 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
37c0: 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
37d0: 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
37e0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
37f0: 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
3800: 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
3810: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
3820: 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
3830: 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
3840: 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
3850: 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
3860: 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
3870: 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
3880: 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
3890: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
38a0: 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
38b0: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
38c0: 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
38d0: 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
38e0: 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
38f0: 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
3900: 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
3910: 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
3920: 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
3930: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
3940: 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
3950: 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
3960: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
3970: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
3980: 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
3990: 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
39a0: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
39b0: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
39c0: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
39d0: 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
39e0: 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69   .** The followi
39f0: 6e 67 20 74 68 65 72 65 20 73 79 6d 62 6f 6c 69  ng there symboli
3a00: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
3a10: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
3a20: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
3a30: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
3a40: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
3a50: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
3a60: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
3a70: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
3a80: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
3a90: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
3aa0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
3ab0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
3ac0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
3ad0: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
3ae0: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
3af0: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
3b00: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
3b10: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
3b20: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
3b30: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
3b40: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
3b50: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
3b60: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
3b70: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
3b80: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
3b90: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
3ba0: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
3bb0: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
3bc0: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
3bd0: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
3be0: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
3bf0: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
3c00: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
3c10: 44 65 66 61 75 6c 74 20 20 39 20 20 20 2f 2a 20  Default  9   /* 
3c20: 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
3c30: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
3c40: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  s */../*.** Each
3c50: 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
3c60: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
3c70: 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
3c80: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
3c90: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
3ca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
3cb0: 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
3cc0: 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
3cd0: 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
3ce0: 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
3cf0: 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
3d00: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
3d10: 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
3d20: 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
3d30: 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
3d40: 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
3d50: 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
3d60: 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
3d70: 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
3d80: 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
3d90: 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
3da0: 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
3db0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
3dc0: 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
3dd0: 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
3de0: 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
3df0: 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
3e00: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
3e10: 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
3e20: 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
3e30: 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
3e40: 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
3e50: 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
3e60: 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
3e70: 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
3e80: 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
3e90: 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
3ea0: 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
3eb0: 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72  ause the .** fir
3ec0: 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
3ed0: 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
3ee0: 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
3ef0: 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
3f00: 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
3f10: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
3f20: 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
3f30: 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
3f40: 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
3f50: 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
3f60: 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  =0..*/.struct In
3f70: 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
3f80: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
3f90: 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
3fa0: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  /.  int nColumn;
3fb0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3fc0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
3fd0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
3fe0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
3ff0: 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  nt *aiColumn;   
4000: 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
4010: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
4020: 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
4030: 20 30 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70   0 */.  Table *p
4040: 54 61 62 6c 65 3b 20 20 20 2f 2a 20 54 68 65 20  Table;   /* The 
4050: 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
4060: 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 69 6e 74  indexed */.  int
4070: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 2f 2a   tnum;        /*
4080: 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
4090: 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
40a0: 64 65 78 20 69 6e 20 64 61 74 61 62 61 73 65 20  dex in database 
40b0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69 73 55  file */.  u8 isU
40c0: 6e 69 71 75 65 3b 20 20 20 20 20 2f 2a 20 4f 45  nique;     /* OE
40d0: 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
40e0: 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
40f0: 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
4100: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
4110: 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
4120: 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
4130: 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
4140: 2f 0a 20 20 75 38 20 61 75 74 6f 49 6e 64 65 78  /.  u8 autoIndex
4150: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
4160: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
4170: 20 63 72 65 61 74 65 64 20 28 65 78 3a 20 62 79   created (ex: by
4180: 20 55 4e 49 51 55 45 29 20 2a 2f 0a 20 20 49 6e   UNIQUE) */.  In
4190: 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  dex *pNext;    /
41a0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
41b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
41c0: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
41d0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
41e0: 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
41f0: 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
4200: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
4210: 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
4220: 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
4230: 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
4240: 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
4250: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 22 62 61  ion..**.** A "ba
4260: 73 65 22 20 74 6f 6b 65 6e 20 69 73 20 61 20 72  se" token is a r
4270: 65 61 6c 20 73 69 6e 67 6c 65 20 74 6f 6b 65 6e  eal single token
4280: 20 73 75 63 68 20 61 73 20 77 6f 75 6c 64 20 63   such as would c
4290: 6f 6d 65 20 6f 75 74 20 6f 66 20 74 68 65 0a 2a  ome out of the.*
42a0: 2a 20 6c 65 78 65 72 2e 20 20 54 68 65 72 65 20  * lexer.  There 
42b0: 61 72 65 20 61 6c 73 6f 20 63 6f 6d 70 6f 75 6e  are also compoun
42c0: 64 20 74 6f 6b 65 6e 73 20 77 68 69 63 68 20 61  d tokens which a
42d0: 72 65 20 61 67 67 72 65 67 61 74 65 73 20 6f 66  re aggregates of
42e0: 20 6f 6e 65 0a 2a 2a 20 6f 72 20 6d 6f 72 65 20   one.** or more 
42f0: 62 61 73 65 20 74 6f 6b 65 6e 73 2e 20 20 43 6f  base tokens.  Co
4300: 6d 70 6f 75 6e 64 20 74 6f 6b 65 6e 73 20 61 72  mpound tokens ar
4310: 65 20 75 73 65 64 20 74 6f 20 6e 61 6d 65 20 63  e used to name c
4320: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 2a 2a  olumns in the.**
4330: 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
4340: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
4350: 74 2e 20 20 49 6e 20 74 68 65 20 65 78 70 72 65  t.  In the expre
4360: 73 73 69 6f 6e 20 22 61 2b 62 2b 63 22 2c 20 22  ssion "a+b+c", "
4370: 62 22 0a 2a 2a 20 69 73 20 61 20 62 61 73 65 20  b".** is a base 
4380: 74 6f 6b 65 6e 20 62 75 74 20 22 61 2b 62 22 20  token but "a+b" 
4390: 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 74 6f  is a compound to
43a0: 6b 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ken..*/.struct T
43b0: 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
43c0: 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 2f 2a 20  har *z;      /* 
43d0: 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
43e0: 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
43f0: 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
4400: 73 69 67 6e 65 64 20 64 79 6e 20 20 3a 20 31 3b  signed dyn  : 1;
4410: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 61    /* True for ma
4420: 6c 6c 6f 63 65 64 20 6d 65 6d 6f 72 79 2c 20 66  lloced memory, f
4430: 61 6c 73 65 20 66 6f 72 20 73 74 61 74 69 63 20  alse for static 
4440: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 61  */.  unsigned ba
4450: 73 65 20 3a 20 31 3b 20 20 2f 2a 20 54 72 75 65  se : 1;  /* True
4460: 20 66 6f 72 20 61 20 62 61 73 65 20 74 6f 6b 65   for a base toke
4470: 6e 2c 20 66 61 6c 73 65 20 66 6f 72 20 63 6f 6d  n, false for com
4480: 70 6f 75 6e 64 73 20 2a 2f 0a 20 20 75 6e 73 69  pounds */.  unsi
4490: 67 6e 65 64 20 6e 20 20 20 20 3a 20 33 30 3b 20  gned n    : 30; 
44a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
44b0: 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
44c0: 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
44d0: 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
44e0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
44f0: 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
4500: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
4510: 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
4520: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
4530: 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
4540: 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  .  The integer p
4550: 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
4560: 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
4570: 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
4580: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
4590: 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
45a0: 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
45b0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
45c0: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
45d0: 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
45e0: 20 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65    This same inte
45f0: 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
4600: 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
4610: 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
4620: 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
4630: 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
4640: 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
4650: 65 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  ee..**.** Expr.p
4660: 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
4670: 4c 65 66 74 20 61 72 65 20 73 75 62 65 78 70 72  Left are subexpr
4680: 65 73 73 69 6f 6e 73 2e 20 20 45 78 70 72 2e 70  essions.  Expr.p
4690: 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 0a 2a  List is a list.*
46a0: 2a 20 6f 66 20 61 72 67 75 6d 65 6e 74 20 69 66  * of argument if
46b0: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
46c0: 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  is a function..*
46d0: 2a 0a 2a 2a 20 45 78 70 72 2e 74 6f 6b 65 6e 20  *.** Expr.token 
46e0: 69 73 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  is the operator 
46f0: 74 6f 6b 65 6e 20 66 6f 72 20 74 68 69 73 20 6e  token for this n
4700: 6f 64 65 2e 20 20 46 6f 72 20 73 6f 6d 65 20 65  ode.  For some e
4710: 78 70 72 65 73 73 69 6f 6e 73 0a 2a 2a 20 74 68  xpressions.** th
4720: 61 74 20 68 61 76 65 20 73 75 62 65 78 70 72 65  at have subexpre
4730: 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 74 6f 6b  ssions, Expr.tok
4740: 65 6e 20 63 61 6e 20 62 65 20 74 68 65 20 63 6f  en can be the co
4750: 6d 70 6c 65 74 65 20 74 65 78 74 20 74 68 61 74  mplete text that
4760: 20 67 61 76 65 0a 2a 2a 20 72 69 73 65 20 74 6f   gave.** rise to
4770: 20 74 68 65 20 45 78 70 72 2e 20 20 49 6e 20 74   the Expr.  In t
4780: 68 65 20 6c 61 74 74 65 72 20 63 61 73 65 2c 20  he latter case, 
4790: 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 6d 61 72  the token is mar
47a0: 6b 65 64 20 61 73 20 62 65 69 6e 67 0a 2a 2a 20  ked as being.** 
47b0: 61 20 63 6f 6d 70 6f 75 6e 64 20 74 6f 6b 65 6e  a compound token
47c0: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
47d0: 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
47e0: 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
47f0: 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
4800: 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
4810: 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
4820: 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
4830: 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
4840: 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
4850: 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
4860: 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
4870: 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
4880: 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
4890: 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
48a0: 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
48b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
48c0: 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
48d0: 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
48e0: 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
48f0: 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
4900: 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
4910: 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
4920: 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
4930: 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
4940: 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
4950: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
4960: 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
4970: 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
4980: 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
4990: 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
49a0: 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
49b0: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
49c0: 20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   is a function, 
49d0: 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
49e0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  is an integer co
49f0: 64 65 0a 2a 2a 20 72 65 70 72 65 73 65 6e 74 69  de.** representi
4a00: 6e 67 20 77 68 69 63 68 20 66 75 6e 63 74 69 6f  ng which functio
4a10: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 45 78 70  n..**.** The Exp
4a20: 72 2e 70 53 65 6c 65 63 74 20 66 69 65 6c 64 20  r.pSelect field 
4a30: 70 6f 69 6e 74 73 20 74 6f 20 61 20 53 45 4c 45  points to a SELE
4a40: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
4a50: 68 65 20 53 45 4c 45 43 54 20 6d 69 67 68 74 0a  he SELECT might.
4a60: 2a 2a 20 62 65 20 74 68 65 20 72 69 67 68 74 20  ** be the right 
4a70: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
4a80: 20 6f 70 65 72 61 74 6f 72 2e 20 20 4f 72 2c 20   operator.  Or, 
4a90: 69 66 20 61 20 73 63 61 6c 61 72 20 53 45 4c 45  if a scalar SELE
4aa0: 43 54 20 61 70 70 65 61 72 73 0a 2a 2a 20 69 6e  CT appears.** in
4ab0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
4ac0: 68 65 20 6f 70 63 6f 64 65 20 69 73 20 54 4b 5f  he opcode is TK_
4ad0: 53 45 4c 45 43 54 20 61 6e 64 20 45 78 70 72 2e  SELECT and Expr.
4ae0: 70 53 65 6c 65 63 74 20 69 73 20 74 68 65 20 6f  pSelect is the o
4af0: 6e 6c 79 0a 2a 2a 20 6f 70 65 72 61 6e 64 2e 0a  nly.** operand..
4b00: 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
4b10: 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
4b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
4b30: 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
4b40: 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
4b50: 0a 20 20 75 38 20 64 61 74 61 54 79 70 65 3b 20  .  u8 dataType; 
4b60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 69 74            /* Eit
4b70: 68 65 72 20 53 51 4c 49 54 45 5f 53 4f 5f 54 45  her SQLITE_SO_TE
4b80: 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 53 4f 5f  XT or SQLITE_SO_
4b90: 4e 55 4d 20 2a 2f 0a 20 20 75 38 20 69 73 4a 6f  NUM */.  u8 isJo
4ba0: 69 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  inExpr;         
4bb0: 2f 2a 20 4f 72 69 67 69 6e 20 69 73 20 74 68 65  /* Origin is the
4bc0: 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 70 68 72   ON or USING phr
4bd0: 61 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  ase of a join */
4be0: 0a 20 20 75 38 20 6e 46 75 6e 63 4e 61 6d 65 3b  .  u8 nFuncName;
4bf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4c00: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
4c10: 73 20 69 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  s in a function 
4c20: 6e 61 6d 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  name */.  Expr *
4c30: 70 4c 65 66 74 2c 20 2a 70 52 69 67 68 74 3b 20  pLeft, *pRight; 
4c40: 20 2f 2a 20 4c 65 66 74 20 61 6e 64 20 72 69 67   /* Left and rig
4c50: 68 74 20 73 75 62 6e 6f 64 65 73 20 2a 2f 0a 20  ht subnodes */. 
4c60: 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
4c70: 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 6c 69 73  ;       /* A lis
4c80: 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
4c90: 20 75 73 65 64 20 61 73 20 66 75 6e 63 74 69 6f   used as functio
4ca0: 6e 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 20  n arguments.    
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cc0: 20 20 20 20 20 2a 2a 20 6f 72 20 69 6e 20 22 3c       ** or in "<
4cd0: 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70 72 2d  expr> IN (<expr-
4ce0: 6c 69 73 74 29 22 20 2a 2f 0a 20 20 54 6f 6b 65  list)" */.  Toke
4cf0: 6e 20 74 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  n token;        
4d00: 20 20 20 2f 2a 20 41 6e 20 6f 70 65 72 61 6e 64     /* An operand
4d10: 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69 6e 74 20   token */.  int 
4d20: 69 54 61 62 6c 65 2c 20 69 43 6f 6c 75 6d 6e 3b  iTable, iColumn;
4d30: 20 20 20 2f 2a 20 57 68 65 6e 20 6f 70 3d 3d 54     /* When op==T
4d40: 4b 5f 43 4f 4c 55 4d 4e 2c 20 74 68 65 6e 20 74  K_COLUMN, then t
4d50: 68 69 73 20 65 78 70 72 20 6e 6f 64 65 20 6d 65  his expr node me
4d60: 61 6e 73 20 74 68 65 0a 20 20 20 20 20 20 20 20  ans the.        
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 2a 2a 20 69 43 6f 6c 75 6d 6e 2d 74 68 20 66   ** iColumn-th f
4d90: 69 65 6c 64 20 6f 66 20 74 68 65 20 69 54 61 62  ield of the iTab
4da0: 6c 65 2d 74 68 20 74 61 62 6c 65 2e 20 2a 2f 0a  le-th table. */.
4db0: 20 20 69 6e 74 20 69 41 67 67 3b 20 20 20 20 20    int iAgg;     
4dc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
4dd0: 20 6f 70 3d 3d 54 4b 5f 43 4f 4c 55 4d 4e 20 61   op==TK_COLUMN a
4de0: 6e 64 20 70 50 61 72 73 65 2d 3e 75 73 65 41 67  nd pParse->useAg
4df0: 67 3d 3d 54 52 55 45 2c 20 70 75 6c 6c 0a 20 20  g==TRUE, pull.  
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 20 20 20 20 20 20 2a 2a 20 72 65 73 75 6c 74         ** result
4e20: 20 66 72 6f 6d 20 74 68 65 20 69 41 67 67 2d 74   from the iAgg-t
4e30: 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
4e40: 20 61 67 67 72 65 67 61 74 6f 72 20 2a 2f 0a 20   aggregator */. 
4e50: 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
4e60: 3b 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20  ;       /* When 
4e70: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
4e80: 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 2e 20  s a sub-select. 
4e90: 20 41 6c 73 6f 20 74 68 65 0a 20 20 20 20 20 20   Also the.      
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 2a 2a 20 72 69 67 68 74 20 73 69 64 65     ** right side
4ec0: 20 6f 66 20 22 3c 65 78 70 72 3e 20 49 4e 20 28   of "<expr> IN (
4ed0: 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 7d 3b  <select>)" */.};
4ee0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
4ef0: 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
4f00: 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
4f10: 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
4f20: 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
4f30: 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
4f40: 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
4f50: 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
4f60: 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
4f70: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
4f80: 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
4f90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
4fa0: 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
4fb0: 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
4fc0: 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
4fd0: 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
4fe0: 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
4ff0: 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
5000: 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
5010: 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
5020: 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
5030: 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
5040: 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
5050: 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  sed..*/.struct E
5060: 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
5070: 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
5080: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
5090: 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
50a0: 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72  he list */.  str
50b0: 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
50c0: 6d 20 7b 0a 20 20 20 20 45 78 70 72 20 2a 70 45  m {.    Expr *pE
50d0: 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  xpr;           /
50e0: 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
50f0: 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
5100: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
5110: 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
5120: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5130: 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
5140: 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
5150: 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
5160: 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
5170: 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
5180: 20 75 38 20 69 73 41 67 67 3b 20 20 20 20 20 20   u8 isAgg;      
5190: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
51a0: 69 66 20 74 68 69 73 20 69 73 20 61 6e 20 61 67  if this is an ag
51b0: 67 72 65 67 61 74 65 20 6c 69 6b 65 20 63 6f 75  gregate like cou
51c0: 6e 74 28 2a 29 20 2a 2f 0a 20 20 20 20 75 38 20  nt(*) */.    u8 
51d0: 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20  done;           
51e0: 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
51f0: 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
5200: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
5210: 69 73 68 65 64 20 2a 2f 0a 20 20 7d 20 2a 61 3b  ished */.  } *a;
5220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5230: 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
5240: 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
5250: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
5260: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
5270: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
5280: 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
5290: 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
52a0: 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
52b0: 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
52c0: 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
52d0: 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
52e0: 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
52f0: 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
5300: 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
5310: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
5320: 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
5330: 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
5340: 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
5350: 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
5360: 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
5370: 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
5380: 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
5390: 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
53a0: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
53b0: 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
53c0: 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
53d0: 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
53e0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
53f0: 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
5400: 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
5410: 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
5420: 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
5430: 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
5440: 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
5450: 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
5460: 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
5470: 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
5480: 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
5490: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
54a0: 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
54b0: 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
54c0: 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
54d0: 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
54e0: 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
54f0: 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
5500: 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
5510: 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
5520: 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
5530: 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
5540: 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
5550: 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 7d 3b 0a  e */.  } *a;.};.
5560: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5570: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
5580: 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
5590: 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
55a0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
55b0: 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
55c0: 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
55d0: 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
55e0: 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
55f0: 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
5600: 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
5610: 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
5620: 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
5630: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5640: 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
5650: 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
5660: 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
5670: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
5680: 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
5690: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
56a0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
56b0: 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
56c0: 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
56d0: 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
56e0: 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
56f0: 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
5700: 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
5710: 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
5720: 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
5730: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
5740: 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
5750: 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
5760: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
5770: 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
5780: 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
5790: 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 6f 69 6e 74  */.    int joint
57a0: 79 70 65 3b 20 20 20 20 20 2f 2a 20 54 79 70 65  ype;     /* Type
57b0: 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
57c0: 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20   this table and 
57d0: 74 68 65 20 6e 65 78 74 20 2a 2f 0a 20 20 20 20  the next */.    
57e0: 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
57f0: 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
5800: 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
5810: 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
5820: 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
5830: 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
5840: 6f 69 6e 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20  oin */.  } *a;  
5850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
5860: 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
5870: 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
5880: 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
5890: 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
58a0: 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
58b0: 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
58c0: 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
58d0: 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
58e0: 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
58f0: 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
5900: 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
5910: 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
5920: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 54    0x0002    /* T
5930: 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
5940: 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
5950: 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
5960: 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 4c 65   0x0004    /* Le
5970: 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
5980: 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
5990: 54 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20  T     0x0008    
59a0: 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
59b0: 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
59c0: 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
59d0: 31 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  10    /* The "OU
59e0: 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
59f0: 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
5a00: 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
5a10: 30 78 30 30 32 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0020    /* unk
5a20: 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
5a30: 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
5a40: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68  ../*.** For each
5a50: 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20   nested loop in 
5a60: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
5a70: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
5a80: 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20  he WhereInfo.** 
5a90: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
5aa0: 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  ns a single inst
5ab0: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
5ac0: 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73 74  ucture.  This st
5ad0: 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e  ructure.** is in
5ae0: 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69  tended to be pri
5af0: 76 61 74 65 20 74 68 65 20 74 68 65 20 77 68 65  vate the the whe
5b00: 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20  re.c module and 
5b10: 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a  should not be.**
5b20: 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66   access or modif
5b30: 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64  ied by other mod
5b40: 75 6c 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ules..*/.struct 
5b50: 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 69  WhereLevel {.  i
5b60: 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
5b70: 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65      /* Memory ce
5b80: 6c 6c 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ll used by this 
5b90: 6c 65 76 65 6c 20 2a 2f 0a 20 20 49 6e 64 65 78  level */.  Index
5ba0: 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20   *pIdx;         
5bb0: 2f 2a 20 49 6e 64 65 78 20 75 73 65 64 20 2a 2f  /* Index used */
5bc0: 0a 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20  .  int iCur;    
5bd0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
5be0: 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 66 6f  r number used fo
5bf0: 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
5c00: 20 20 69 6e 74 20 73 63 6f 72 65 3b 20 20 20 20    int score;    
5c10: 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 77 65         /* How we
5c20: 6c 6c 20 74 68 69 73 20 69 6e 64 65 78 65 64 20  ll this indexed 
5c30: 73 63 6f 72 65 64 20 2a 2f 0a 20 20 69 6e 74 20  scored */.  int 
5c40: 62 72 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  brk;            
5c50: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
5c60: 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20 74 68   break out of th
5c70: 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20  e loop */.  int 
5c80: 63 6f 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  cont;           
5c90: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
5ca0: 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74   continue with t
5cb0: 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63  he next loop cyc
5cc0: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 2c 20  le */.  int op, 
5cd0: 70 31 2c 20 70 32 3b 20 20 20 20 20 20 2f 2a 20  p1, p2;      /* 
5ce0: 4f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 74  Opcode used to t
5cf0: 65 72 6d 69 6e 61 74 65 20 74 68 65 20 6c 6f 6f  erminate the loo
5d00: 70 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 65 66 74  p */.  int iLeft
5d10: 4a 6f 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Join;       /* M
5d20: 65 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65 64 20  emory cell used 
5d30: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 4c 45 46  to implement LEF
5d40: 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a  T OUTER JOIN */.
5d50: 20 20 69 6e 74 20 74 6f 70 3b 20 20 20 20 20 20    int top;      
5d60: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
5d70: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 69  instruction of i
5d80: 6e 74 65 72 69 6f 72 20 6f 66 20 74 68 65 20 6c  nterior of the l
5d90: 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 4f  oop */.  int inO
5da0: 70 2c 20 69 6e 50 31 2c 20 69 6e 50 32 3b 2f 2a  p, inP1, inP2;/*
5db0: 20 4f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   Opcode used to 
5dc0: 69 6d 70 6c 65 6d 65 6e 74 20 61 6e 20 49 4e 20  implement an IN 
5dd0: 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 7d 3b 0a 0a  operator */.};..
5de0: 2f 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52 45 20  /*.** The WHERE 
5df0: 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e  clause processin
5e00: 67 20 72 6f 75 74 69 6e 65 20 68 61 73 20 74 77  g routine has tw
5e10: 6f 20 68 61 6c 76 65 73 2e 20 20 54 68 65 0a 2a  o halves.  The.*
5e20: 2a 20 66 69 72 73 74 20 70 61 72 74 20 64 6f 65  * first part doe
5e30: 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  s the start of t
5e40: 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 61 6e  he WHERE loop an
5e50: 64 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20  d the second.** 
5e60: 68 61 6c 66 20 64 6f 65 73 20 74 68 65 20 74 61  half does the ta
5e70: 69 6c 20 6f 66 20 74 68 65 20 57 48 45 52 45 20  il of the WHERE 
5e80: 6c 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61 6e  loop.  An instan
5e90: 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
5ea0: 72 75 63 74 75 72 65 20 69 73 20 72 65 74 75 72  ructure is retur
5eb0: 6e 65 64 20 62 79 20 74 68 65 20 66 69 72 73 74  ned by the first
5ec0: 20 68 61 6c 66 20 61 6e 64 20 70 61 73 73 65 64   half and passed
5ed0: 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 65 63  .** into the sec
5ee0: 6f 6e 64 20 68 61 6c 66 20 74 6f 20 67 69 76 65  ond half to give
5ef0: 20 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74 79   some continuity
5f00: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72  ..*/.struct Wher
5f10: 65 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65 20  eInfo {.  Parse 
5f20: 2a 70 50 61 72 73 65 3b 0a 20 20 53 72 63 4c 69  *pParse;.  SrcLi
5f30: 73 74 20 2a 70 54 61 62 4c 69 73 74 3b 20 20 20  st *pTabList;   
5f40: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62 6c 65  /* List of table
5f50: 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  s in the join */
5f60: 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65  .  int iContinue
5f70: 3b 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20  ;       /* Jump 
5f80: 68 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65  here to continue
5f90: 20 77 69 74 68 20 6e 65 78 74 20 72 65 63 6f 72   with next recor
5fa0: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 42 72 65 61  d */.  int iBrea
5fb0: 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a  k;          /* J
5fc0: 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61  ump here to brea
5fd0: 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f  k out of the loo
5fe0: 70 20 2a 2f 0a 20 20 69 6e 74 20 62 61 73 65 3b  p */.  int base;
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
6000: 6e 64 65 78 20 6f 66 20 66 69 72 73 74 20 4f 70  ndex of first Op
6010: 65 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  en opcode */.  i
6020: 6e 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt nLevel;      
6030: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6040: 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f 0a   nested loop */.
6050: 20 20 69 6e 74 20 73 61 76 65 64 4e 54 61 62 3b    int savedNTab;
6060: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
6070: 6f 66 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20  of pParse->nTab 
6080: 62 65 66 6f 72 65 20 57 68 65 72 65 42 65 67 69  before WhereBegi
6090: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 70 65 61  n() */.  int pea
60a0: 6b 4e 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  kNTab;        /*
60b0: 20 56 61 6c 75 65 20 6f 66 20 70 50 61 72 73 65   Value of pParse
60c0: 2d 3e 6e 54 61 62 20 61 66 74 65 72 20 57 68 65  ->nTab after Whe
60d0: 72 65 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20 57  reBegin() */.  W
60e0: 68 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20  hereLevel a[1]; 
60f0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
6100: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65  on about each ne
6110: 73 74 20 6c 6f 6f 70 20 69 6e 20 74 68 65 20 57  st loop in the W
6120: 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  HERE */.};../*.*
6130: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6140: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6150: 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
6160: 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
6170: 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
6180: 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
6190: 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
61a0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
61b0: 2a 20 54 68 65 20 7a 53 65 6c 65 63 74 20 66 69  * The zSelect fi
61c0: 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
61d0: 20 74 68 65 20 53 65 6c 65 63 74 20 73 74 72 75   the Select stru
61e0: 63 74 75 72 65 20 6d 75 73 74 20 62 65 20 70 65  cture must be pe
61f0: 72 73 69 73 74 65 6e 74 2e 0a 2a 2a 20 4e 6f 72  rsistent..** Nor
6200: 6d 61 6c 6c 79 2c 20 74 68 65 20 65 78 70 72 65  mally, the expre
6210: 73 73 69 6f 6e 20 74 72 65 65 20 70 6f 69 6e 74  ssion tree point
6220: 73 20 74 6f 20 74 6f 6b 65 6e 73 20 69 6e 20 74  s to tokens in t
6230: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 6e 70 75  he original inpu
6240: 74 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74  t.** string that
6250: 20 65 6e 63 6f 64 65 73 20 74 68 65 20 73 65 6c   encodes the sel
6260: 65 63 74 2e 20 20 42 75 74 20 69 66 20 74 68 65  ect.  But if the
6270: 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
6280: 65 20 6d 75 73 74 20 6c 69 76 65 0a 2a 2a 20 6c  e must live.** l
6290: 6f 6e 67 65 72 20 74 68 61 6e 20 69 74 73 20 69  onger than its i
62a0: 6e 70 75 74 20 73 74 72 69 6e 67 20 28 66 6f 72  nput string (for
62b0: 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 69 74   example when it
62c0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 73 63   is used to desc
62d0: 72 69 62 65 0a 2a 2a 20 61 20 56 49 45 57 29 20  ribe.** a VIEW) 
62e0: 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
62f0: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 69 6e  a copy of the in
6300: 70 75 74 20 73 74 72 69 6e 67 20 73 6f 20 74 68  put string so th
6310: 61 74 20 74 68 65 20 6e 6f 64 65 73 0a 2a 2a 20  at the nodes.** 
6320: 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
6330: 6e 20 74 72 65 65 20 77 69 6c 6c 20 68 61 76 65  n tree will have
6340: 20 73 6f 6d 65 74 68 69 6e 67 20 74 6f 20 70 6f   something to po
6350: 69 6e 74 20 74 6f 2e 20 20 7a 53 65 6c 65 63 74  int to.  zSelect
6360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 68   is used.** to h
6370: 6f 6c 64 20 74 68 61 74 20 63 6f 70 79 2e 0a 2a  old that copy..*
6380: 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
6390: 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
63a0: 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
63b0: 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
63c0: 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
63d0: 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
63e0: 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
63f0: 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
6400: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
6410: 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
6420: 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
6430: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
6440: 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
6450: 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
6460: 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
6470: 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
6480: 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
6490: 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
64a0: 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
64b0: 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
64c0: 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
64d0: 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
64e0: 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
64f0: 20 7b 0a 20 20 69 6e 74 20 69 73 44 69 73 74 69   {.  int isDisti
6500: 6e 63 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  nct;        /* T
6510: 72 75 65 20 69 66 20 74 68 65 20 44 49 53 54 49  rue if the DISTI
6520: 4e 43 54 20 6b 65 79 77 6f 72 64 20 69 73 20 70  NCT keyword is p
6530: 72 65 73 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72  resent */.  Expr
6540: 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
6550: 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
6560: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
6570: 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
6580: 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
6590: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
65a0: 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
65b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
65c0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
65d0: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
65e0: 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
65f0: 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
6600: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
6610: 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
6620: 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
6630: 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
6640: 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
6650: 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
6660: 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  ause */.  int op
6670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6680: 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
6690: 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
66a0: 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
66b0: 50 54 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  PT */.  Select *
66c0: 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
66d0: 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
66e0: 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
66f0: 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
6700: 0a 20 20 69 6e 74 20 6e 4c 69 6d 69 74 2c 20 6e  .  int nLimit, n
6710: 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4c 49 4d  Offset;   /* LIM
6720: 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 76 61  IT and OFFSET va
6730: 6c 75 65 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  lues.  -1 means 
6740: 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 63 68  not used */.  ch
6750: 61 72 20 2a 7a 53 65 6c 65 63 74 3b 20 20 20 20  ar *zSelect;    
6760: 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
6770: 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 45 4c   text of the SEL
6780: 45 43 54 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  ECT command */. 
6790: 20 69 6e 74 20 62 61 73 65 3b 20 20 20 20 20 20   int base;      
67a0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
67b0: 20 6f 66 20 56 44 42 45 20 63 75 72 73 6f 72 20   of VDBE cursor 
67c0: 66 6f 72 20 6c 65 66 74 2d 6d 6f 73 74 20 46 52  for left-most FR
67d0: 4f 4d 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  OM table */.};..
67e0: 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
67f0: 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61  s of a select ca
6800: 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
6810: 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
6820: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
6830: 5f 43 61 6c 6c 62 61 63 6b 20 20 20 20 20 31 20  _Callback     1 
6840: 20 2f 2a 20 49 6e 76 6f 6b 65 20 61 20 63 61 6c   /* Invoke a cal
6850: 6c 62 61 63 6b 20 77 69 74 68 20 65 61 63 68 20  lback with each 
6860: 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
6870: 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
6880: 20 20 20 20 20 20 20 20 20 20 32 20 20 2f 2a 20            2  /* 
6890: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
68a0: 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
68b0: 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
68c0: 20 20 20 20 20 20 20 20 20 20 33 20 20 2f 2a 20            3  /* 
68d0: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
68e0: 75 6e 69 71 75 65 20 6b 65 79 73 20 69 6e 20 61  unique keys in a
68f0: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
6900: 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
6910: 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72     5  /* Store r
6920: 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
6930: 20 61 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66   a table */.#def
6940: 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
6950: 20 20 20 20 20 36 20 20 2f 2a 20 52 65 6d 6f 76       6  /* Remov
6960: 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
6970: 55 4e 49 4f 4e 20 74 61 62 6c 65 20 2a 2f 0a 23  UNION table */.#
6980: 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
6990: 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
69a0: 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
69b0: 74 61 20 77 69 74 68 20 61 20 75 6e 69 71 75 65  ta with a unique
69c0: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
69d0: 53 52 54 5f 54 65 6d 70 54 61 62 6c 65 20 20 20  SRT_TempTable   
69e0: 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   8  /* Store res
69f0: 75 6c 74 20 69 6e 20 61 20 74 72 61 73 69 65 6e  ult in a trasien
6a00: 74 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  t table */.#defi
6a10: 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
6a20: 20 20 20 20 39 20 20 2f 2a 20 44 6f 20 6e 6f 74      9  /* Do not
6a30: 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
6a40: 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
6a50: 65 66 69 6e 65 20 53 52 54 5f 53 6f 72 74 65 72  efine SRT_Sorter
6a60: 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
6a70: 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68  re results in th
6a80: 65 20 73 6f 72 74 65 72 20 2a 2f 0a 0a 2f 2a 0a  e sorter */../*.
6a90: 2a 2a 20 57 68 65 6e 20 61 20 53 45 4c 45 43 54  ** When a SELECT
6aa0: 20 75 73 65 73 20 61 67 67 72 65 67 61 74 65 20   uses aggregate 
6ab0: 66 75 6e 63 74 69 6f 6e 73 20 28 6c 69 6b 65 20  functions (like 
6ac0: 22 63 6f 75 6e 74 28 2a 29 22 20 6f 72 20 22 61  "count(*)" or "a
6ad0: 76 67 28 66 31 29 22 29 0a 2a 2a 20 77 65 20 68  vg(f1)").** we h
6ae0: 61 76 65 20 74 6f 20 64 6f 20 73 6f 6d 65 20 61  ave to do some a
6af0: 64 64 69 74 69 6f 6e 61 6c 20 61 6e 61 6c 79 73  dditional analys
6b00: 69 73 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  is of expression
6b10: 73 2e 20 20 41 6e 20 69 6e 73 74 61 6e 63 65 0a  s.  An instance.
6b20: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
6b30: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
6b40: 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
6b50: 61 62 6f 75 74 20 61 20 73 69 6e 67 6c 65 20 73  about a single s
6b60: 75 62 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  ubexpression.** 
6b70: 73 6f 6d 65 77 68 65 72 65 20 69 6e 20 74 68 65  somewhere in the
6b80: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
6b90: 74 2e 20 20 41 6e 20 61 72 72 61 79 20 6f 66 20  t.  An array of 
6ba0: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
6bb0: 20 68 6f 6c 64 73 0a 2a 2a 20 61 6c 6c 20 74 68   holds.** all th
6bc0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 65  e information we
6bd0: 20 6e 65 65 64 20 74 6f 20 67 65 6e 65 72 61 74   need to generat
6be0: 65 20 63 6f 64 65 20 66 6f 72 20 61 67 67 72 65  e code for aggre
6bf0: 67 61 74 65 0a 2a 2a 20 65 78 70 72 65 73 73 69  gate.** expressi
6c00: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ons..**.** Note 
6c10: 74 68 61 74 20 77 68 65 6e 20 61 6e 61 6c 79 7a  that when analyz
6c20: 69 6e 67 20 61 20 53 45 4c 45 43 54 20 63 6f 6e  ing a SELECT con
6c30: 74 61 69 6e 69 6e 67 20 61 67 67 72 65 67 61 74  taining aggregat
6c40: 65 73 2c 20 62 6f 74 68 0a 2a 2a 20 6e 6f 6e 2d  es, both.** non-
6c50: 61 67 67 72 65 67 61 74 65 20 66 69 65 6c 64 20  aggregate field 
6c60: 76 61 72 69 61 62 6c 65 73 20 61 6e 64 20 61 67  variables and ag
6c70: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
6c80: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
6c90: 69 6e 20 74 68 65 20 41 67 67 45 78 70 72 20 61  in the AggExpr a
6ca0: 72 72 61 79 20 6f 66 20 74 68 65 20 50 61 72 73  rray of the Pars
6cb0: 65 72 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  er structure..**
6cc0: 0a 2a 2a 20 54 68 65 20 70 45 78 70 72 20 66 69  .** The pExpr fi
6cd0: 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 61 6e  eld points to an
6ce0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
6cf0: 20 69 73 20 70 61 72 74 20 6f 66 20 65 69 74 68   is part of eith
6d00: 65 72 20 74 68 65 0a 2a 2a 20 66 69 65 6c 64 20  er the.** field 
6d10: 6c 69 73 74 2c 20 74 68 65 20 47 52 4f 55 50 20  list, the GROUP 
6d20: 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 48  BY clause, the H
6d30: 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f 72 20  AVING clause or 
6d40: 74 68 65 20 4f 52 44 45 52 20 42 59 0a 2a 2a 20  the ORDER BY.** 
6d50: 63 6c 61 75 73 65 2e 20 20 54 68 65 20 65 78 70  clause.  The exp
6d60: 72 65 73 73 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ression will be 
6d70: 66 72 65 65 64 20 77 68 65 6e 20 74 68 6f 73 65  freed when those
6d80: 20 63 6c 61 75 73 65 73 20 61 72 65 20 63 6c 65   clauses are cle
6d90: 61 6e 65 64 0a 2a 2a 20 75 70 2e 20 20 44 6f 20  aned.** up.  Do 
6da0: 6e 6f 74 20 74 72 79 20 74 6f 20 64 65 6c 65 74  not try to delet
6db0: 65 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  e the expression
6dc0: 20 61 74 74 61 63 68 65 64 20 74 6f 20 41 67 67   attached to Agg
6dd0: 45 78 70 72 2e 70 45 78 70 72 2e 0a 2a 2a 0a 2a  Expr.pExpr..**.*
6de0: 2a 20 49 66 20 41 67 67 45 78 70 72 2e 70 45 78  * If AggExpr.pEx
6df0: 70 72 3d 3d 30 2c 20 74 68 61 74 20 6d 65 61 6e  pr==0, that mean
6e00: 73 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  s the expression
6e10: 20 69 73 20 22 63 6f 75 6e 74 28 2a 29 22 2e 0a   is "count(*)"..
6e20: 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 45 78 70  */.struct AggExp
6e30: 72 20 7b 0a 20 20 69 6e 74 20 69 73 41 67 67 3b  r {.  int isAgg;
6e40: 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52          /* if TR
6e50: 55 45 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 61  UE contains an a
6e60: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
6e70: 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 45 78  n */.  Expr *pEx
6e80: 70 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  pr;      /* The 
6e90: 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
6ea0: 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
6eb0: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
6ec0: 20 61 62 6f 75 74 20 74 68 65 20 61 67 67 72 65   about the aggre
6ed0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
6ee0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  .};../*.** An SQ
6ef0: 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
6f00: 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
6f10: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
6f20: 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
6f30: 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
6f40: 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
6f50: 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
6f60: 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
6f70: 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
6f80: 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
6f90: 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
6fa0: 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
6fb0: 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  se..*/.struct Pa
6fc0: 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 20 2a  rse {.  sqlite *
6fd0: 64 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  db;          /* 
6fe0: 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
6ff0: 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
7000: 20 42 74 72 65 65 20 2a 70 42 65 3b 20 20 20 20   Btree *pBe;    
7010: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
7020: 61 62 61 73 65 20 62 61 63 6b 65 6e 64 20 2a 2f  abase backend */
7030: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
7040: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
7050: 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
7060: 75 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ution */.  sqlit
7070: 65 5f 63 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c  e_callback xCall
7080: 62 61 63 6b 3b 20 20 2f 2a 20 54 68 65 20 63 61  back;  /* The ca
7090: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
70a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
70b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
70c0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
70d0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
70e0: 74 69 6f 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  tion */.  char *
70f0: 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
7100: 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
7110: 67 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 45  ge */.  Token sE
7120: 72 72 54 6f 6b 65 6e 3b 20 20 20 20 20 2f 2a 20  rrToken;     /* 
7130: 54 68 65 20 74 6f 6b 65 6e 20 61 74 20 77 68 69  The token at whi
7140: 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 63 63  ch the error occ
7150: 75 72 72 65 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e  urred */.  Token
7160: 20 73 46 69 72 73 74 54 6f 6b 65 6e 3b 20 20 20   sFirstToken;   
7170: 2f 2a 20 54 68 65 20 66 69 72 73 74 20 74 6f 6b  /* The first tok
7180: 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  en parsed */.  T
7190: 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
71a0: 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
71b0: 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
71c0: 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
71d0: 6c 65 3b 20 20 20 20 2f 2a 20 41 20 74 61 62 6c  le;    /* A tabl
71e0: 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
71f0: 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
7200: 42 4c 45 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  BLE */.  Vdbe *p
7210: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
7220: 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
7230: 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
7240: 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
7250: 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
7260: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
7270: 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 43 6f 75 6e  er OP_ColumnCoun
7280: 74 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  t has been issue
7290: 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
72a0: 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
72b0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
72c0: 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
72d0: 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
72e0: 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 38 20 69   query */.  u8 i
72f0: 6e 69 74 46 6c 61 67 3b 20 20 20 20 20 20 20 20  nitFlag;        
7300: 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 70 61   /* True if repa
7310: 72 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42  rsing CREATE TAB
7320: 4c 45 73 20 2a 2f 0a 20 20 75 38 20 6e 61 6d 65  LEs */.  u8 name
7330: 43 6c 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  Clash;        /*
7340: 20 41 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62   A permanent tab
7350: 6c 65 20 6e 61 6d 65 20 63 6c 61 73 68 65 73 20  le name clashes 
7360: 77 69 74 68 20 74 65 6d 70 20 74 61 62 6c 65 20  with temp table 
7370: 6e 61 6d 65 20 2a 2f 0a 20 20 75 38 20 75 73 65  name */.  u8 use
7380: 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Agg;           /
7390: 2a 20 49 66 20 74 72 75 65 2c 20 65 78 74 72 61  * If true, extra
73a0: 63 74 20 66 69 65 6c 64 20 76 61 6c 75 65 73 20  ct field values 
73b0: 66 72 6f 6d 20 74 68 65 20 61 67 67 72 65 67 61  from the aggrega
73c0: 74 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  tor.            
73d0: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 77 68             ** wh
73e0: 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20 65  ile generating e
73f0: 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 4e 6f 72  xpressions.  Nor
7400: 6d 61 6c 6c 79 20 66 61 6c 73 65 20 2a 2f 0a 20  mally false */. 
7410: 20 75 38 20 73 63 68 65 6d 61 56 65 72 69 66 69   u8 schemaVerifi
7420: 65 64 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ed;   /* True if
7430: 20 61 6e 20 4f 50 5f 56 65 72 69 66 79 53 63 68   an OP_VerifySch
7440: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 63 6f 64  ema has been cod
7450: 65 64 20 73 6f 6d 65 70 6c 61 63 65 0a 20 20 20  ed someplace.   
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7470: 20 20 20 20 2a 2a 20 6f 74 68 65 72 20 74 68 61      ** other tha
7480: 6e 20 61 66 74 65 72 20 61 6e 20 4f 50 5f 54 72  n after an OP_Tr
7490: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  ansaction */.  u
74a0: 38 20 69 73 54 65 6d 70 3b 20 20 20 20 20 20 20  8 isTemp;       
74b0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
74c0: 61 72 73 69 6e 67 20 74 65 6d 70 6f 72 61 72 79  arsing temporary
74d0: 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69 6e 74   tables */.  int
74e0: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
74f0: 20 20 2f 2a 20 54 61 62 6c 65 20 6e 75 6d 62 65    /* Table numbe
7500: 72 20 74 6f 20 75 73 65 20 77 68 65 6e 20 72 65  r to use when re
7510: 70 61 72 73 69 6e 67 20 43 52 45 41 54 45 20 54  parsing CREATE T
7520: 41 42 4c 45 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ABLEs */.  int n
7530: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
7540: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
7550: 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
7560: 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
7570: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7580: 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
7590: 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
75a0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
75c0: 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
75d0: 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
75e0: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7600: 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
7610: 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
7620: 6e 74 20 6e 41 67 67 3b 20 20 20 20 20 20 20 20  nt nAgg;        
7630: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7640: 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
7650: 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 41 67 67 45  ssions */.  AggE
7660: 78 70 72 20 2a 61 41 67 67 3b 20 20 20 20 20 20  xpr *aAgg;      
7670: 20 2f 2a 20 41 6e 20 61 72 72 61 79 20 6f 66 20   /* An array of 
7680: 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
7690: 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 72 69 67 67  sions */.  Trigg
76a0: 65 72 53 74 61 63 6b 20 2a 74 72 69 67 53 74 61  erStack *trigSta
76b0: 63 6b 3b 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 45 61  ck;.};../*. * Ea
76c0: 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
76d0: 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
76e0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
76f0: 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
7700: 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
7710: 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
7720: 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
7730: 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
7740: 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
7750: 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
7760: 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
7770: 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
7780: 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
7790: 73 71 6c 69 74 65 2a 20 74 68 61 74 20 72 65 70  sqlite* that rep
77a0: 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
77b0: 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
77c0: 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
77d0: 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
77e0: 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
77f0: 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
7800: 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
7810: 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
7820: 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
7830: 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
7840: 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
7850: 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
7860: 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
7870: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
7880: 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
7890: 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
78a0: 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
78b0: 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
78c0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
78d0: 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
78e0: 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
78f0: 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
7900: 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
7910: 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
7920: 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
7930: 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
7940: 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
7950: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
7960: 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
7970: 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20   program.. *. * 
7980: 57 68 65 6e 20 61 20 74 72 69 67 67 65 72 20 69  When a trigger i
7990: 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 72 65 61  s initially crea
79a0: 74 65 64 2c 20 74 68 65 20 22 69 73 43 6f 6d 6d  ted, the "isComm
79b0: 69 74 22 20 6d 65 6d 62 65 72 20 69 73 20 73 65  it" member is se
79c0: 74 20 74 6f 20 46 41 4c 53 45 2e 0a 20 2a 20 57  t to FALSE.. * W
79d0: 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hen a transactio
79e0: 6e 20 69 73 20 72 6f 6c 6c 65 64 20 62 61 63 6b  n is rolled back
79f0: 2c 20 61 6e 79 20 54 72 69 67 67 65 72 20 73 74  , any Trigger st
7a00: 72 75 63 74 75 72 65 73 20 77 69 74 68 20 22 69  ructures with "i
7a10: 73 43 6f 6d 6d 69 74 22 20 73 65 74 0a 20 2a 20  sCommit" set. * 
7a20: 74 6f 20 46 41 4c 53 45 20 61 72 65 20 64 65 6c  to FALSE are del
7a30: 65 74 65 64 20 62 79 20 74 68 65 20 6c 6f 67 69  eted by the logi
7a40: 63 20 69 6e 20 73 71 6c 69 74 65 52 6f 6c 6c 62  c in sqliteRollb
7a50: 61 63 6b 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  ackInternalChang
7a60: 65 73 28 29 2e 20 57 68 65 6e 0a 20 2a 20 61 20  es(). When. * a 
7a70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63  transaction is c
7a80: 6f 6d 6d 69 74 65 64 2c 20 74 68 65 20 22 69 73  ommited, the "is
7a90: 43 6f 6d 6d 69 74 22 20 6d 65 6d 62 65 72 20 69  Commit" member i
7aa0: 73 20 73 65 74 20 74 6f 20 54 52 55 45 20 66 6f  s set to TRUE fo
7ab0: 72 20 61 6e 79 0a 20 2a 20 54 72 69 67 67 65 72  r any. * Trigger
7ac0: 20 73 74 72 75 63 74 75 72 65 73 20 66 6f 72 20   structures for 
7ad0: 77 68 69 63 68 20 69 74 20 69 73 20 46 41 4c 53  which it is FALS
7ae0: 45 2e 0a 20 2a 0a 20 2a 20 57 68 65 6e 20 61 20  E.. *. * When a 
7af0: 74 72 69 67 67 65 72 20 69 73 20 64 72 6f 70 70  trigger is dropp
7b00: 65 64 2c 20 75 73 69 6e 67 20 74 68 65 20 73 71  ed, using the sq
7b10: 6c 69 74 65 44 72 6f 70 54 72 69 67 67 65 72 28  liteDropTrigger(
7b20: 29 20 69 6e 74 65 72 66 61 63 65 64 2c 20 69 74  ) interfaced, it
7b30: 20 69 73 20 0a 20 2a 20 72 65 6d 6f 76 65 64 20   is . * removed 
7b40: 66 72 6f 6d 20 74 68 65 20 74 72 69 67 48 61 73  from the trigHas
7b50: 68 20 68 61 73 68 20 74 61 62 6c 65 20 61 6e 64  h hash table and
7b60: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 74 72   added to the tr
7b70: 69 67 44 72 6f 70 20 68 61 73 68 20 74 61 62 6c  igDrop hash tabl
7b80: 65 2e 0a 20 2a 20 49 66 20 74 68 65 20 74 72 61  e.. * If the tra
7b90: 6e 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c  nsaction is roll
7ba0: 65 64 20 62 61 63 6b 2c 20 74 68 65 20 74 72 69  ed back, the tri
7bb0: 67 67 65 72 20 69 73 20 72 65 2d 61 64 64 65 64  gger is re-added
7bc0: 20 69 6e 74 6f 20 74 68 65 20 74 72 69 67 48 61   into the trigHa
7bd0: 73 68 0a 20 2a 20 68 61 73 68 20 74 61 62 6c 65  sh. * hash table
7be0: 20 28 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20   (and hence the 
7bf0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29  database schema)
7c00: 2e 20 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  . If the transac
7c10: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 65 64  tion is commited
7c20: 2c 0a 20 2a 20 74 68 65 6e 20 74 68 65 20 54 72  ,. * then the Tr
7c30: 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 20  igger structure 
7c40: 69 73 20 64 65 6c 65 74 65 64 20 70 65 72 6d 61  is deleted perma
7c50: 6e 65 6e 74 6c 79 2e 0a 20 2a 2f 0a 73 74 72 75  nently.. */.stru
7c60: 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
7c70: 68 61 72 20 2a 6e 61 6d 65 3b 20 20 20 20 20 20  har *name;      
7c80: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
7c90: 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
7ca0: 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
7cb0: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
7cc0: 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
7cd0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
7ce0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
7cf0: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
7d00: 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 69 6e 74  applies */.  int
7d10: 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
7d20: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
7d30: 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
7d40: 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
7d50: 20 20 20 20 20 20 20 2a 2f 0a 20 20 69 6e 74 20         */.  int 
7d60: 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
7d70: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
7d80: 5f 42 45 46 4f 52 45 2c 20 54 4b 5f 41 46 54 45  _BEFORE, TK_AFTE
7d90: 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
7da0: 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
7db0: 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
7dc0: 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 69  e of the expresi
7dd0: 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
7de0: 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
7df0: 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
7e00: 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
7e10: 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
7e20: 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
7e50: 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
7e60: 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
7e70: 0a 20 20 69 6e 74 20 66 6f 72 65 61 63 68 3b 20  .  int foreach; 
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
7e90: 65 20 6f 66 20 54 4b 5f 52 4f 57 20 6f 72 20 54  e of TK_ROW or T
7ea0: 4b 5f 53 54 41 54 45 4d 45 4e 54 20 2a 2f 0a 0a  K_STATEMENT */..
7eb0: 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
7ec0: 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
7ed0: 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
7ee0: 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
7f00: 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
7f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
7f20: 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
7f30: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
7f40: 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20  le */.};../*. * 
7f50: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
7f60: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
7f70: 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
7f80: 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
7f90: 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
7fa0: 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
7fb0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
7fc0: 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
7fd0: 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
7fe0: 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
7ff0: 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
8000: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
8010: 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
8020: 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
8030: 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
8040: 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
8050: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
8060: 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
8070: 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
8080: 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
8090: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
80a0: 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
80b0: 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
80c0: 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
80d0: 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
80e0: 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
80f0: 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
8100: 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
8110: 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
8120: 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
8130: 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
8140: 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
8150: 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
8160: 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
8170: 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
8180: 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
8190: 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
81a0: 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
81b0: 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
81c0: 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
81d0: 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
81e0: 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
81f0: 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
8200: 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
8210: 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
8220: 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
8230: 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
8240: 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
8250: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
8260: 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
8270: 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
8280: 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
8290: 6f 6c 64 69 6e 67 20 74 68 65 20 6e 61 6d 65 20  olding the name 
82a0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
82b0: 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
82c0: 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
82d0: 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
82e0: 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
82f0: 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
8300: 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
8310: 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
8320: 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
8330: 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
8340: 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
8350: 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
8360: 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
8370: 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
8380: 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
8390: 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
83a0: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
83b0: 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
83c0: 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
83d0: 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
83e0: 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
83f0: 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
8400: 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
8410: 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
8420: 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
8430: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
8440: 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
8450: 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
8460: 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
8470: 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
8480: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
8490: 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
84a0: 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
84b0: 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
84c0: 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
84d0: 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61  TK_UPDATE). * ta
84e0: 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
84f0: 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e  en holding the n
8500: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
8510: 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
8520: 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
8530: 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
8540: 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
8550: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
8560: 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
8570: 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
8580: 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
8590: 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
85a0: 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
85b0: 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
85c0: 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
85d0: 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
85e0: 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
85f0: 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
8600: 69 74 65 55 70 64 61 74 65 28 29 20 64 6f 63 75  iteUpdate() docu
8610: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
8620: 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
8630: 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
8640: 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
8650: 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
8660: 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
8670: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
8680: 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
8690: 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
86a0: 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
86b0: 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
86c0: 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
86d0: 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 0a 20 20 53  ack etc. */..  S
86e0: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
86f0: 20 20 20 20 2f 2a 20 56 61 6c 69 64 20 66 6f 72      /* Valid for
8700: 20 53 45 4c 45 43 54 20 61 6e 64 20 73 6f 6d 65   SELECT and some
8710: 74 69 6d 65 73 20 0a 09 09 09 20 20 49 4e 53 45  times ....  INSE
8720: 52 54 20 73 74 65 70 73 20 28 77 68 65 6e 20 70  RT steps (when p
8730: 45 78 70 72 4c 69 73 74 20 3d 3d 20 30 29 20 2a  ExprList == 0) *
8740: 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74  /.  Token target
8750: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69  ;        /* Vali
8760: 64 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  d for DELETE, UP
8770: 44 41 54 45 2c 20 49 4e 53 45 52 54 20 73 74 65  DATE, INSERT ste
8780: 70 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ps */.  Expr *pW
8790: 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
87a0: 56 61 6c 69 64 20 66 6f 72 20 44 45 4c 45 54 45  Valid for DELETE
87b0: 2c 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  , UPDATE steps *
87c0: 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
87d0: 78 70 72 4c 69 73 74 3b 20 2f 2a 20 56 61 6c 69  xprList; /* Vali
87e0: 64 20 66 6f 72 20 55 50 44 41 54 45 20 73 74 61  d for UPDATE sta
87f0: 74 65 6d 65 6e 74 73 20 61 6e 64 20 73 6f 6d 65  tements and some
8800: 74 69 6d 65 73 20 0a 09 09 09 20 20 20 49 4e 53  times ....   INS
8810: 45 52 54 20 73 74 65 70 73 20 28 77 68 65 6e 20  ERT steps (when 
8820: 70 53 65 6c 65 63 74 20 3d 3d 20 30 29 20 20 20  pSelect == 0)   
8830: 20 20 20 20 20 20 2a 2f 0a 20 20 49 64 4c 69 73        */.  IdLis
8840: 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
8850: 2f 2a 20 56 61 6c 69 64 20 66 6f 72 20 49 4e 53  /* Valid for INS
8860: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
8870: 6e 6c 79 20 2a 2f 0a 0a 20 20 54 72 69 67 67 65  nly */..  Trigge
8880: 72 53 74 65 70 20 2a 20 70 4e 65 78 74 3b 20 2f  rStep * pNext; /
8890: 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
88a0: 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  nk-list */.};../
88b0: 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
88c0: 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
88d0: 65 72 53 74 61 63 6b 20 73 74 6f 72 65 73 20 69  erStack stores i
88e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65 71 75 69  nformation requi
88f0: 72 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 0a  red during code.
8900: 20 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66   * generation of
8910: 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
8920: 72 20 70 72 6f 67 72 61 6d 2e 20 57 68 69 6c 65  r program. While
8930: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
8940: 67 72 61 6d 20 69 73 20 62 65 69 6e 67 0a 20 2a  gram is being. *
8950: 20 63 6f 64 65 64 2c 20 69 74 73 20 61 73 73 6f   coded, its asso
8960: 63 69 61 74 65 64 20 54 72 69 67 67 65 72 53 74  ciated TriggerSt
8970: 61 63 6b 20 69 6e 73 74 61 6e 63 65 20 69 73 20  ack instance is 
8980: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 74 68  pointed to by th
8990: 65 0a 20 2a 20 22 70 54 72 69 67 67 65 72 53 74  e. * "pTriggerSt
89a0: 61 63 6b 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ack" member of t
89b0: 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
89c0: 72 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 70 54  re.. *. * The pT
89d0: 61 62 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  ab member points
89e0: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 74 68   to the table th
89f0: 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20  at triggers are 
8a00: 62 65 69 6e 67 20 63 6f 64 65 64 20 6f 6e 2e 20  being coded on. 
8a10: 54 68 65 20 0a 20 2a 20 6e 65 77 49 64 78 20 6d  The . * newIdx m
8a20: 65 6d 62 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  ember contains t
8a30: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
8a40: 76 64 62 65 20 63 75 72 73 6f 72 20 74 68 61 74  vdbe cursor that
8a50: 20 70 6f 69 6e 74 73 20 61 74 20 74 68 65 20 74   points at the t
8a60: 65 6d 70 0a 20 2a 20 74 61 62 6c 65 20 74 68 61  emp. * table tha
8a70: 74 20 73 74 6f 72 65 73 20 74 68 65 20 6e 65 77  t stores the new
8a80: 2e 2a 20 72 65 66 65 72 65 6e 63 65 73 2e 20 49  .* references. I
8a90: 66 20 6e 65 77 2e 2a 20 72 65 66 65 72 65 6e 63  f new.* referenc
8aa0: 65 73 20 61 72 65 20 6e 6f 74 20 76 61 6c 69 64  es are not valid
8ab0: 0a 20 2a 20 66 6f 72 20 74 68 65 20 74 72 69 67  . * for the trig
8ac0: 67 65 72 20 62 65 69 6e 67 20 63 6f 64 65 64 20  ger being coded 
8ad0: 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 61 6e 20  (for example an 
8ae0: 4f 4e 20 44 45 4c 45 54 45 20 74 72 69 67 67 65  ON DELETE trigge
8af0: 72 29 2c 20 74 68 65 6e 20 6e 65 77 49 64 78 0a  r), then newIdx.
8b00: 20 2a 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e   * is set to -1.
8b10: 20 54 68 65 20 6f 6c 64 49 64 78 20 6d 65 6d 62   The oldIdx memb
8b20: 65 72 20 69 73 20 61 6e 61 6c 6f 67 6f 75 73 20  er is analogous 
8b30: 74 6f 20 6e 65 77 49 64 78 2c 20 66 6f 72 20 6f  to newIdx, for o
8b40: 6c 64 2e 2a 20 72 65 66 65 72 65 6e 63 65 73 2e  ld.* references.
8b50: 0a 20 2a 0a 20 2a 20 54 68 65 20 4f 4e 20 43 4f  . *. * The ON CO
8b60: 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 74 6f  NFLICT policy to
8b70: 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
8b80: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
8b90: 20 73 74 65 70 73 20 69 73 20 73 74 6f 72 65 64   steps is stored
8ba0: 20 0a 20 2a 20 61 73 20 74 68 65 20 6f 72 63 6f   . * as the orco
8bb0: 6e 66 20 6d 65 6d 62 65 72 2e 20 49 66 20 74 68  nf member. If th
8bc0: 69 73 20 69 73 20 4f 45 5f 44 65 66 61 75 6c 74  is is OE_Default
8bd0: 2c 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 43 4f  , then the ON CO
8be0: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 0a 20  NFLICT clause . 
8bf0: 2a 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20  * specified for 
8c00: 69 6e 64 69 76 69 64 75 61 6c 20 74 72 69 67 67  individual trigg
8c10: 65 72 73 20 73 74 65 70 73 20 69 73 20 75 73 65  ers steps is use
8c20: 64 2e 0a 20 2a 0a 20 2a 20 73 74 72 75 63 74 20  d.. *. * struct 
8c30: 54 72 69 67 67 65 72 53 74 61 63 6b 20 68 61 73  TriggerStack has
8c40: 20 61 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65   a "pNext" membe
8c50: 72 2c 20 74 6f 20 61 6c 6c 6f 77 20 6c 69 6e 6b  r, to allow link
8c60: 65 64 20 6c 69 73 74 73 20 74 6f 20 62 65 0a 20  ed lists to be. 
8c70: 2a 20 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 57  * constructed. W
8c80: 68 65 6e 20 63 6f 64 69 6e 67 20 6e 65 73 74 65  hen coding neste
8c90: 64 20 74 72 69 67 67 65 72 73 20 28 74 72 69 67  d triggers (trig
8ca0: 67 65 72 73 20 66 69 72 65 64 20 62 79 20 6f 74  gers fired by ot
8cb0: 68 65 72 20 74 72 69 67 67 65 72 73 29 0a 20 2a  her triggers). *
8cc0: 20 65 61 63 68 20 6e 65 73 74 65 64 20 74 72 69   each nested tri
8cd0: 67 67 65 72 20 73 74 6f 72 65 73 20 69 74 73 20  gger stores its 
8ce0: 70 61 72 65 6e 74 20 74 72 69 67 67 65 72 27 73  parent trigger's
8cf0: 20 54 72 69 67 67 65 72 53 74 61 63 6b 20 61 73   TriggerStack as
8d00: 20 74 68 65 20 22 70 4e 65 78 74 22 20 0a 20 2a   the "pNext" . *
8d10: 20 70 6f 69 6e 74 65 72 2e 20 4f 6e 63 65 20 74   pointer. Once t
8d20: 68 65 20 6e 65 73 74 65 64 20 74 72 69 67 67 65  he nested trigge
8d30: 72 20 68 61 73 20 62 65 65 6e 20 63 6f 64 65 64  r has been coded
8d40: 2c 20 74 68 65 20 70 4e 65 78 74 20 76 61 6c 75  , the pNext valu
8d50: 65 20 69 73 20 72 65 73 74 6f 72 65 64 0a 20 2a  e is restored. *
8d60: 20 74 6f 20 74 68 65 20 70 54 72 69 67 67 65 72   to the pTrigger
8d70: 53 74 61 63 6b 20 6d 65 6d 62 65 72 20 6f 66 20  Stack member of 
8d80: 74 68 65 20 50 61 72 73 65 20 73 74 75 63 74 75  the Parse stuctu
8d90: 72 65 20 61 6e 64 20 63 6f 64 69 6e 67 20 6f 66  re and coding of
8da0: 20 74 68 65 20 70 61 72 65 6e 74 0a 20 2a 20 74   the parent. * t
8db0: 72 69 67 67 65 72 20 63 6f 6e 74 69 6e 75 65 73  rigger continues
8dc0: 2e 0a 20 2a 0a 20 2a 20 42 65 66 6f 72 65 20 61  .. *. * Before a
8dd0: 20 6e 65 73 74 65 64 20 74 72 69 67 67 65 72 20   nested trigger 
8de0: 69 73 20 63 6f 64 65 64 2c 20 74 68 65 20 6c 69  is coded, the li
8df0: 6e 6b 65 64 20 6c 69 73 74 20 70 6f 69 6e 74 65  nked list pointe
8e00: 64 20 74 6f 20 62 79 20 74 68 65 20 0a 20 2a 20  d to by the . * 
8e10: 70 54 72 69 67 67 65 72 53 74 61 63 6b 20 69 73  pTriggerStack is
8e20: 20 73 63 61 6e 6e 65 64 20 74 6f 20 65 6e 73 75   scanned to ensu
8e30: 72 65 20 74 68 61 74 20 74 68 65 20 74 72 69 67  re that the trig
8e40: 67 65 72 20 69 73 20 6e 6f 74 20 61 62 6f 75 74  ger is not about
8e50: 20 74 6f 20 62 65 20 63 6f 64 65 64 0a 20 2a 20   to be coded. * 
8e60: 72 65 63 75 72 73 69 76 65 6c 79 2e 20 49 66 20  recursively. If 
8e70: 74 68 69 73 20 63 6f 6e 64 69 74 69 6f 6e 20 69  this condition i
8e80: 73 20 64 65 74 65 63 74 65 64 2c 20 74 68 65 20  s detected, the 
8e90: 6e 65 73 74 65 64 20 74 72 69 67 67 65 72 20 69  nested trigger i
8ea0: 73 20 6e 6f 74 20 63 6f 64 65 64 2e 0a 20 2a 2f  s not coded.. */
8eb0: 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
8ec0: 74 61 63 6b 20 7b 0a 20 20 54 61 62 6c 65 20 2a  tack {.  Table *
8ed0: 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 2f 2a  pTab;         /*
8ee0: 20 54 61 62 6c 65 20 74 68 61 74 20 74 72 69 67   Table that trig
8ef0: 67 65 72 73 20 61 72 65 20 63 75 72 72 65 6e 74  gers are current
8f00: 6c 79 20 62 65 69 6e 67 20 63 6f 64 65 64 20 6f  ly being coded o
8f10: 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 77 49 64  n */.  int newId
8f20: 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
8f30: 6e 64 65 78 20 6f 66 20 76 64 62 65 20 63 75 72  ndex of vdbe cur
8f40: 73 6f 72 20 74 6f 20 22 6e 65 77 22 20 74 65 6d  sor to "new" tem
8f50: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  p table */.  int
8f60: 20 6f 6c 64 49 64 78 3b 20 20 20 20 20 20 20 20   oldIdx;        
8f70: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 76 64    /* Index of vd
8f80: 62 65 20 63 75 72 73 6f 72 20 74 6f 20 22 6f 6c  be cursor to "ol
8f90: 64 22 20 74 65 6d 70 20 74 61 62 6c 65 20 2a 2f  d" temp table */
8fa0: 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
8fb0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
8fc0: 6e 74 20 6f 72 63 6f 6e 66 20 70 6f 6c 69 63 79  nt orconf policy
8fd0: 20 2a 2f 0a 20 20 69 6e 74 20 69 67 6e 6f 72 65   */.  int ignore
8fe0: 4a 75 6d 70 3b 20 20 20 20 20 20 2f 2a 20 77 68  Jump;      /* wh
8ff0: 65 72 65 20 74 6f 20 6a 75 6d 70 20 74 6f 20 66  ere to jump to f
9000: 6f 72 20 61 20 52 41 49 53 45 28 49 47 4e 4f 52  or a RAISE(IGNOR
9010: 45 29 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  E) */.  Trigger 
9020: 2a 70 54 72 69 67 67 65 72 3b 0a 0a 20 20 54 72  *pTrigger;..  Tr
9030: 69 67 67 65 72 53 74 61 63 6b 20 2a 70 4e 65 78  iggerStack *pNex
9040: 74 3b 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 69  t;.};../*. * Thi
9050: 73 20 67 6c 6f 62 61 6c 20 66 6c 61 67 20 69 73  s global flag is
9060: 20 73 65 74 20 66 6f 72 20 70 65 72 66 6f 72 6d   set for perform
9070: 61 6e 63 65 20 74 65 73 74 69 6e 67 20 6f 66 20  ance testing of 
9080: 74 72 69 67 67 65 72 73 2e 20 57 68 65 6e 20 69  triggers. When i
9090: 74 20 69 73 20 73 65 74 0a 20 2a 20 53 51 4c 69  t is set. * SQLi
90a0: 74 65 20 77 69 6c 6c 20 70 65 72 66 6f 72 6d 20  te will perform 
90b0: 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20  the overhead of 
90c0: 62 75 69 6c 64 69 6e 67 20 6e 65 77 20 61 6e 64  building new and
90d0: 20 6f 6c 64 20 74 72 69 67 67 65 72 20 72 65 66   old trigger ref
90e0: 65 72 65 6e 63 65 73 20 0a 20 2a 20 65 76 65 6e  erences . * even
90f0: 20 77 68 65 6e 20 6e 6f 20 74 72 69 67 67 65 72   when no trigger
9100: 73 20 65 78 69 73 74 0a 20 2a 2f 0a 65 78 74 65  s exist. */.exte
9110: 72 6e 20 69 6e 74 20 61 6c 77 61 79 73 5f 63 6f  rn int always_co
9120: 64 65 5f 74 72 69 67 67 65 72 5f 73 65 74 75 70  de_trigger_setup
9130: 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  ;../*.** Interna
9140: 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
9150: 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
9160: 69 74 65 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  iteStrICmp(const
9170: 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
9180: 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
9190: 74 65 53 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74  teStrNICmp(const
91a0: 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
91b0: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  har *, int);.int
91c0: 20 73 71 6c 69 74 65 48 61 73 68 4e 6f 43 61 73   sqliteHashNoCas
91d0: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  e(const char *, 
91e0: 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
91f0: 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 63 68  Compare(const ch
9200: 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
9210: 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 53   *);.int sqliteS
9220: 6f 72 74 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74  ortCompare(const
9230: 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
9240: 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
9250: 69 74 65 52 65 61 6c 54 6f 53 6f 72 74 61 62 6c  iteRealToSortabl
9260: 65 28 64 6f 75 62 6c 65 20 72 2c 20 63 68 61 72  e(double r, char
9270: 20 2a 29 3b 0a 23 69 66 64 65 66 20 4d 45 4d 4f   *);.#ifdef MEMO
9280: 52 59 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  RY_DEBUG.  void 
9290: 2a 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 5f 28 69  *sqliteMalloc_(i
92a0: 6e 74 2c 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 20  nt,char*,int);. 
92b0: 20 76 6f 69 64 20 73 71 6c 69 74 65 46 72 65 65   void sqliteFree
92c0: 5f 28 76 6f 69 64 2a 2c 63 68 61 72 2a 2c 69 6e  _(void*,char*,in
92d0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  t);.  void *sqli
92e0: 74 65 52 65 61 6c 6c 6f 63 5f 28 76 6f 69 64 2a  teRealloc_(void*
92f0: 2c 69 6e 74 2c 63 68 61 72 2a 2c 69 6e 74 29 3b  ,int,char*,int);
9300: 0a 20 20 63 68 61 72 20 2a 73 71 6c 69 74 65 53  .  char *sqliteS
9310: 74 72 44 75 70 5f 28 63 6f 6e 73 74 20 63 68 61  trDup_(const cha
9320: 72 2a 2c 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 20  r*,char*,int);. 
9330: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 53 74 72   char *sqliteStr
9340: 4e 44 75 70 5f 28 63 6f 6e 73 74 20 63 68 61 72  NDup_(const char
9350: 2a 2c 20 69 6e 74 2c 63 68 61 72 2a 2c 69 6e 74  *, int,char*,int
9360: 29 3b 0a 23 65 6c 73 65 0a 20 20 76 6f 69 64 20  );.#else.  void 
9370: 2a 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 69 6e  *sqliteMalloc(in
9380: 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
9390: 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 20 20  eFree(void*);.  
93a0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 52 65 61 6c  void *sqliteReal
93b0: 6c 6f 63 28 76 6f 69 64 2a 2c 69 6e 74 29 3b 0a  loc(void*,int);.
93c0: 20 20 63 68 61 72 20 2a 73 71 6c 69 74 65 53 74    char *sqliteSt
93d0: 72 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  rDup(const char*
93e0: 29 3b 0a 20 20 63 68 61 72 20 2a 73 71 6c 69 74  );.  char *sqlit
93f0: 65 53 74 72 4e 44 75 70 28 63 6f 6e 73 74 20 63  eStrNDup(const c
9400: 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  har*, int);.#end
9410: 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 53 65  if.void sqliteSe
9420: 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
9430: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 2e   const char *, .
9440: 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
9450: 53 65 74 4e 53 74 72 69 6e 67 28 63 68 61 72 20  SetNString(char 
9460: 2a 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  **, ...);.void s
9470: 71 6c 69 74 65 44 65 71 75 6f 74 65 28 63 68 61  qliteDequote(cha
9480: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4b  r*);.int sqliteK
9490: 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
94a0: 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
94b0: 74 20 73 71 6c 69 74 65 52 75 6e 50 61 72 73 65  t sqliteRunParse
94c0: 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
94d0: 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
94e0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 45 78 65 63  .void sqliteExec
94f0: 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a  (Parse*);.Expr *
9500: 73 71 6c 69 74 65 45 78 70 72 28 69 6e 74 2c 20  sqliteExpr(int, 
9510: 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 54 6f  Expr*, Expr*, To
9520: 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
9530: 74 65 45 78 70 72 53 70 61 6e 28 45 78 70 72 2a  teExprSpan(Expr*
9540: 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b  ,Token*,Token*);
9550: 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 45 78 70  .Expr *sqliteExp
9560: 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 4c 69  rFunction(ExprLi
9570: 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
9580: 69 64 20 73 71 6c 69 74 65 45 78 70 72 44 65 6c  id sqliteExprDel
9590: 65 74 65 28 45 78 70 72 2a 29 3b 0a 45 78 70 72  ete(Expr*);.Expr
95a0: 4c 69 73 74 20 2a 73 71 6c 69 74 65 45 78 70 72  List *sqliteExpr
95b0: 4c 69 73 74 41 70 70 65 6e 64 28 45 78 70 72 4c  ListAppend(ExprL
95c0: 69 73 74 2a 2c 45 78 70 72 2a 2c 54 6f 6b 65 6e  ist*,Expr*,Token
95d0: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 45  *);.void sqliteE
95e0: 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 45 78  xprListDelete(Ex
95f0: 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
9600: 71 6c 69 74 65 50 72 61 67 6d 61 28 50 61 72 73  qlitePragma(Pars
9610: 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
9620: 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
9630: 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  teResetInternalS
9640: 63 68 65 6d 61 28 73 71 6c 69 74 65 2a 29 3b 0a  chema(sqlite*);.
9650: 69 6e 74 20 73 71 6c 69 74 65 49 6e 69 74 28 73  int sqliteInit(s
9660: 71 6c 69 74 65 2a 2c 20 63 68 61 72 2a 2a 29 3b  qlite*, char**);
9670: 0a 76 6f 69 64 20 73 71 6c 69 74 65 42 65 67 69  .void sqliteBegi
9680: 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
9690: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 52  t);.void sqliteR
96a0: 6f 6c 6c 62 61 63 6b 49 6e 74 65 72 6e 61 6c 43  ollbackInternalC
96b0: 68 61 6e 67 65 73 28 73 71 6c 69 74 65 2a 29 3b  hanges(sqlite*);
96c0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 43 6f 6d 6d  .void sqliteComm
96d0: 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
96e0: 73 28 73 71 6c 69 74 65 2a 29 3b 0a 54 61 62 6c  s(sqlite*);.Tabl
96f0: 65 20 2a 73 71 6c 69 74 65 52 65 73 75 6c 74 53  e *sqliteResultS
9700: 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
9710: 2a 2c 63 68 61 72 2a 2c 53 65 6c 65 63 74 2a 29  *,char*,Select*)
9720: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 4f 70 65  ;.void sqliteOpe
9730: 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 56 64 62  nMasterTable(Vdb
9740: 65 20 2a 76 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  e *v, int);.void
9750: 20 73 71 6c 69 74 65 53 74 61 72 74 54 61 62 6c   sqliteStartTabl
9760: 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
9770: 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
9780: 64 20 73 71 6c 69 74 65 41 64 64 43 6f 6c 75 6d  d sqliteAddColum
9790: 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
97a0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 41 64 64  ;.void sqliteAdd
97b0: 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
97c0: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
97d0: 65 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  eAddPrimaryKey(P
97e0: 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  arse*, IdList*, 
97f0: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
9800: 65 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50  eAddColumnType(P
9810: 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
9820: 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
9830: 65 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  eAddDefaultValue
9840: 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 69  (Parse*,Token*,i
9850: 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 43  nt);.int sqliteC
9860: 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
9870: 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
9880: 20 73 71 6c 69 74 65 41 64 64 43 6f 6c 6c 61 74   sqliteAddCollat
9890: 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 69 6e  eType(Parse*, in
98a0: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 45  t);.void sqliteE
98b0: 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
98c0: 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  oken*,Select*);.
98d0: 76 6f 69 64 20 73 71 6c 69 74 65 43 72 65 61 74  void sqliteCreat
98e0: 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
98f0: 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63  en*,Token*,Selec
9900: 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t*,int);.int sql
9910: 69 74 65 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  iteViewGetColumn
9920: 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
9930: 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
9940: 65 56 69 65 77 52 65 73 65 74 41 6c 6c 28 73 71  eViewResetAll(sq
9950: 6c 69 74 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lite*);.void sql
9960: 69 74 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  iteDropTable(Par
9970: 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  se*, Token*, int
9980: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 44 65  );.void sqliteDe
9990: 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
99a0: 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  *, Table*);.void
99b0: 20 73 71 6c 69 74 65 49 6e 73 65 72 74 28 50 61   sqliteInsert(Pa
99c0: 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  rse*, Token*, Ex
99d0: 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  prList*, Select*
99e0: 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
99f0: 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 49  .IdList *sqliteI
9a00: 64 4c 69 73 74 41 70 70 65 6e 64 28 49 64 4c 69  dListAppend(IdLi
9a10: 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
9a20: 74 20 73 71 6c 69 74 65 49 64 4c 69 73 74 49 6e  t sqliteIdListIn
9a30: 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
9a40: 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
9a50: 74 20 2a 73 71 6c 69 74 65 53 72 63 4c 69 73 74  t *sqliteSrcList
9a60: 41 70 70 65 6e 64 28 53 72 63 4c 69 73 74 2a 2c  Append(SrcList*,
9a70: 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
9a80: 71 6c 69 74 65 53 72 63 4c 69 73 74 41 64 64 41  qliteSrcListAddA
9a90: 6c 69 61 73 28 53 72 63 4c 69 73 74 2a 2c 20 54  lias(SrcList*, T
9aa0: 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
9ab0: 69 74 65 49 64 4c 69 73 74 44 65 6c 65 74 65 28  iteIdListDelete(
9ac0: 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
9ad0: 71 6c 69 74 65 53 72 63 4c 69 73 74 44 65 6c 65  qliteSrcListDele
9ae0: 74 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  te(SrcList*);.vo
9af0: 69 64 20 73 71 6c 69 74 65 43 72 65 61 74 65 49  id sqliteCreateI
9b00: 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
9b10: 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 49 64 4c  en*, Token*, IdL
9b20: 69 73 74 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  ist*, int, Token
9b30: 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
9b40: 20 73 71 6c 69 74 65 44 72 6f 70 49 6e 64 65 78   sqliteDropIndex
9b50: 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
9b60: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 41 64 64  ;.void sqliteAdd
9b70: 4b 65 79 54 79 70 65 28 56 64 62 65 2a 2c 20 45  KeyType(Vdbe*, E
9b80: 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  xprList*);.void 
9b90: 73 71 6c 69 74 65 41 64 64 49 64 78 4b 65 79 54  sqliteAddIdxKeyT
9ba0: 79 70 65 28 56 64 62 65 2a 2c 20 49 6e 64 65 78  ype(Vdbe*, Index
9bb0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 53 65  *);.int sqliteSe
9bc0: 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
9bd0: 65 63 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ect*, int, int, 
9be0: 53 65 6c 65 63 74 2a 2c 20 69 6e 74 2c 20 69 6e  Select*, int, in
9bf0: 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
9c00: 69 74 65 53 65 6c 65 63 74 4e 65 77 28 45 78 70  iteSelectNew(Exp
9c10: 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
9c20: 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
9c30: 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c50: 20 20 20 20 20 20 20 20 20 69 6e 74 2c 69 6e 74           int,int
9c60: 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
9c70: 74 65 53 65 6c 65 63 74 44 65 6c 65 74 65 28 53  teSelectDelete(S
9c80: 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
9c90: 6c 69 74 65 53 65 6c 65 63 74 55 6e 62 69 6e 64  liteSelectUnbind
9ca0: 28 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65  (Select*);.Table
9cb0: 20 2a 73 71 6c 69 74 65 54 61 62 6c 65 4e 61 6d   *sqliteTableNam
9cc0: 65 54 6f 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  eToTable(Parse*,
9cd0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53   const char*);.S
9ce0: 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 54 61  rcList *sqliteTa
9cf0: 62 6c 65 54 6f 6b 65 6e 54 6f 53 72 63 4c 69 73  bleTokenToSrcLis
9d00: 74 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  t(Parse*, Token*
9d10: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 44 65  );.void sqliteDe
9d20: 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
9d30: 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b   Token*, Expr*);
9d40: 0a 76 6f 69 64 20 73 71 6c 69 74 65 55 70 64 61  .void sqliteUpda
9d50: 74 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  te(Parse*, Token
9d60: 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
9d70: 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
9d80: 49 6e 66 6f 20 2a 73 71 6c 69 74 65 57 68 65 72  Info *sqliteWher
9d90: 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 20 69  eBegin(Parse*, i
9da0: 6e 74 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  nt, SrcList*, Ex
9db0: 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
9dc0: 73 74 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  st**);.void sqli
9dd0: 74 65 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  teWhereEnd(Where
9de0: 49 6e 66 6f 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Info*);.void sql
9df0: 69 74 65 45 78 70 72 43 6f 64 65 28 50 61 72 73  iteExprCode(Pars
9e00: 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
9e10: 20 73 71 6c 69 74 65 45 78 70 72 49 66 54 72 75   sqliteExprIfTru
9e20: 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
9e30: 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
9e40: 20 73 71 6c 69 74 65 45 78 70 72 49 66 46 61 6c   sqliteExprIfFal
9e50: 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
9e60: 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
9e70: 6c 65 20 2a 73 71 6c 69 74 65 46 69 6e 64 54 61  le *sqliteFindTa
9e80: 62 6c 65 28 73 71 6c 69 74 65 2a 2c 63 6f 6e 73  ble(sqlite*,cons
9e90: 74 20 63 68 61 72 2a 29 3b 0a 49 6e 64 65 78 20  t char*);.Index 
9ea0: 2a 73 71 6c 69 74 65 46 69 6e 64 49 6e 64 65 78  *sqliteFindIndex
9eb0: 28 73 71 6c 69 74 65 2a 2c 63 6f 6e 73 74 20 63  (sqlite*,const c
9ec0: 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
9ed0: 74 65 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  teUnlinkAndDelet
9ee0: 65 49 6e 64 65 78 28 73 71 6c 69 74 65 2a 2c 49  eIndex(sqlite*,I
9ef0: 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
9f00: 69 74 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20  iteCopy(Parse*, 
9f10: 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
9f20: 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
9f30: 69 64 20 73 71 6c 69 74 65 56 61 63 75 75 6d 28  id sqliteVacuum(
9f40: 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
9f50: 0a 69 6e 74 20 73 71 6c 69 74 65 47 6c 6f 62 43  .int sqliteGlobC
9f60: 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 75 6e 73  ompare(const uns
9f70: 69 67 6e 65 64 20 63 68 61 72 2a 2c 63 6f 6e 73  igned char*,cons
9f80: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
9f90: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 4c 69 6b  );.int sqliteLik
9fa0: 65 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 75  eCompare(const u
9fb0: 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 63 6f  nsigned char*,co
9fc0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
9fd0: 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
9fe0: 65 54 61 62 6c 65 4e 61 6d 65 46 72 6f 6d 54 6f  eTableNameFromTo
9ff0: 6b 65 6e 28 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  ken(Token*);.int
a000: 20 73 71 6c 69 74 65 45 78 70 72 43 68 65 63 6b   sqliteExprCheck
a010: 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
a020: 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  int, int*);.int 
a030: 73 71 6c 69 74 65 45 78 70 72 54 79 70 65 28 45  sqliteExprType(E
a040: 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
a050: 65 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70  eExprCompare(Exp
a060: 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
a070: 73 71 6c 69 74 65 46 75 6e 63 49 64 28 54 6f 6b  sqliteFuncId(Tok
a080: 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
a090: 45 78 70 72 52 65 73 6f 6c 76 65 49 64 73 28 50  ExprResolveIds(P
a0a0: 61 72 73 65 2a 2c 20 69 6e 74 2c 20 53 72 63 4c  arse*, int, SrcL
a0b0: 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
a0c0: 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
a0d0: 69 74 65 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  iteExprAnalyzeAg
a0e0: 67 72 65 67 61 74 65 73 28 50 61 72 73 65 2a 2c  gregates(Parse*,
a0f0: 20 45 78 70 72 2a 29 3b 0a 56 64 62 65 20 2a 73   Expr*);.Vdbe *s
a100: 71 6c 69 74 65 47 65 74 56 64 62 65 28 50 61 72  qliteGetVdbe(Par
a110: 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
a120: 52 61 6e 64 6f 6d 42 79 74 65 28 76 6f 69 64 29  RandomByte(void)
a130: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 52 61 6e 64  ;.int sqliteRand
a140: 6f 6d 49 6e 74 65 67 65 72 28 76 6f 69 64 29 3b  omInteger(void);
a150: 0a 76 6f 69 64 20 73 71 6c 69 74 65 42 65 67 69  .void sqliteBegi
a160: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
a170: 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
a180: 73 71 6c 69 74 65 43 6f 6d 6d 69 74 54 72 61 6e  sqliteCommitTran
a190: 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
a1a0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 52 6f 6c 6c  .void sqliteRoll
a1b0: 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
a1c0: 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
a1d0: 69 74 65 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  iteExprIsConstan
a1e0: 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
a1f0: 6c 69 74 65 45 78 70 72 49 73 49 6e 74 65 67 65  liteExprIsIntege
a200: 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
a210: 69 6e 74 20 73 71 6c 69 74 65 49 73 52 6f 77 69  int sqliteIsRowi
a220: 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
a230: 76 6f 69 64 20 73 71 6c 69 74 65 47 65 6e 65 72  void sqliteGener
a240: 61 74 65 52 6f 77 44 65 6c 65 74 65 28 73 71 6c  ateRowDelete(sql
a250: 69 74 65 2a 2c 20 56 64 62 65 2a 2c 20 54 61 62  ite*, Vdbe*, Tab
a260: 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
a270: 76 6f 69 64 20 73 71 6c 69 74 65 47 65 6e 65 72  void sqliteGener
a280: 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
a290: 65 28 73 71 6c 69 74 65 2a 2c 20 56 64 62 65 2a  e(sqlite*, Vdbe*
a2a0: 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 63  , Table*, int, c
a2b0: 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
a2c0: 74 65 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  teGenerateConstr
a2d0: 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
a2e0: 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 63 68 61  *,Table*,int,cha
a2f0: 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  r*,int,int,int,i
a300: 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
a310: 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
a320: 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
a330: 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e  , int, char*, in
a340: 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
a350: 6c 69 74 65 42 65 67 69 6e 57 72 69 74 65 4f 70  liteBeginWriteOp
a360: 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
a370: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
a380: 65 45 6e 64 57 72 69 74 65 4f 70 65 72 61 74 69  eEndWriteOperati
a390: 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  on(Parse*);.Expr
a3a0: 20 2a 73 71 6c 69 74 65 45 78 70 72 44 75 70 28   *sqliteExprDup(
a3b0: 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
a3c0: 69 74 65 54 6f 6b 65 6e 43 6f 70 79 28 54 6f 6b  iteTokenCopy(Tok
a3d0: 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  en*, Token*);.Ex
a3e0: 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 45 78  prList *sqliteEx
a3f0: 70 72 4c 69 73 74 44 75 70 28 45 78 70 72 4c 69  prListDup(ExprLi
a400: 73 74 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  st*);.SrcList *s
a410: 71 6c 69 74 65 53 72 63 4c 69 73 74 44 75 70 28  qliteSrcListDup(
a420: 53 72 63 4c 69 73 74 2a 29 3b 0a 49 64 4c 69 73  SrcList*);.IdLis
a430: 74 20 2a 73 71 6c 69 74 65 49 64 4c 69 73 74 44  t *sqliteIdListD
a440: 75 70 28 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  up(IdList*);.Sel
a450: 65 63 74 20 2a 73 71 6c 69 74 65 53 65 6c 65 63  ect *sqliteSelec
a460: 74 44 75 70 28 53 65 6c 65 63 74 2a 29 3b 0a 46  tDup(Select*);.F
a470: 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 46 69  uncDef *sqliteFi
a480: 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
a490: 65 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  e*,const char*,i
a4a0: 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
a4b0: 64 20 73 71 6c 69 74 65 52 65 67 69 73 74 65 72  d sqliteRegister
a4c0: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
a4d0: 28 73 71 6c 69 74 65 2a 29 3b 0a 69 6e 74 20 73  (sqlite*);.int s
a4e0: 71 6c 69 74 65 53 61 66 65 74 79 4f 6e 28 73 71  qliteSafetyOn(sq
a4f0: 6c 69 74 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lite*);.int sqli
a500: 74 65 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69  teSafetyOff(sqli
a510: 74 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  te*);.int sqlite
a520: 53 61 66 65 74 79 43 68 65 63 6b 28 73 71 6c 69  SafetyCheck(sqli
a530: 74 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  te*);.void sqlit
a540: 65 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 73 71  eChangeCookie(sq
a550: 6c 69 74 65 2a 2c 20 56 64 62 65 2a 29 3b 0a 76  lite*, Vdbe*);.v
a560: 6f 69 64 20 73 71 6c 69 74 65 43 72 65 61 74 65  oid sqliteCreate
a570: 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
a580: 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e 74  Token*, int, int
a590: 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
a5a0: 2a 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  *, .            
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
a5c0: 2c 20 45 78 70 72 2a 2c 20 54 72 69 67 67 65 72  , Expr*, Trigger
a5d0: 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
a5e0: 76 6f 69 64 20 73 71 6c 69 74 65 44 72 6f 70 54  void sqliteDropT
a5f0: 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
a600: 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  oken*, int);.int
a610: 20 73 71 6c 69 74 65 54 72 69 67 67 65 72 73 45   sqliteTriggersE
a620: 78 69 73 74 28 50 61 72 73 65 2a 20 2c 20 54 72  xist(Parse* , Tr
a630: 69 67 67 65 72 2a 20 2c 20 69 6e 74 20 2c 20 69  igger* , int , i
a640: 6e 74 20 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  nt , int, ExprLi
a650: 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
a660: 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
a670: 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
a680: 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
a690: 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 0a  e *, int, int, .
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6b0: 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
a6c0: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 56  t);.void sqliteV
a6d0: 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
a6e0: 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
a6f0: 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
a700: 2a 29 3b 0a 54 72 69 67 67 65 72 53 74 65 70 20  *);.TriggerStep 
a710: 2a 73 71 6c 69 74 65 54 72 69 67 67 65 72 53 65  *sqliteTriggerSe
a720: 6c 65 63 74 53 74 65 70 28 53 65 6c 65 63 74 2a  lectStep(Select*
a730: 29 3b 0a 54 72 69 67 67 65 72 53 74 65 70 20 2a  );.TriggerStep *
a740: 73 71 6c 69 74 65 54 72 69 67 67 65 72 49 6e 73  sqliteTriggerIns
a750: 65 72 74 53 74 65 70 28 54 6f 6b 65 6e 2a 2c 20  ertStep(Token*, 
a760: 49 64 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  IdList*, ExprLis
a770: 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 69 6e 74  t*, Select*, int
a780: 29 3b 0a 54 72 69 67 67 65 72 53 74 65 70 20 2a  );.TriggerStep *
a790: 73 71 6c 69 74 65 54 72 69 67 67 65 72 55 70 64  sqliteTriggerUpd
a7a0: 61 74 65 53 74 65 70 28 54 6f 6b 65 6e 2a 2c 20  ateStep(Token*, 
a7b0: 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
a7c0: 2c 20 69 6e 74 29 3b 0a 54 72 69 67 67 65 72 53  , int);.TriggerS
a7d0: 74 65 70 20 2a 73 71 6c 69 74 65 54 72 69 67 67  tep *sqliteTrigg
a7e0: 65 72 44 65 6c 65 74 65 53 74 65 70 28 54 6f 6b  erDeleteStep(Tok
a7f0: 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  en*, Expr*);.voi
a800: 64 20 73 71 6c 69 74 65 44 65 6c 65 74 65 54 72  d sqliteDeleteTr
a810: 69 67 67 65 72 28 54 72 69 67 67 65 72 2a 29 3b  igger(Trigger*);
a820: 0a 69 6e 74 20 73 71 6c 69 74 65 4a 6f 69 6e 54  .int sqliteJoinT
a830: 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
a840: 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
a850: 6e 2a 29 3b 0a                                   n*);.