/ Hex Artifact Content
Login

Artifact bc118a7a701afb954f4cd2110cd0986478e1a741:


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 32 33 34 20 32 30 30 34 2f 30 35  ,v 1.234 2004/05
01d0: 2f 31 36 20 31 31 3a 31 35 3a 33 39 20 64 61 6e  /16 11:15:39 dan
01e0: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
01f0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  /.#include "conf
0200: 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ig.h".#include "
0210: 73 71 6c 69 74 65 2e 68 22 0a 23 69 6e 63 6c 75  sqlite.h".#inclu
0220: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
0230: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
0240: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
0250: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
0260: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
0270: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
0280: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 0a 2f  de <assert.h>../
0290: 2a 0a 2a 2a 20 54 68 65 20 6d 61 78 69 6d 75 6d  *.** The maximum
02a0: 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 2d 6d 65   number of in-me
02b0: 6d 6f 72 79 20 70 61 67 65 73 20 74 6f 20 75 73  mory pages to us
02c0: 65 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  e for the main d
02d0: 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
02e0: 20 61 6e 64 20 66 6f 72 20 74 65 6d 70 6f 72 61   and for tempora
02f0: 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a 23 64  ry tables..*/.#d
0300: 65 66 69 6e 65 20 4d 41 58 5f 50 41 47 45 53 20  efine MAX_PAGES 
0310: 20 20 32 30 30 30 0a 23 64 65 66 69 6e 65 20 54    2000.#define T
0320: 45 4d 50 5f 50 41 47 45 53 20 20 20 35 30 30 0a  EMP_PAGES   500.
0330: 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f  ./*.** If the fo
0340: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73  llowing macro is
0350: 20 73 65 74 20 74 6f 20 31 2c 20 74 68 65 6e 20   set to 1, then 
0360: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
0370: 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 64 69  considered.** di
0380: 73 74 69 6e 63 74 20 66 6f 72 20 74 68 65 20 53  stinct for the S
0390: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 73  ELECT DISTINCT s
03a0: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 66 6f 72  tatement and for
03b0: 20 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54   UNION or EXCEPT
03c0: 0a 2a 2a 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  .** compound que
03d0: 72 69 65 73 2e 20 20 4e 6f 20 6f 74 68 65 72 20  ries.  No other 
03e0: 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
03f0: 69 6e 65 20 28 61 6d 6f 6e 67 20 74 68 6f 73 65  ine (among those
0400: 20 74 65 73 74 65 64 29 20 0a 2a 2a 20 77 6f 72   tested) .** wor
0410: 6b 73 20 74 68 69 73 20 77 61 79 20 65 78 63 65  ks this way exce
0420: 70 74 20 66 6f 72 20 4f 43 45 4c 4f 54 2e 20 20  pt for OCELOT.  
0430: 42 75 74 20 74 68 65 20 53 51 4c 39 32 20 73 70  But the SQL92 sp
0440: 65 63 20 69 6d 70 6c 69 65 73 20 74 68 61 74 0a  ec implies that.
0450: 2a 2a 20 74 68 69 73 20 69 73 20 68 6f 77 20 74  ** this is how t
0460: 68 69 6e 67 73 20 73 68 6f 75 6c 64 20 77 6f 72  hings should wor
0470: 6b 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  k..**.** If the 
0480: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
0490: 69 73 20 73 65 74 20 74 6f 20 30 2c 20 74 68 65  is set to 0, the
04a0: 6e 20 4e 55 4c 4c 73 20 61 72 65 20 69 6e 64 69  n NULLs are indi
04b0: 73 74 69 6e 63 74 20 66 6f 72 0a 2a 2a 20 53 45  stinct for.** SE
04c0: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 61 6e  LECT DISTINCT an
04d0: 64 20 66 6f 72 20 55 4e 49 4f 4e 2e 0a 2a 2f 0a  d for UNION..*/.
04e0: 23 64 65 66 69 6e 65 20 4e 55 4c 4c 5f 41 4c 57  #define NULL_ALW
04f0: 41 59 53 5f 44 49 53 54 49 4e 43 54 20 30 0a 0a  AYS_DISTINCT 0..
0500: 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c  /*.** If the fol
0510: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20  lowing macro is 
0520: 73 65 74 20 74 6f 20 31 2c 20 74 68 65 6e 20 4e  set to 1, then N
0530: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
0540: 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 64 69 73  onsidered.** dis
0550: 74 69 6e 63 74 20 77 68 65 6e 20 64 65 74 65 72  tinct when deter
0560: 6d 69 6e 69 6e 67 20 77 68 65 74 68 65 72 20 6f  mining whether o
0570: 72 20 6e 6f 74 20 74 77 6f 20 65 6e 74 72 69 65  r not two entrie
0580: 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 0a 2a  s are the same.*
0590: 2a 20 69 6e 20 61 20 55 4e 49 51 55 45 20 69 6e  * in a UNIQUE in
05a0: 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 74 68  dex.  This is th
05b0: 65 20 77 61 79 20 50 6f 73 74 67 72 65 53 51 4c  e way PostgreSQL
05c0: 2c 20 4f 72 61 63 6c 65 2c 20 44 42 32 2c 20 4d  , Oracle, DB2, M
05d0: 79 53 51 4c 2c 0a 2a 2a 20 4f 43 45 4c 4f 54 2c  ySQL,.** OCELOT,
05e0: 20 61 6e 64 20 46 69 72 65 62 69 72 64 20 61 6c   and Firebird al
05f0: 6c 20 77 6f 72 6b 2e 20 20 54 68 65 20 53 51 4c  l work.  The SQL
0600: 39 32 20 73 70 65 63 20 65 78 70 6c 69 63 69 74  92 spec explicit
0610: 6c 79 20 73 61 79 73 20 74 68 69 73 0a 2a 2a 20  ly says this.** 
0620: 69 73 20 74 68 65 20 77 61 79 20 74 68 69 6e 67  is the way thing
0630: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
0640: 20 77 6f 72 6b 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   work..**.** If 
0650: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
0660: 63 72 6f 20 69 73 20 73 65 74 20 74 6f 20 30 2c  cro is set to 0,
0670: 20 74 68 65 20 4e 55 4c 4c 73 20 61 72 65 20 69   the NULLs are i
0680: 6e 64 69 73 74 69 6e 63 74 20 66 6f 72 0a 2a 2a  ndistinct for.**
0690: 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 2e   a UNIQUE index.
06a0: 20 20 49 6e 20 74 68 69 73 20 6d 6f 64 65 2c 20    In this mode, 
06b0: 79 6f 75 20 63 61 6e 20 6f 6e 6c 79 20 68 61 76  you can only hav
06c0: 65 20 61 20 73 69 6e 67 6c 65 20 4e 55 4c 4c 20  e a single NULL 
06d0: 65 6e 74 72 79 0a 2a 2a 20 66 6f 72 20 61 20 63  entry.** for a c
06e0: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 65 64 20 55  olumn declared U
06f0: 4e 49 51 55 45 2e 20 20 54 68 69 73 20 69 73 20  NIQUE.  This is 
0700: 74 68 65 20 77 61 79 20 49 6e 66 6f 72 6d 69 78  the way Informix
0710: 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 0a   and SQL Server.
0720: 2a 2a 20 77 6f 72 6b 2e 0a 2a 2f 0a 23 64 65 66  ** work..*/.#def
0730: 69 6e 65 20 4e 55 4c 4c 5f 44 49 53 54 49 4e 43  ine NULL_DISTINC
0740: 54 5f 46 4f 52 5f 55 4e 49 51 55 45 20 31 0a 0a  T_FOR_UNIQUE 1..
0750: 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 78 69 6d 75  /*.** The maximu
0760: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 74 74 61  m number of atta
0770: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 20  ched databases. 
0780: 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 61 74   This must be at
0790: 20 6c 65 61 73 74 20 32 0a 2a 2a 20 69 6e 20 6f   least 2.** in o
07a0: 72 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20  rder to support 
07b0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
07c0: 65 20 66 69 6c 65 20 28 30 29 20 61 6e 64 20 74  e file (0) and t
07d0: 68 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 0a  he file used to.
07e0: 2a 2a 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  ** hold temporar
07f0: 79 20 74 61 62 6c 65 73 20 28 31 29 2e 20 20 41  y tables (1).  A
0800: 6e 64 20 69 74 20 6d 75 73 74 20 62 65 20 6c 65  nd it must be le
0810: 73 73 20 74 68 61 6e 20 32 35 36 20 62 65 63 61  ss than 256 beca
0820: 75 73 65 0a 2a 2a 20 61 6e 20 75 6e 73 69 67 6e  use.** an unsign
0830: 65 64 20 63 68 61 72 61 63 74 65 72 20 69 73 20  ed character is 
0840: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 64 20 74  used to stored t
0850: 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 64 65  he database inde
0860: 78 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  x..*/.#define MA
0870: 58 5f 41 54 54 41 43 48 45 44 20 31 30 0a 0a 2f  X_ATTACHED 10../
0880: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 6d 61  *.** The next ma
0890: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 64  cro is used to d
08a0: 65 74 65 72 6d 69 6e 65 20 77 68 65 72 65 20 54  etermine where T
08b0: 45 4d 50 20 74 61 62 6c 65 73 20 61 6e 64 20 69  EMP tables and i
08c0: 6e 64 69 63 65 73 0a 2a 2a 20 61 72 65 20 73 74  ndices.** are st
08d0: 6f 72 65 64 2e 20 20 50 6f 73 73 69 62 6c 65 20  ored.  Possible 
08e0: 76 61 6c 75 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  values:.**.**   
08f0: 30 20 20 20 20 41 6c 77 61 79 73 20 75 73 65 20  0    Always use 
0900: 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  a temporary file
0910: 73 0a 2a 2a 20 20 20 31 20 20 20 20 55 73 65 20  s.**   1    Use 
0920: 61 20 66 69 6c 65 20 75 6e 6c 65 73 73 20 6f 76  a file unless ov
0930: 65 72 72 69 64 64 65 6e 20 62 79 20 22 50 52 41  erridden by "PRA
0940: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 22 0a  GMA temp_store".
0950: 2a 2a 20 20 20 32 20 20 20 20 55 73 65 20 6d 65  **   2    Use me
0960: 6d 6f 72 79 20 75 6e 6c 65 73 73 20 6f 76 65 72  mory unless over
0970: 72 69 64 64 65 6e 20 62 79 20 22 50 52 41 47 4d  ridden by "PRAGM
0980: 41 20 74 65 6d 70 5f 73 74 6f 72 65 22 0a 2a 2a  A temp_store".**
0990: 20 20 20 33 20 20 20 20 41 6c 77 61 79 73 20 75     3    Always u
09a0: 73 65 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 23 69 66  se memory.*/.#if
09b0: 6e 64 65 66 20 54 45 4d 50 5f 53 54 4f 52 45 0a  ndef TEMP_STORE.
09c0: 23 20 64 65 66 69 6e 65 20 54 45 4d 50 5f 53 54  # define TEMP_ST
09d0: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
09e0: 0a 2a 2a 20 57 68 65 6e 20 62 75 69 6c 64 69 6e  .** When buildin
09f0: 67 20 53 51 4c 69 74 65 20 66 6f 72 20 65 6d 62  g SQLite for emb
0a00: 65 64 64 65 64 20 73 79 73 74 65 6d 73 20 77 68  edded systems wh
0a10: 65 72 65 20 6d 65 6d 6f 72 79 20 69 73 20 73 63  ere memory is sc
0a20: 61 72 63 65 2c 0a 2a 2a 20 79 6f 75 20 63 61 6e  arce,.** you can
0a30: 20 64 65 66 69 6e 65 20 6f 6e 65 20 6f 72 20 6d   define one or m
0a40: 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  ore of the follo
0a50: 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 6f 20 6f  wing macros to o
0a60: 6d 69 74 20 65 78 74 72 61 0a 2a 2a 20 66 65 61  mit extra.** fea
0a70: 74 75 72 65 73 20 6f 66 20 74 68 65 20 6c 69 62  tures of the lib
0a80: 72 61 72 79 20 61 6e 64 20 74 68 75 73 20 6b 65  rary and thus ke
0a90: 65 70 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ep the size of t
0aa0: 68 65 20 6c 69 62 72 61 72 79 20 74 6f 0a 2a 2a  he library to.**
0ab0: 20 61 20 6d 69 6e 69 6d 75 6d 2e 0a 2a 2f 0a 2f   a minimum..*/./
0ac0: 2a 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  * #define SQLITE
0ad0: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
0ae0: 49 4f 4e 20 20 31 20 2a 2f 0a 2f 2a 20 23 64 65  ION  1 */./* #de
0af0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
0b00: 5f 49 4e 4d 45 4d 4f 52 59 44 42 20 20 20 20 20  _INMEMORYDB     
0b10: 31 20 2a 2f 0a 2f 2a 20 23 64 65 66 69 6e 65 20  1 */./* #define 
0b20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
0b30: 55 4d 20 20 20 20 20 20 20 20 20 31 20 2a 2f 0a  UM         1 */.
0b40: 2f 2a 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  /* #define SQLIT
0b50: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
0b60: 46 55 4e 43 53 20 31 20 2a 2f 0a 2f 2a 20 23 64  FUNCS 1 */./* #d
0b70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
0b80: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
0b90: 41 43 4b 20 31 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ACK 1 */../*.** 
0ba0: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
0bb0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
0bc0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
0bd0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
0be0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
0bf0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
0c00: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
0c10: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
0c20: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
0c30: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
0c40: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
0c50: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
0c60: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
0c70: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
0c80: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
0c90: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
0ca0: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
0cb0: 65 66 20 49 4e 54 36 34 5f 54 59 50 45 0a 23 20  ef INT64_TYPE.# 
0cc0: 64 65 66 69 6e 65 20 49 4e 54 36 34 5f 54 59 50  define INT64_TYP
0cd0: 45 20 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 0a  E long long int.
0ce0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
0cf0: 49 4e 54 36 34 5f 54 59 50 45 0a 23 20 64 65 66  INT64_TYPE.# def
0d00: 69 6e 65 20 55 49 4e 54 36 34 5f 54 59 50 45 20  ine UINT64_TYPE 
0d10: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f  unsigned long lo
0d20: 6e 67 20 69 6e 74 0a 23 65 6e 64 69 66 0a 23 69  ng int.#endif.#i
0d30: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
0d40: 45 0a 23 20 64 65 66 69 6e 65 20 55 49 4e 54 33  E.# define UINT3
0d50: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
0d60: 69 6e 74 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  int.#endif.#ifnd
0d70: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
0d80: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
0d90: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
0da0: 72 74 20 69 6e 74 0a 23 65 6e 64 69 66 0a 23 69  rt int.#endif.#i
0db0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
0dc0: 0a 23 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  .# define UINT8_
0dd0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
0de0: 61 72 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  ar.#endif.#ifnde
0df0: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 64 65  f INT8_TYPE.# de
0e00: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
0e10: 69 67 6e 65 64 20 63 68 61 72 0a 23 65 6e 64 69  igned char.#endi
0e20: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 50 54 52  f.#ifndef INTPTR
0e30: 5f 54 59 50 45 0a 23 20 69 66 20 53 51 4c 49 54  _TYPE.# if SQLIT
0e40: 45 5f 50 54 52 5f 53 5a 3d 3d 34 0a 23 20 20 20  E_PTR_SZ==4.#   
0e50: 64 65 66 69 6e 65 20 49 4e 54 50 54 52 5f 54 59  define INTPTR_TY
0e60: 50 45 20 69 6e 74 0a 23 20 65 6c 73 65 0a 23 20  PE int.# else.# 
0e70: 20 20 64 65 66 69 6e 65 20 49 4e 54 50 54 52 5f    define INTPTR_
0e80: 54 59 50 45 20 6c 6f 6e 67 20 6c 6f 6e 67 0a 23  TYPE long long.#
0e90: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 74 79   endif.#endif.ty
0ea0: 70 65 64 65 66 20 49 4e 54 36 34 5f 54 59 50 45  pedef INT64_TYPE
0eb0: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 20   i64;           
0ec0: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
0ed0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
0ee0: 65 64 65 66 20 55 49 4e 54 36 34 5f 54 59 50 45  edef UINT64_TYPE
0ef0: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 20 20   u64;           
0f00: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
0f10: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
0f20: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
0f30: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
0f40: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
0f50: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
0f60: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
0f70: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
0f80: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
0f90: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
0fa0: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
0fb0: 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20  PE u8;          
0fc0: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73     /* 1-byte uns
0fd0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
0fe0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
0ff0: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
1000: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69      /* 1-byte si
1010: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
1020: 74 79 70 65 64 65 66 20 49 4e 54 50 54 52 5f 54  typedef INTPTR_T
1030: 59 50 45 20 70 74 72 3b 20 20 20 20 20 20 20 20  YPE ptr;        
1040: 20 20 20 2f 2a 20 42 69 67 20 65 6e 6f 75 67 68     /* Big enough
1050: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
1060: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e  er */.typedef un
1070: 73 69 67 6e 65 64 20 49 4e 54 50 54 52 5f 54 59  signed INTPTR_TY
1080: 50 45 20 75 70 74 72 3b 20 2f 2a 20 42 69 67 20  PE uptr; /* Big 
1090: 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61  enough to hold a
10a0: 20 70 6f 69 6e 74 65 72 20 2a 2f 0a 0a 2f 2a 0a   pointer */../*.
10b0: 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e  ** Defer sourcin
10c0: 67 20 76 64 62 65 2e 68 20 75 6e 74 69 6c 20 61  g vdbe.h until a
10d0: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 74 79  fter the "u8" ty
10e0: 70 65 64 65 66 20 69 73 20 64 65 66 69 6e 65 64  pedef is defined
10f0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76  ..*/.#include "v
1100: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
1110: 22 62 74 72 65 65 2e 68 22 0a 0a 2f 2a 0a 2a 2a  "btree.h"../*.**
1120: 20 4d 6f 73 74 20 43 20 63 6f 6d 70 69 6c 65 72   Most C compiler
1130: 73 20 74 68 65 73 65 20 64 61 79 73 20 72 65 63  s these days rec
1140: 6f 67 6e 69 7a 65 20 22 6c 6f 6e 67 20 64 6f 75  ognize "long dou
1150: 62 6c 65 22 2c 20 64 6f 6e 27 74 20 74 68 65 79  ble", don't they
1160: 3f 0a 2a 2a 20 4a 75 73 74 20 69 6e 20 63 61 73  ?.** Just in cas
1170: 65 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 6f  e we encounter o
1180: 6e 65 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ne that does not
1190: 2c 20 77 65 20 77 69 6c 6c 20 63 72 65 61 74 65  , we will create
11a0: 20 61 20 6d 61 63 72 6f 0a 2a 2a 20 66 6f 72 20   a macro.** for 
11b0: 6c 6f 6e 67 20 64 6f 75 62 6c 65 20 73 6f 20 74  long double so t
11c0: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 65 61  hat it can be ea
11d0: 73 69 6c 79 20 63 68 61 6e 67 65 64 20 74 6f 20  sily changed to 
11e0: 6a 75 73 74 20 22 64 6f 75 62 6c 65 22 2e 0a 2a  just "double"..*
11f0: 2f 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  /.#ifndef LONGDO
1200: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
1210: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
1220: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
1230: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  endif../*.** Thi
1240: 73 20 6d 61 63 72 6f 20 63 61 73 74 73 20 61 20  s macro casts a 
1250: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 69 6e  pointer to an in
1260: 74 65 67 65 72 2e 20 20 55 73 65 66 75 6c 20 66  teger.  Useful f
1270: 6f 72 20 64 6f 69 6e 67 0a 2a 2a 20 70 6f 69 6e  or doing.** poin
1280: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 2e 0a  ter arithmetic..
1290: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 64 64 72 28  */.#define Addr(
12a0: 58 29 20 20 28 28 75 70 74 72 29 58 29 0a 0a 2f  X)  ((uptr)X)../
12b0: 2a 0a 2a 2a 20 54 68 65 20 6d 61 78 69 6d 75 6d  *.** The maximum
12c0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
12d0: 20 6f 66 20 64 61 74 61 20 74 68 61 74 20 63 61   of data that ca
12e0: 6e 20 62 65 20 70 75 74 20 69 6e 74 6f 20 61 20  n be put into a 
12f0: 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1300: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e   a single table.
1310: 20 20 54 68 65 20 75 70 70 65 72 20 62 6f 75 6e    The upper boun
1320: 64 20 6f 6e 20 74 68 69 73 20 6c 69 6d 69 74 20  d on this limit 
1330: 69 73 20 31 36 37 37 37 32 31 35 0a 2a 2a 20 62  is 16777215.** b
1340: 79 74 65 73 20 28 6f 72 20 31 36 4d 42 2d 31 29  ytes (or 16MB-1)
1350: 2e 20 20 57 65 20 68 61 76 65 20 61 72 62 69 74  .  We have arbit
1360: 72 61 72 69 6c 79 20 73 65 74 20 74 68 65 20 6c  rarily set the l
1370: 69 6d 69 74 20 74 6f 20 6a 75 73 74 20 31 4d 42  imit to just 1MB
1380: 0a 2a 2a 20 68 65 72 65 20 62 65 63 61 75 73 65  .** here because
1390: 20 74 68 65 20 6f 76 65 72 66 6c 6f 77 20 70 61   the overflow pa
13a0: 67 65 20 63 68 61 69 6e 20 69 73 20 69 6e 65 66  ge chain is inef
13b0: 66 69 63 69 65 6e 74 20 66 6f 72 20 72 65 61 6c  ficient for real
13c0: 6c 79 20 62 69 67 0a 2a 2a 20 72 65 63 6f 72 64  ly big.** record
13d0: 73 20 61 6e 64 20 77 65 20 77 61 6e 74 20 74 6f  s and we want to
13e0: 20 64 69 73 63 6f 75 72 61 67 65 20 70 65 6f 70   discourage peop
13f0: 6c 65 20 66 72 6f 6d 20 74 68 69 6e 6b 69 6e 67  le from thinking
1400: 20 74 68 61 74 20 0a 2a 2a 20 6d 75 6c 74 69 2d   that .** multi-
1410: 6d 65 67 61 62 79 74 65 20 72 65 63 6f 72 64 73  megabyte records
1420: 20 61 72 65 20 4f 4b 2e 20 20 49 66 20 79 6f 75   are OK.  If you
1430: 72 20 6e 65 65 64 73 20 61 72 65 20 64 69 66 66  r needs are diff
1440: 65 72 65 6e 74 2c 20 79 6f 75 20 63 61 6e 0a 2a  erent, you can.*
1450: 2a 20 63 68 61 6e 67 65 20 74 68 69 73 20 64 65  * change this de
1460: 66 69 6e 65 20 61 6e 64 20 72 65 63 6f 6d 70 69  fine and recompi
1470: 6c 65 20 74 6f 20 69 6e 63 72 65 61 73 65 20 6f  le to increase o
1480: 72 20 64 65 63 72 65 61 73 65 20 74 68 65 20 72  r decrease the r
1490: 65 63 6f 72 64 0a 2a 2a 20 73 69 7a 65 2e 0a 2a  ecord.** size..*
14a0: 2a 0a 2a 2a 20 54 68 65 20 31 36 37 37 37 31 39  *.** The 1677719
14b0: 38 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73  8 is computed as
14c0: 20 66 6f 6c 6c 6f 77 73 3a 20 20 32 33 38 20 62   follows:  238 b
14d0: 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 20  ytes of payload 
14e0: 6f 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  on the.** origin
14f0: 61 6c 20 70 61 67 65 73 20 70 6c 75 73 20 31 36  al pages plus 16
1500: 34 34 38 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  448 overflow pag
1510: 65 73 20 65 61 63 68 20 68 6f 6c 64 69 6e 67 20  es each holding 
1520: 31 30 32 30 20 62 79 74 65 73 20 6f 66 0a 2a 2a  1020 bytes of.**
1530: 20 64 61 74 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e   data..*/.#defin
1540: 65 20 4d 41 58 5f 42 59 54 45 53 5f 50 45 52 5f  e MAX_BYTES_PER_
1550: 52 4f 57 20 20 31 30 34 38 35 37 36 0a 2f 2a 20  ROW  1048576./* 
1560: 23 64 65 66 69 6e 65 20 4d 41 58 5f 42 59 54 45  #define MAX_BYTE
1570: 53 5f 50 45 52 5f 52 4f 57 20 31 36 37 37 37 31  S_PER_ROW 167771
1580: 39 38 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  98 */../*.** If 
1590: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
15a0: 6e 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  n problems are f
15b0: 6f 75 6e 64 2c 20 72 65 63 6f 6d 70 69 6c 65 20  ound, recompile 
15c0: 77 69 74 68 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  with.**.**      
15d0: 2d 44 4d 45 4d 4f 52 59 5f 44 45 42 55 47 3d 31  -DMEMORY_DEBUG=1
15e0: 0a 2a 2a 0a 2a 2a 20 74 6f 20 65 6e 61 62 6c 65  .**.** to enable
15f0: 20 73 6f 6d 65 20 73 61 6e 69 74 79 20 63 68 65   some sanity che
1600: 63 6b 69 6e 67 20 6f 6e 20 6d 61 6c 6c 6f 63 28  cking on malloc(
1610: 29 20 61 6e 64 20 66 72 65 65 28 29 2e 20 20 54  ) and free().  T
1620: 6f 0a 2a 2a 20 63 68 65 63 6b 20 66 6f 72 20 6d  o.** check for m
1630: 65 6d 6f 72 79 20 6c 65 61 6b 73 2c 20 72 65 63  emory leaks, rec
1640: 6f 6d 70 69 6c 65 20 77 69 74 68 0a 2a 2a 0a 2a  ompile with.**.*
1650: 2a 20 20 20 20 20 20 2d 44 4d 45 4d 4f 52 59 5f  *      -DMEMORY_
1660: 44 45 42 55 47 3d 32 0a 2a 2a 0a 2a 2a 20 61 6e  DEBUG=2.**.** an
1670: 64 20 61 20 6c 69 6e 65 20 6f 66 20 74 65 78 74  d a line of text
1680: 20 77 69 6c 6c 20 62 65 20 77 72 69 74 74 65 6e   will be written
1690: 20 74 6f 20 73 74 61 6e 64 61 72 64 20 65 72 72   to standard err
16a0: 6f 72 20 66 6f 72 0a 2a 2a 20 65 61 63 68 20 6d  or for.** each m
16b0: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 66 72 65 65  alloc() and free
16c0: 28 29 2e 20 20 54 68 69 73 20 6f 75 74 70 75 74  ().  This output
16d0: 20 63 61 6e 20 62 65 20 61 6e 61 6c 79 7a 65 64   can be analyzed
16e0: 0a 2a 2a 20 62 79 20 61 6e 20 41 57 4b 20 73 63  .** by an AWK sc
16f0: 72 69 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e  ript to determin
1700: 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  e if there are a
1710: 6e 79 20 6c 65 61 6b 73 2e 0a 2a 2f 0a 23 69 66  ny leaks..*/.#if
1720: 64 65 66 20 4d 45 4d 4f 52 59 5f 44 45 42 55 47  def MEMORY_DEBUG
1730: 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1740: 4d 61 6c 6c 6f 63 28 58 29 20 20 20 20 73 71 6c  Malloc(X)    sql
1750: 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 58 2c 31 2c  ite3Malloc_(X,1,
1760: 5f 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f  __FILE__,__LINE_
1770: 5f 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  _).# define sqli
1780: 74 65 4d 61 6c 6c 6f 63 52 61 77 28 58 29 20 73  teMallocRaw(X) s
1790: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 58 2c  qlite3Malloc_(X,
17a0: 30 2c 5f 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e  0,__FILE__,__LIN
17b0: 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E__).# define sq
17c0: 6c 69 74 65 46 72 65 65 28 58 29 20 20 20 20 20  liteFree(X)     
17d0: 20 73 71 6c 69 74 65 33 46 72 65 65 5f 28 58 2c   sqlite3Free_(X,
17e0: 5f 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49 4e 45 5f  __FILE__,__LINE_
17f0: 5f 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  _).# define sqli
1800: 74 65 52 65 61 6c 6c 6f 63 28 58 2c 59 29 20 73  teRealloc(X,Y) s
1810: 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 5f 28 58  qlite3Realloc_(X
1820: 2c 59 2c 5f 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49  ,Y,__FILE__,__LI
1830: 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 73  NE__).# define s
1840: 71 6c 69 74 65 53 74 72 44 75 70 28 58 29 20 20  qliteStrDup(X)  
1850: 20 20 73 71 6c 69 74 65 33 53 74 72 44 75 70 5f    sqlite3StrDup_
1860: 28 58 2c 5f 5f 46 49 4c 45 5f 5f 2c 5f 5f 4c 49  (X,__FILE__,__LI
1870: 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 73  NE__).# define s
1880: 71 6c 69 74 65 53 74 72 4e 44 75 70 28 58 2c 59  qliteStrNDup(X,Y
1890: 29 20 73 71 6c 69 74 65 33 53 74 72 4e 44 75 70  ) sqlite3StrNDup
18a0: 5f 28 58 2c 59 2c 5f 5f 46 49 4c 45 5f 5f 2c 5f  _(X,Y,__FILE__,_
18b0: 5f 4c 49 4e 45 5f 5f 29 0a 20 20 76 6f 69 64 20  _LINE__).  void 
18c0: 73 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c 6f  sqlite3StrReallo
18d0: 63 28 63 68 61 72 2a 2a 29 3b 0a 23 65 6c 73 65  c(char**);.#else
18e0: 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
18f0: 33 52 65 61 6c 6c 6f 63 5f 28 58 2c 59 29 20 73  3Realloc_(X,Y) s
1900: 71 6c 69 74 65 52 65 61 6c 6c 6f 63 28 58 2c 59  qliteRealloc(X,Y
1910: 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1920: 65 33 53 74 72 52 65 61 6c 6c 6f 63 28 58 29 0a  e3StrRealloc(X).
1930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1940: 69 73 20 76 61 72 69 61 62 6c 65 20 67 65 74 73  is variable gets
1950: 20 73 65 74 20 69 66 20 6d 61 6c 6c 6f 63 28 29   set if malloc()
1960: 20 65 76 65 72 20 66 61 69 6c 73 2e 20 20 41 66   ever fails.  Af
1970: 74 65 72 20 69 74 20 67 65 74 73 20 73 65 74 2c  ter it gets set,
1980: 0a 2a 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c  .** the SQLite l
1990: 69 62 72 61 72 79 20 73 68 75 74 73 20 64 6f 77  ibrary shuts dow
19a0: 6e 20 70 65 72 6d 61 6e 65 6e 74 6c 79 2e 0a 2a  n permanently..*
19b0: 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  /.extern int sql
19c0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
19d0: 65 64 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  ed;../*.** The f
19e0: 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20  ollowing global 
19f0: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 75 73  variables are us
1a00: 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  ed for testing a
1a10: 6e 64 20 64 65 62 75 67 67 69 6e 67 0a 2a 2a 20  nd debugging.** 
1a20: 6f 6e 6c 79 2e 20 20 54 68 65 79 20 6f 6e 6c 79  only.  They only
1a30: 20 77 6f 72 6b 20 69 66 20 4d 45 4d 4f 52 59 5f   work if MEMORY_
1a40: 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
1a50: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 4d 45 4d 4f  ..*/.#ifdef MEMO
1a60: 52 59 5f 44 45 42 55 47 0a 65 78 74 65 72 6e 20  RY_DEBUG.extern 
1a70: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c  int sqlite3_nMal
1a80: 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  loc;       /* Nu
1a90: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 4d 61  mber of sqliteMa
1aa0: 6c 6c 6f 63 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  lloc() calls */.
1ab0: 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1ac0: 65 33 5f 6e 46 72 65 65 3b 20 20 20 20 20 20 20  e3_nFree;       
1ad0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1ae0: 71 6c 69 74 65 46 72 65 65 28 29 20 63 61 6c 6c  qliteFree() call
1af0: 73 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20  s */.extern int 
1b00: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
1b10: 61 69 6c 3b 20 20 20 2f 2a 20 46 61 69 6c 20 73  ail;   /* Fail s
1b20: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 66  qliteMalloc() af
1b30: 74 65 72 20 74 68 69 73 20 6d 61 6e 79 20 63 61  ter this many ca
1b40: 6c 6c 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  lls */.#endif../
1b50: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
1b60: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
1b70: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
1b80: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
1b90: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
1ba0: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
1bb0: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
1bc0: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
1bd0: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
1be0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
1bf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
1c00: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
1c10: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
1c20: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
1c30: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
1c40: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
1c50: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
1c60: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
1c70: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
1c80: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
1c90: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
1ca0: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
1cb0: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
1cc0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
1cd0: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
1ce0: 78 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  x?TEMP_MASTER_NA
1cf0: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
1d00: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
1d10: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
1d20: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
1d30: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
1d40: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
1d50: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
1d60: 69 7a 65 28 58 29 20 20 20 20 28 73 69 7a 65 6f  ize(X)    (sizeo
1d70: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
1d80: 29 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72  ))../*.** Forwar
1d90: 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  d references to 
1da0: 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79  structures.*/.ty
1db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
1dc0: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
1dd0: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
1de0: 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20   Table;.typedef 
1df0: 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64  struct Index Ind
1e00: 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ex;.typedef stru
1e10: 63 74 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 49  ct Instruction I
1e20: 6e 73 74 72 75 63 74 69 6f 6e 3b 0a 74 79 70 65  nstruction;.type
1e30: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20  def struct Expr 
1e40: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
1e50: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78  ruct ExprList Ex
1e60: 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  prList;.typedef 
1e70: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
1e80: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
1e90: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
1ea0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
1eb0: 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79  dList IdList;.ty
1ec0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
1ed0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
1ee0: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
1ef0: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
1f00: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
1f10: 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72   WhereLevel Wher
1f20: 65 4c 65 76 65 6c 3b 0a 74 79 70 65 64 65 66 20  eLevel;.typedef 
1f30: 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65  struct Select Se
1f40: 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74  lect;.typedef st
1f50: 72 75 63 74 20 41 67 67 45 78 70 72 20 41 67 67  ruct AggExpr Agg
1f60: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
1f70: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
1f80: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
1f90: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
1fa0: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
1fb0: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1fc0: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
1fd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
1fe0: 67 67 65 72 53 74 61 63 6b 20 54 72 69 67 67 65  ggerStack Trigge
1ff0: 72 53 74 61 63 6b 3b 0a 74 79 70 65 64 65 66 20  rStack;.typedef 
2000: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
2010: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
2020: 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20   Db Db;.typedef 
2030: 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
2040: 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a  xt AuthContext;.
2050: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
2060: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
2070: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  ;../*.** Each da
2080: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
2090: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
20a0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
20b0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
20c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
20d0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
20e0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
20f0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
2100: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
2110: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
2120: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
2130: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2140: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
2150: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
2160: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
2170: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
2180: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
2190: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
21a0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
21b0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
21c0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
21d0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
21e0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
21f0: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
2200: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
2210: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
2220: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
2230: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  e file */.  int 
2240: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
2250: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
2260: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
2270: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
2280: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
2290: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
22a0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
22b0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
22c0: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
22d0: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
22e0: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
22f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
2300: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
2310: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
2320: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
2330: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 61 46  ame */.  Hash aF
2340: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Key;          /*
2350: 20 46 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   Foreign keys in
2360: 64 65 78 65 64 20 62 79 20 74 6f 2d 74 61 62 6c  dexed by to-tabl
2370: 65 20 2a 2f 0a 20 20 75 38 20 69 6e 54 72 61 6e  e */.  u8 inTran
2380: 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  s;          /* 0
2390: 3a 20 6e 6f 74 20 77 72 69 74 61 62 6c 65 2e 20  : not writable. 
23a0: 20 31 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 2e   1: Transaction.
23b0: 20 20 32 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20    2: Checkpoint 
23c0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
23d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
23e0: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
23f0: 74 68 20 74 68 69 73 20 64 61 74 61 62 61 73 65  th this database
2400: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
2410: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 75  ;          /* Au
2420: 78 69 6c 69 61 72 79 20 64 61 74 61 2e 20 20 55  xiliary data.  U
2430: 73 75 61 6c 6c 79 20 4e 55 4c 4c 20 2a 2f 0a 20  sually NULL */. 
2440: 20 76 6f 69 64 20 28 2a 78 46 72 65 65 41 75 78   void (*xFreeAux
2450: 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 52 6f  )(void*);  /* Ro
2460: 75 74 69 6e 65 20 74 6f 20 66 72 65 65 20 70 41  utine to free pA
2470: 75 78 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ux */.};../*.** 
2480: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
2490: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
24a0: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
24b0: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
24c0: 44 62 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  Db.flags field..
24d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
24e0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
24f0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
2500: 5d 2e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ].flags&(P))==(P
2510: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
2520: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
2530: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
2540: 5d 2e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ].flags&(P))!=0)
2550: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
2560: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
2570: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 66 6c    (D)->aDb[I].fl
2580: 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
2590: 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79   DbClearProperty
25a0: 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61  (D,I,P)   (D)->a
25b0: 44 62 5b 49 5d 2e 66 6c 61 67 73 26 3d 7e 28 50  Db[I].flags&=~(P
25c0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
25d0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
25e0: 44 42 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  DB.flags field..
25f0: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 4c 6f 63  **.** The DB_Loc
2600: 6b 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ked flag is set 
2610: 77 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4f  when the first O
2620: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 20 6f 72  P_Transaction or
2630: 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 0a 2a   OP_Checkpoint.*
2640: 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6d 69 74  * opcode is emit
2650: 74 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  ted for a databa
2660: 73 65 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e  se.  This preven
2670: 74 73 20 6d 75 6c 74 69 70 6c 65 20 6f 63 63 75  ts multiple occu
2680: 72 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 6f  rances.** of tho
2690: 73 65 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 74  se opcodes for t
26a0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
26b0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 70 72 6f   in the same pro
26c0: 67 72 61 6d 2e 20 20 53 69 6d 69 6c 61 72 6c 79  gram.  Similarly
26d0: 2c 0a 2a 2a 20 74 68 65 20 44 42 5f 43 6f 6f 6b  ,.** the DB_Cook
26e0: 69 65 20 66 6c 61 67 20 69 73 20 73 65 74 20 77  ie flag is set w
26f0: 68 65 6e 20 74 68 65 20 4f 50 5f 56 65 72 69 66  hen the OP_Verif
2700: 79 43 6f 6f 6b 69 65 20 6f 70 63 6f 64 65 20 69  yCookie opcode i
2710: 73 20 65 6d 69 74 74 65 64 2c 0a 2a 2a 20 61 6e  s emitted,.** an
2720: 64 20 70 72 65 76 65 6e 74 73 20 64 75 70 6c 69  d prevents dupli
2730: 63 61 74 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  cate OP_VerifyCo
2740: 6f 6b 69 65 73 20 66 72 6f 6d 20 74 61 6b 69 6e  okies from takin
2750: 67 20 75 70 20 73 70 61 63 65 20 61 6e 64 20 73  g up space and s
2760: 6c 6f 77 69 6e 67 0a 2a 2a 20 64 6f 77 6e 20 65  lowing.** down e
2770: 78 65 63 75 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  xecution..**.** 
2780: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
2790: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
27a0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
27b0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
27c0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
27d0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
27e0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
27f0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
2800: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
2810: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
2820: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
2830: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
2840: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
2850: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
2860: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
2870: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
2880: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
2890: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
28a0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
28b0: 64 65 66 69 6e 65 20 44 42 5f 4c 6f 63 6b 65 64  define DB_Locked
28c0: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31            0x0001
28d0: 20 20 2f 2a 20 4f 50 5f 54 72 61 6e 73 61 63 74    /* OP_Transact
28e0: 69 6f 6e 20 6f 70 63 6f 64 65 20 68 61 73 20 62  ion opcode has b
28f0: 65 65 6e 20 65 6d 69 74 74 65 64 20 2a 2f 0a 23  een emitted */.#
2900: 64 65 66 69 6e 65 20 44 42 5f 43 6f 6f 6b 69 65  define DB_Cookie
2910: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 32            0x0002
2920: 20 20 2f 2a 20 4f 50 5f 56 65 72 69 66 79 43 6f    /* OP_VerifyCo
2930: 6f 6b 69 65 20 6f 70 63 6f 64 65 20 68 61 73 20  okie opcode has 
2940: 62 65 65 6e 20 65 6d 69 69 74 65 64 20 2a 2f 0a  been emiited */.
2950: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
2960: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
2970: 34 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  4  /* The schema
2980: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
2990: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
29a0: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
29b0: 78 30 30 30 38 20 20 2f 2a 20 53 6f 6d 65 20 76  x0008  /* Some v
29c0: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
29d0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
29e0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
29f0: 61 74 61 62 61 73 65 20 69 73 20 61 6e 20 69 6e  atabase is an in
2a00: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
2a10: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
2a20: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  e..**.** The sql
2a30: 69 74 65 2e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ite.file_format 
2a40: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 62  is initialized b
2a50: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  y the database f
2a60: 69 6c 65 0a 2a 2a 20 61 6e 64 20 68 65 6c 70 73  ile.** and helps
2a70: 20 64 65 74 65 72 6d 69 6e 65 73 20 68 6f 77 20   determines how 
2a80: 74 68 65 20 64 61 74 61 20 69 6e 20 74 68 65 20  the data in the 
2a90: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
2aa0: 0a 2a 2a 20 72 65 70 72 65 73 65 6e 74 65 64 2e  .** represented.
2ab0: 20 20 54 68 69 73 20 66 69 65 6c 64 20 61 6c 6c    This field all
2ac0: 6f 77 73 20 6e 65 77 65 72 20 76 65 72 73 69 6f  ows newer versio
2ad0: 6e 73 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ns of the librar
2ae0: 79 0a 2a 2a 20 74 6f 20 72 65 61 64 20 61 6e 64  y.** to read and
2af0: 20 77 72 69 74 65 20 6f 6c 64 65 72 20 64 61 74   write older dat
2b00: 61 62 61 73 65 73 2e 20 20 54 68 65 20 76 61 72  abases.  The var
2b10: 69 6f 75 73 20 66 69 6c 65 20 66 6f 72 6d 61 74  ious file format
2b20: 73 0a 2a 2a 20 61 72 65 20 61 73 20 66 6f 6c 6c  s.** are as foll
2b30: 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66  ows:.**.**     f
2b40: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20  ile_format==1   
2b50: 20 56 65 72 73 69 6f 6e 20 32 2e 31 2e 30 2e 0a   Version 2.1.0..
2b60: 2a 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d  **     file_form
2b70: 61 74 3d 3d 32 20 20 20 20 56 65 72 73 69 6f 6e  at==2    Version
2b80: 20 32 2e 32 2e 30 2e 20 41 64 64 20 73 75 70 70   2.2.0. Add supp
2b90: 6f 72 74 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ort for INTEGER 
2ba0: 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 2a 2a 20  PRIMARY KEY..** 
2bb0: 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d      file_format=
2bc0: 3d 33 20 20 20 20 56 65 72 73 69 6f 6e 20 32 2e  =3    Version 2.
2bd0: 36 2e 30 2e 20 46 69 78 20 65 6d 70 74 79 2d 73  6.0. Fix empty-s
2be0: 74 72 69 6e 67 20 69 6e 64 65 78 20 62 75 67 2e  tring index bug.
2bf0: 0a 2a 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72  .**     file_for
2c00: 6d 61 74 3d 3d 34 20 20 20 20 56 65 72 73 69 6f  mat==4    Versio
2c10: 6e 20 32 2e 37 2e 30 2e 20 41 64 64 20 73 75 70  n 2.7.0. Add sup
2c20: 70 6f 72 74 20 66 6f 72 20 73 65 70 61 72 61 74  port for separat
2c30: 65 20 6e 75 6d 65 72 69 63 20 61 6e 64 0a 2a 2a  e numeric and.**
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 20 20 20 20 20 20 20 74 65 78 74 20 64 61 74 61         text data
2c60: 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
2c70: 20 73 71 6c 69 74 65 2e 74 65 6d 70 5f 73 74 6f   sqlite.temp_sto
2c80: 72 65 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  re determines wh
2c90: 65 72 65 20 74 65 6d 70 6f 72 61 72 79 20 64 61  ere temporary da
2ca0: 74 61 62 61 73 65 20 66 69 6c 65 73 0a 2a 2a 20  tabase files.** 
2cb0: 61 72 65 20 73 74 6f 72 65 64 2e 20 20 49 66 20  are stored.  If 
2cc0: 31 2c 20 74 68 65 6e 20 61 20 66 69 6c 65 20 69  1, then a file i
2cd0: 73 20 63 72 65 61 74 65 64 20 74 6f 20 68 6f 6c  s created to hol
2ce0: 64 20 74 68 6f 73 65 20 74 61 62 6c 65 73 2e 20  d those tables. 
2cf0: 20 49 66 0a 2a 2a 20 32 2c 20 74 68 65 6e 20 74   If.** 2, then t
2d00: 68 65 79 20 61 72 65 20 68 65 6c 64 20 69 6e 20  hey are held in 
2d10: 6d 65 6d 6f 72 79 2e 20 20 30 20 6d 65 61 6e 73  memory.  0 means
2d20: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
2d30: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 74 68 65   value in.** the
2d40: 20 54 45 4d 50 5f 53 54 4f 52 45 20 6d 61 63 72   TEMP_STORE macr
2d50: 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  o..**.** The sql
2d60: 69 74 65 2e 6c 61 73 74 52 6f 77 69 64 20 72 65  ite.lastRowid re
2d70: 63 6f 72 64 73 20 74 68 65 20 6c 61 73 74 20 69  cords the last i
2d80: 6e 73 65 72 74 20 72 6f 77 69 64 20 67 65 6e 65  nsert rowid gene
2d90: 72 61 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  rated by an.** i
2da0: 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74 2e  nsert statement.
2db0: 20 20 49 6e 73 65 72 74 73 20 6f 6e 20 76 69 65    Inserts on vie
2dc0: 77 73 20 64 6f 20 6e 6f 74 20 61 66 66 65 63 74  ws do not affect
2dd0: 20 69 74 73 20 76 61 6c 75 65 2e 20 20 45 61 63   its value.  Eac
2de0: 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 68 61 73  h.** trigger has
2df0: 20 69 74 73 20 6f 77 6e 20 63 6f 6e 74 65 78 74   its own context
2e00: 2c 20 73 6f 20 74 68 61 74 20 6c 61 73 74 52 6f  , so that lastRo
2e10: 77 69 64 20 63 61 6e 20 62 65 20 75 70 64 61 74  wid can be updat
2e20: 65 64 20 69 6e 73 69 64 65 0a 2a 2a 20 74 72 69  ed inside.** tri
2e30: 67 67 65 72 73 20 61 73 20 75 73 75 61 6c 2e 20  ggers as usual. 
2e40: 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 76 61   The previous va
2e50: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
2e60: 6f 72 65 64 20 6f 6e 63 65 20 74 68 65 20 74 72  ored once the tr
2e70: 69 67 67 65 72 0a 2a 2a 20 65 78 69 74 73 2e 20  igger.** exits. 
2e80: 20 55 70 6f 6e 20 65 6e 74 65 72 69 6e 67 20 61   Upon entering a
2e90: 20 62 65 66 6f 72 65 20 6f 72 20 69 6e 73 74 65   before or inste
2ea0: 61 64 20 6f 66 20 74 72 69 67 67 65 72 2c 20 6c  ad of trigger, l
2eb0: 61 73 74 52 6f 77 69 64 20 69 73 20 6e 6f 0a 2a  astRowid is no.*
2ec0: 2a 20 6c 6f 6e 67 65 72 20 28 73 69 6e 63 65 20  * longer (since 
2ed0: 61 66 74 65 72 20 76 65 72 73 69 6f 6e 20 32 2e  after version 2.
2ee0: 38 2e 31 32 29 20 72 65 73 65 74 20 74 6f 20 2d  8.12) reset to -
2ef0: 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  1..**.** The sql
2f00: 69 74 65 2e 6e 43 68 61 6e 67 65 20 64 6f 65 73  ite.nChange does
2f10: 20 6e 6f 74 20 63 6f 75 6e 74 20 63 68 61 6e 67   not count chang
2f20: 65 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  es within trigge
2f30: 72 73 20 61 6e 64 20 6b 65 65 70 73 20 6e 6f 0a  rs and keeps no.
2f40: 2a 2a 20 63 6f 6e 74 65 78 74 2e 20 20 49 74 20  ** context.  It 
2f50: 69 73 20 72 65 73 65 74 20 61 74 20 73 74 61 72  is reset at star
2f60: 74 20 6f 66 20 73 71 6c 69 74 65 33 5f 65 78 65  t of sqlite3_exe
2f70: 63 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  c..** The sqlite
2f80: 2e 6c 73 43 68 61 6e 67 65 20 72 65 70 72 65 73  .lsChange repres
2f90: 65 6e 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  ents the number 
2fa0: 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  of changes made 
2fb0: 62 79 20 74 68 65 20 6c 61 73 74 0a 2a 2a 20 69  by the last.** i
2fc0: 6e 73 65 72 74 2c 20 75 70 64 61 74 65 2c 20 6f  nsert, update, o
2fd0: 72 20 64 65 6c 65 74 65 20 73 74 61 74 65 6d 65  r delete stateme
2fe0: 6e 74 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  nt.  It remains 
2ff0: 63 6f 6e 73 74 61 6e 74 20 74 68 72 6f 75 67 68  constant through
3000: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 65 6e 67 74  out the.** lengt
3010: 68 20 6f 66 20 61 20 73 74 61 74 65 6d 65 6e 74  h of a statement
3020: 20 61 6e 64 20 69 73 20 74 68 65 6e 20 75 70 64   and is then upd
3030: 61 74 65 64 20 62 79 20 4f 50 5f 53 65 74 43 6f  ated by OP_SetCo
3040: 75 6e 74 73 2e 20 20 49 74 20 6b 65 65 70 73 20  unts.  It keeps 
3050: 61 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 73 74 61  a.** context sta
3060: 63 6b 20 6a 75 73 74 20 6c 69 6b 65 20 6c 61 73  ck just like las
3070: 74 52 6f 77 69 64 20 73 6f 20 74 68 61 74 20 74  tRowid so that t
3080: 68 65 20 63 6f 75 6e 74 20 6f 66 20 63 68 61 6e  he count of chan
3090: 67 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ges.** within a 
30a0: 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 73  trigger is not s
30b0: 65 65 6e 20 6f 75 74 73 69 64 65 20 74 68 65 20  een outside the 
30c0: 74 72 69 67 67 65 72 2e 20 20 43 68 61 6e 67 65  trigger.  Change
30d0: 73 20 74 6f 20 76 69 65 77 73 20 64 6f 20 6e 6f  s to views do no
30e0: 74 0a 2a 2a 20 61 66 66 65 63 74 20 74 68 65 20  t.** affect the 
30f0: 76 61 6c 75 65 20 6f 66 20 6c 73 43 68 61 6e 67  value of lsChang
3100: 65 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  e..** The sqlite
3110: 2e 63 73 43 68 61 6e 67 65 20 6b 65 65 70 73 20  .csChange keeps 
3120: 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d  track of the num
3130: 62 65 72 20 6f 66 20 63 75 72 72 65 6e 74 20 63  ber of current c
3140: 68 61 6e 67 65 73 20 28 73 69 6e 63 65 0a 2a 2a  hanges (since.**
3150: 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d   the last statem
3160: 65 6e 74 29 20 61 6e 64 20 69 73 20 75 73 65 64  ent) and is used
3170: 20 74 6f 20 75 70 64 61 74 65 20 73 71 6c 69 74   to update sqlit
3180: 65 5f 6c 73 43 68 61 6e 67 65 2e 0a 2a 2f 0a 73  e_lsChange..*/.s
3190: 74 72 75 63 74 20 73 71 6c 69 74 65 20 7b 0a 20  truct sqlite {. 
31a0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
31d0: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
31e0: 6e 20 75 73 65 20 2a 2f 0a 20 20 44 62 20 2a 61  n use */.  Db *a
31f0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
3200: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
3210: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 44 62  backends */.  Db
3220: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
3230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
3240: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
3250: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
3260: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
3270: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
3280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
3290: 63 65 6c 6c 61 6e 6f 75 73 20 66 6c 61 67 73 2e  cellanous flags.
32a0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
32b0: 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  u8 file_format; 
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32d0: 20 57 68 61 74 20 66 69 6c 65 20 66 6f 72 6d 61   What file forma
32e0: 74 20 76 65 72 73 69 6f 6e 20 69 73 20 74 68 69  t version is thi
32f0: 73 20 64 61 74 61 62 61 73 65 3f 20 2a 2f 0a 20  s database? */. 
3300: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
3310: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
3320: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
3330: 20 61 74 20 73 79 6e 63 68 69 6e 67 20 64 61 74   at synching dat
3340: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75  a to disk */.  u
3350: 38 20 77 61 6e 74 5f 74 6f 5f 63 6c 6f 73 65 3b  8 want_to_close;
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3370: 43 6c 6f 73 65 20 61 66 74 65 72 20 61 6c 6c 20  Close after all 
3380: 56 44 42 45 73 20 61 72 65 20 64 65 61 6c 6c 6f  VDBEs are deallo
3390: 63 61 74 65 64 20 2a 2f 0a 20 20 75 38 20 74 65  cated */.  u8 te
33a0: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
33b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3d 66 69           /* 1=fi
33c0: 6c 65 2c 20 32 3d 6d 65 6d 6f 72 79 2c 20 30 3d  le, 2=memory, 0=
33d0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
33e0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ault */.  u8 onE
33f0: 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
3400: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
3410: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 61 6c 67 6f  lt conflict algo
3420: 72 69 74 68 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  rithm */.  int n
3430: 65 78 74 5f 63 6f 6f 6b 69 65 3b 20 20 20 20 20  ext_cookie;     
3440: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
3450: 20 76 61 6c 75 65 20 6f 66 20 61 44 62 5b 30 5d   value of aDb[0]
3460: 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 2a  .schema_cookie *
3470: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
3480: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
3490: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
34a0: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
34b0: 68 65 20 63 61 63 68 65 20 2a 2f 0a 20 20 69 6e  he cache */.  in
34c0: 74 20 6e 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t nTable;       
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
34e0: 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
34f0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
3500: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
3510: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
3520: 20 20 20 2f 2a 20 31 73 74 20 41 72 67 75 6d 65     /* 1st Argume
3530: 6e 74 20 74 6f 20 74 68 65 20 62 75 73 79 20 63  nt to the busy c
3540: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  allback */.  int
3550: 20 28 2a 78 42 75 73 79 43 61 6c 6c 62 61 63 6b   (*xBusyCallback
3560: 29 28 76 6f 69 64 20 2a 2c 63 6f 6e 73 74 20 63  )(void *,const c
3570: 68 61 72 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  har*,int);  /* T
3580: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
3590: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
35a0: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
35b0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
35c0: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
35d0: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
35e0: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
35f0: 63 6b 29 28 76 6f 69 64 2a 29 3b 2f 2a 20 49 6e  ck)(void*);/* In
3600: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
3610: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 48 61 73 68  ommit. */.  Hash
3620: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
3630: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
3640: 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20   functions that 
3650: 63 61 6e 20 62 65 20 69 6e 20 53 51 4c 20 65 78  can be in SQL ex
3660: 70 72 73 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  prs */.  i64 las
3670: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
3680: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
3690: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
36a0: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
36b0: 29 20 2a 2f 0a 20 20 69 36 34 20 70 72 69 6f 72  ) */.  i64 prior
36c0: 4e 65 77 52 6f 77 69 64 3b 20 20 20 20 20 20 20  NewRowid;       
36d0: 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 72 61 6e       /* Last ran
36e0: 64 6f 6d 6c 79 20 67 65 6e 65 72 61 74 65 64 20  domly generated 
36f0: 52 4f 57 49 44 20 2a 2f 0a 20 20 69 6e 74 20 6d  ROWID */.  int m
3700: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
3710: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
3720: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
3730: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
3740: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
3750: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
3760: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3770: 6f 66 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  of rows changed 
3780: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
3790: 20 69 6e 74 20 6c 73 43 68 61 6e 67 65 3b 20 20   int lsChange;  
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37b0: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
37c0: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 28 73   change count (s
37d0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
37e0: 6e 74 20 63 73 43 68 61 6e 67 65 3b 20 20 20 20  nt csChange;    
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3800: 43 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  Current statemen
3810: 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 28  t change count (
3820: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
3830: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
3840: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 20 2f  itInfo {       /
3850: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
3860: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
3870: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
3880: 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
38a0: 2a 20 57 68 65 6e 20 62 61 63 6b 20 69 73 20 62  * When back is b
38b0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
38c0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
38d0: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
38e0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
38f0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
3900: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
3910: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
3940: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
3950: 69 7a 69 6e 67 20 2a 2f 0a 20 20 7d 20 69 6e 69  izing */.  } ini
3960: 74 3b 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  t;.  struct Vdbe
3970: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
3980: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
3990: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
39a0: 68 69 6e 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20  hines */.  void 
39b0: 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c  (*xTrace)(void*,
39c0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20  const char*);   
39d0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
39e0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
39f0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a10: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
3a20: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
3a30: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
3a40: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
3a50: 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78  ZATION.  int (*x
3a60: 41 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  Auth)(void*,int,
3a70: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
3a80: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
3a90: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
3aa0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
3ad0: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
3ae0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
3af0: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
3b00: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
3b10: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
3b20: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
3b30: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
3b40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3b50: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
3b60: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
3b70: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
3b80: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
3b90: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
3ba0: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
3bb0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
3bc0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
3bd0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
3be0: 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f  ck */.  int nPro
3bf0: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
3c00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3c10: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
3c20: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
3c30: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 63 68   */.#endif..  ch
3c40: 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
3c60: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
3c70: 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d 38 20   message (UTF-8 
3c80: 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 7d 3b 0a 0a  encoded) */.};..
3c90: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
3ca0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
3cb0: 6c 69 74 65 2e 66 6c 61 67 73 20 61 6e 64 20 6f  lite.flags and o
3cc0: 72 20 44 62 2e 66 6c 61 67 73 20 66 69 65 6c 64  r Db.flags field
3cd0: 73 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 20 73 71 6c 69  s..**.** On sqli
3ce0: 74 65 2e 66 6c 61 67 73 2c 20 74 68 65 20 53 51  te.flags, the SQ
3cf0: 4c 49 54 45 5f 49 6e 54 72 61 6e 73 20 76 61 6c  LITE_InTrans val
3d00: 75 65 20 6d 65 61 6e 73 20 74 68 61 74 20 77 65  ue means that we
3d10: 20 68 61 76 65 0a 2a 2a 20 65 78 65 63 75 74 65   have.** execute
3d20: 64 20 61 20 42 45 47 49 4e 2e 20 20 4f 6e 20 44  d a BEGIN.  On D
3d30: 62 2e 66 6c 61 67 73 2c 20 53 51 4c 49 54 45 5f  b.flags, SQLITE_
3d40: 49 6e 54 72 61 6e 73 20 6d 65 61 6e 73 20 61 20  InTrans means a 
3d50: 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 74 72 61  statement.** tra
3d60: 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
3d70: 76 65 20 6f 6e 20 74 68 61 74 20 70 61 72 74 69  ve on that parti
3d80: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 66  cular database f
3d90: 69 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ile..*/.#define 
3da0: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
3db0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31        0x00000001
3dc0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61    /* True to tra
3dd0: 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f  ce VDBE executio
3de0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
3df0: 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 20  ITE_Initialized 
3e00: 20 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f     0x00000002  /
3e10: 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
3e20: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  tialization */.#
3e30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
3e40: 74 65 72 72 75 70 74 20 20 20 20 20 20 30 78 30  terrupt      0x0
3e50: 30 30 30 30 30 30 34 20 20 2f 2a 20 43 61 6e 63  0000004  /* Canc
3e60: 65 6c 20 63 75 72 72 65 6e 74 20 6f 70 65 72 61  el current opera
3e70: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
3e80: 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 20 20  SQLITE_InTrans  
3e90: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
3ea0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 20    /* True if in 
3eb0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  a transaction */
3ec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3ed0: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
3ee0: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 6e  x00000010  /* Un
3ef0: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
3f00: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
3f10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
3f20: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
3f30: 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f  00000020  /* Sho
3f40: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
3f50: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
3f60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3f70: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
3f80: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
3f90: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
3fa0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
3fb0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
3fc0: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
3fd0: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
3fe0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
3ff0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4020: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
4030: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
4040: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4070: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
4080: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
4090: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
40a0: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
40b0: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
40c0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
40d0: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
40e0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4110: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
4120: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
4130: 6e 65 20 53 51 4c 49 54 45 5f 52 65 70 6f 72 74  ne SQLITE_Report
4140: 54 79 70 65 73 20 20 20 20 30 78 30 30 30 30 30  Types    0x00000
4150: 32 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20  200  /* Include 
4160: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 64  information on d
4170: 61 74 61 74 79 70 65 73 20 2a 2f 0a 20 20 20 20  atatypes */.    
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41a0: 20 20 20 20 20 20 2f 2a 20 20 20 69 6e 20 34 74        /*   in 4t
41b0: 68 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 63 61  h argument of ca
41c0: 6c 6c 62 61 63 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  llback */../*.**
41d0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
41e0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
41f0: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
4200: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
4210: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
4220: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
4230: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
4240: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
4250: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
4260: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
4270: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4280: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
4290: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
42a0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
42b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
42c0: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
42d0: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
42e0: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
42f0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
4300: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
4310: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
4320: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
4330: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
4340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
4350: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
4360: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
4370: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
4380: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
4390: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
43a0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
43b0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
43c0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
43d0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
43e0: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
43f0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
4400: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
4410: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
4420: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
4430: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
4440: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
4450: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
4460: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
4470: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
4480: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
4490: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
44a0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 76 6f  t FuncDef {.  vo
44b0: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
44c0: 74 65 5f 66 75 6e 63 2a 2c 69 6e 74 2c 63 6f 6e  te_func*,int,con
44d0: 73 74 20 63 68 61 72 2a 2a 29 3b 20 20 2f 2a 20  st char**);  /* 
44e0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
44f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
4500: 65 70 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a  ep)(sqlite_func*
4510: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
4520: 2a 29 3b 20 20 2f 2a 20 41 67 67 72 65 67 61 74  *);  /* Aggregat
4530: 65 20 66 75 6e 63 74 69 6f 6e 20 73 74 65 70 20  e function step 
4540: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
4550: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 5f 66 75  alize)(sqlite_fu
4560: 6e 63 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  nc*);           
4570: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
4580: 63 74 69 6f 6e 20 66 69 6e 69 61 6c 69 7a 65 72  ction finializer
4590: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
45a0: 72 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  r nArg;         
45b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
45c0: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
45d0: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
45e0: 20 73 69 67 6e 65 64 20 63 68 61 72 20 64 61 74   signed char dat
45f0: 61 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 41 72  aType;     /* Ar
4600: 67 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65  g that determine
4610: 73 20 64 61 74 61 74 79 70 65 2e 20 20 2d 31 3d  s datatype.  -1=
4620: 4e 55 4d 45 52 49 43 2c 20 2a 2f 0a 20 20 20 20  NUMERIC, */.    
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4640: 20 20 20 20 20 20 20 20 2f 2a 20 2d 32 3d 54 45          /* -2=TE
4650: 58 54 2e 20 2d 33 3d 53 51 4c 49 54 45 5f 41 52  XT. -3=SQLITE_AR
4660: 47 53 20 2a 2f 0a 20 20 75 38 20 69 6e 63 6c 75  GS */.  u8 inclu
4670: 64 65 54 79 70 65 73 3b 20 20 20 20 20 20 20 20  deTypes;        
4680: 20 20 2f 2a 20 41 64 64 20 64 61 74 61 74 79 70    /* Add datatyp
4690: 65 73 20 74 6f 20 61 72 67 73 20 6f 66 20 78 46  es to args of xF
46a0: 75 6e 63 20 61 6e 64 20 78 53 74 65 70 20 2a 2f  unc and xStep */
46b0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
46c0: 74 61 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ta;          /* 
46d0: 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65  User data parame
46e0: 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  ter */.  FuncDef
46f0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
4700: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
4710: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
4720: 6d 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  me */.};../*.** 
4730: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
4740: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
4750: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
4760: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
4770: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
4780: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
4790: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
47a0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
47b0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
47c0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
47d0: 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *zDflt;     /*
47e0: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
47f0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
4800: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
4810: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
4820: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
4830: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
4840: 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
4850: 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
4860: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
4870: 20 2a 2f 0a 20 20 75 38 20 69 73 50 72 69 6d 4b   */.  u8 isPrimK
4880: 65 79 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ey;    /* True i
4890: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69 73  f this column is
48a0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49   part of the PRI
48b0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 2f 2f 20 20  MARY KEY */.//  
48c0: 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
48d0: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
48e0: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 53  tion of SQLITE_S
48f0: 4f 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 20  O_... values */ 
4900: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
4910: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
4920: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
4930: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
4940: 64 6f 74 74 65 64 4e 61 6d 65 3b 20 20 20 2f 2a  dottedName;   /*
4950: 20 54 72 75 65 20 69 66 20 7a 4e 61 6d 65 20 63   True if zName c
4960: 6f 6e 74 61 69 6e 73 20 61 20 22 2e 22 20 63 68  ontains a "." ch
4970: 61 72 61 63 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  aracter */.};../
4980: 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 77 65 64  *.** The allowed
4990: 20 73 6f 72 74 20 6f 72 64 65 72 73 2e 0a 2a 2a   sort orders..**
49a0: 0a 2a 2a 20 54 68 65 20 54 45 58 54 20 61 6e 64  .** The TEXT and
49b0: 20 4e 55 4d 20 76 61 6c 75 65 73 20 75 73 65 20   NUM values use 
49c0: 62 69 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  bits that do not
49d0: 20 6f 76 65 72 6c 61 70 20 77 69 74 68 20 44 45   overlap with DE
49e0: 53 43 20 61 6e 64 20 41 53 43 2e 0a 2a 2a 20 54  SC and ASC..** T
49f0: 68 61 74 20 77 61 79 20 74 68 65 20 74 77 6f 20  hat way the two 
4a00: 63 61 6e 20 62 65 20 63 6f 6d 62 69 6e 65 64 20  can be combined 
4a10: 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 6e 75  into a single nu
4a20: 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  mber..*/.#define
4a30: 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 4b 20 20   SQLITE_SO_UNK  
4a40: 20 20 20 20 20 30 20 20 2f 2a 20 55 73 65 20 74       0  /* Use t
4a50: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
4a60: 74 69 6e 67 20 74 79 70 65 2e 20 20 28 53 43 54  ting type.  (SCT
4a70: 5f 4e 55 4d 29 20 2a 2f 0a 23 64 65 66 69 6e 65  _NUM) */.#define
4a80: 20 53 51 4c 49 54 45 5f 53 4f 5f 54 45 58 54 20   SQLITE_SO_TEXT 
4a90: 20 20 20 20 20 32 20 20 2f 2a 20 53 6f 72 74 20       2  /* Sort 
4aa0: 75 73 69 6e 67 20 6d 65 6d 63 6d 70 28 29 20 2a  using memcmp() *
4ab0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4ac0: 5f 53 4f 5f 4e 55 4d 20 20 20 20 20 20 20 34 20  _SO_NUM       4 
4ad0: 20 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20 73   /* Sort using s
4ae0: 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 28 29 20  qlite3Compare() 
4af0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4b00: 45 5f 53 4f 5f 54 59 50 45 4d 41 53 4b 20 20 36  E_SO_TYPEMASK  6
4b10: 20 20 2f 2a 20 4d 61 73 6b 20 74 6f 20 65 78 74    /* Mask to ext
4b20: 72 61 63 74 20 74 68 65 20 63 6f 6c 6c 61 74 69  ract the collati
4b30: 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23  ng sequence */.#
4b40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
4b50: 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
4b60: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
4b70: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
4b80: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
4b90: 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
4ba0: 72 74 20 69 6e 20 64 65 73 63 65 6e 64 69 6e 67  rt in descending
4bb0: 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
4bc0: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 49 52 4d  e SQLITE_SO_DIRM
4bd0: 41 53 4b 20 20 20 31 20 20 2f 2a 20 4d 61 73 6b  ASK   1  /* Mask
4be0: 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20   to extract the 
4bf0: 73 6f 72 74 20 64 69 72 65 63 74 69 6f 6e 20 2a  sort direction *
4c00: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
4c10: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
4c20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4c30: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
4c40: 69 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  i'.#define SQLIT
4c50: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
4c60: 6e 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  n'.#define SQLIT
4c70: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
4c80: 74 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  t'.#define SQLIT
4c90: 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27  E_AFF_NONE     '
4ca0: 6f 27 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  o'.../*.** Each 
4cb0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70  SQL table is rep
4cc0: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
4cd0: 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ry by an instanc
4ce0: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  e of the.** foll
4cf0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
4d00: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61  .**.** Table.zNa
4d10: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
4d20: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f the table.  Th
4d30: 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72  e case of the or
4d40: 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45  iginal.** CREATE
4d50: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
4d60: 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20   is stored, but 
4d70: 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  case is not sign
4d80: 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63  ificant for.** c
4d90: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a  omparisons..**.*
4da0: 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20  * Table.nCol is 
4db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
4dc0: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
4dd0: 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c  ble.  Table.aCol
4de0: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
4df0: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
4e00: 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65  Column structure
4e10: 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  s, one for each 
4e20: 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  column..**.** If
4e30: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
4e40: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
4e50: 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c  Y KEY, then Tabl
4e60: 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69  e.iPKey is the i
4e70: 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63  ndex of.** the c
4e80: 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68  olumn that is th
4e90: 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77  at key.   Otherw
4ea0: 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  ise Table.iPKey 
4eb0: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
4ec0: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
4ed0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
4ee0: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
4ef0: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
4f00: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
4f10: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
4f20: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
4f30: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
4f40: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
4f50: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
4f60: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
4f70: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
4f80: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
4f90: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
4fa0: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
4fb0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
4fc0: 68 65 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65  he table.  Table
4fd0: 2e 68 61 73 50 72 69 6d 4b 65 79 20 69 73 20 74  .hasPrimKey is t
4fe0: 72 75 65 20 69 66 0a 2a 2a 20 74 68 65 20 74 61  rue if.** the ta
4ff0: 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d  ble has any PRIM
5000: 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52  ARY KEY, INTEGER
5010: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a   or otherwise..*
5020: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20  *.** Table.tnum 
5030: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
5040: 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20  er for the root 
5050: 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68  BTree page of th
5060: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a  e table in the.*
5070: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
5080: 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69    If Table.iDb i
5090: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
50a0: 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
50b0: 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20  e backend.** in 
50c0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30  sqlite.aDb[].  0
50d0: 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e   is for the main
50e0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20   database and 1 
50f0: 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  is for the file 
5100: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65  that.** holds te
5110: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
5120: 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20  nd indices.  If 
5130: 54 61 62 6c 65 2e 69 73 54 72 61 6e 73 69 65 6e  Table.isTransien
5140: 74 0a 2a 2a 20 69 73 20 74 72 75 65 2c 20 74 68  t.** is true, th
5150: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
5160: 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65  stored in a file
5170: 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74   that is automat
5180: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a  ically deleted.*
5190: 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  * when the VDBE 
51a0: 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61  cursor to the ta
51b0: 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20  ble is closed.  
51c0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62  In this case Tab
51d0: 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65  le.tnum .** refe
51e0: 72 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  rs VDBE cursor n
51f0: 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73  umber that holds
5200: 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c   the table open,
5210: 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74   not to the root
5220: 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  .** page number.
5230: 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c    Transient tabl
5240: 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68  es are used to h
5250: 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20  old the results 
5260: 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72  of a.** sub-quer
5270: 79 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69  y that appears i
5280: 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c  nstead of a real
5290: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74   table name in t
52a0: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a  he FROM clause .
52b0: 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ** of a SELECT s
52c0: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
52d0: 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
52e0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
52f0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
5300: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  ble */.  int nCo
5310: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  l;        /* Num
5320: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
5330: 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
5340: 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
5350: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
5360: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
5370: 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 50 4b  umn */.  int iPK
5380: 65 79 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ey;       /* If 
5390: 6e 6f 74 20 6c 65 73 73 20 74 68 65 6e 20 30 2c  not less then 0,
53a0: 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
53b0: 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20   as the primary 
53c0: 6b 65 79 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  key */.  Index *
53d0: 70 49 6e 64 65 78 3b 20 20 20 2f 2a 20 4c 69 73  pIndex;   /* Lis
53e0: 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
53f0: 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
5400: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
5410: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
5420: 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69  ree node for thi
5430: 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74  s table (see not
5440: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 53 65  e above) */.  Se
5450: 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 2f  lect *pSelect; /
5460: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
5470: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
5480: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
5490: 65 77 2e 20 2a 2f 0a 20 20 75 38 20 72 65 61 64  ew. */.  u8 read
54a0: 4f 6e 6c 79 3b 20 20 20 20 20 2f 2a 20 54 72 75  Only;     /* Tru
54b0: 65 20 69 66 20 74 68 69 73 20 74 61 62 6c 65 20  e if this table 
54c0: 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 77 72  should not be wr
54d0: 69 74 74 65 6e 20 62 79 20 74 68 65 20 75 73 65  itten by the use
54e0: 72 20 2a 2f 0a 20 20 75 38 20 69 44 62 3b 20 20  r */.  u8 iDb;  
54f0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
5500: 20 69 6e 74 6f 20 73 71 6c 69 74 65 2e 61 44 62   into sqlite.aDb
5510: 5b 5d 20 6f 66 20 74 68 65 20 62 61 63 6b 65 6e  [] of the backen
5520: 64 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  d for this table
5530: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
5540: 69 65 6e 74 3b 20 20 2f 2a 20 54 72 75 65 20 69  ient;  /* True i
5550: 66 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  f automatically 
5560: 64 65 6c 65 74 65 64 20 77 68 65 6e 20 56 44 42  deleted when VDB
5570: 45 20 66 69 6e 69 73 68 65 73 20 2a 2f 0a 20 20  E finishes */.  
5580: 75 38 20 68 61 73 50 72 69 6d 4b 65 79 3b 20 20  u8 hasPrimKey;  
5590: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
55a0: 65 20 65 78 69 73 74 73 20 61 20 70 72 69 6d 61  e exists a prima
55b0: 72 79 20 6b 65 79 20 2a 2f 0a 20 20 75 38 20 6b  ry key */.  u8 k
55c0: 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 2f 2a 20  eyConf;      /* 
55d0: 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
55e0: 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
55f0: 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
5600: 65 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ey */.  Trigger 
5610: 2a 70 54 72 69 67 67 65 72 3b 20 2f 2a 20 4c 69  *pTrigger; /* Li
5620: 73 74 20 6f 66 20 53 51 4c 20 74 72 69 67 67 65  st of SQL trigge
5630: 72 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  rs on this table
5640: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
5650: 79 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  y;       /* Link
5660: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
5670: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
5680: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
5690: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
56a0: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
56b0: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
56c0: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
56d0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
56e0: 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
56f0: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
5700: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
5710: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
5720: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
5730: 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
5740: 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
5750: 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
5760: 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
5770: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
5780: 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
5790: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
57a0: 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
57b0: 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
57c0: 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
57d0: 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
57e0: 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
57f0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
5800: 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
5810: 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
5820: 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
5830: 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
5840: 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
5850: 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
5860: 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
5870: 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
5880: 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
5890: 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
58a0: 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
58b0: 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
58c0: 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
58d0: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
58e0: 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20 45 61   "ex2"..**.** Ea
58f0: 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
5900: 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
5910: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
5920: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5930: 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
5940: 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
5950: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
5960: 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
5970: 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
5980: 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
5990: 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
59a0: 68 65 20 65 78 69 73 74 61 6e 63 65 20 6f 66 20  he existance of 
59b0: 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
59c0: 6e 6f 74 20 63 68 65 63 6b 65 64 0a 2a 2a 20 75  not checked.** u
59d0: 6e 74 69 6c 20 61 6e 20 61 74 74 65 6d 70 74 20  ntil an attempt 
59e0: 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
59f0: 74 20 64 61 74 61 20 69 6e 74 6f 20 74 68 65 20  t data into the 
5a00: 66 72 6f 6d 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  from-table..**.*
5a10: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 61 46 4b  * The sqlite.aFK
5a20: 65 79 20 68 61 73 68 20 74 61 62 6c 65 20 73 74  ey hash table st
5a30: 6f 72 65 73 20 70 6f 69 6e 74 65 72 73 20 74 6f  ores pointers to
5a40: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 0a   this structure.
5a50: 2a 2a 20 67 69 76 65 6e 20 74 68 65 20 6e 61 6d  ** given the nam
5a60: 65 20 6f 66 20 61 20 74 6f 2d 74 61 62 6c 65 2e  e of a to-table.
5a70: 20 20 46 6f 72 20 65 61 63 68 20 74 6f 2d 74 61    For each to-ta
5a80: 62 6c 65 2c 20 61 6c 6c 20 66 6f 72 65 69 67 6e  ble, all foreign
5a90: 20 6b 65 79 73 0a 2a 2a 20 61 73 73 6f 63 69 61   keys.** associa
5aa0: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
5ab0: 62 6c 65 20 61 72 65 20 6f 6e 20 61 20 6c 69 6e  ble are on a lin
5ac0: 6b 65 64 20 6c 69 73 74 20 75 73 69 6e 67 20 74  ked list using t
5ad0: 68 65 20 46 4b 65 79 2e 70 4e 65 78 74 54 6f 0a  he FKey.pNextTo.
5ae0: 2a 2a 20 66 69 65 6c 64 2e 0a 2a 2f 0a 73 74 72  ** field..*/.str
5af0: 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
5b00: 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
5b10: 2a 20 54 68 65 20 74 61 62 6c 65 20 74 68 61 74  * The table that
5b20: 20 63 6f 6e 73 74 61 69 6e 73 20 74 68 65 20 52   constains the R
5b30: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
5b40: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
5b50: 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
5b60: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70  foreign key in p
5b70: 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
5b80: 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
5b90: 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
5ba0: 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
5bb0: 20 74 6f 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70   to */.  FKey *p
5bc0: 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
5bd0: 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 74  xt foreign key t
5be0: 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 7a 54  hat points to zT
5bf0: 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
5c00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
5c10: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
5c20: 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 73   this key */.  s
5c30: 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
5c40: 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
5c50: 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
5c60: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
5c70: 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
5c80: 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  om;         /* I
5c90: 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
5ca0: 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
5cb0: 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
5cc0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
5cd0: 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
5ce0: 30 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  0 use PRIMARY KE
5cf0: 59 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 20  Y */.  } *aCol; 
5d00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
5d10: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
5d20: 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20  f nCol column s 
5d30: 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
5d40: 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ed;    /* True i
5d50: 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
5d60: 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
5d70: 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
5d80: 0a 20 20 75 38 20 75 70 64 61 74 65 43 6f 6e 66  .  u8 updateConf
5d90: 3b 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 72  ;    /* How to r
5da0: 65 73 6f 6c 76 65 20 63 6f 6e 66 6c 69 63 74 73  esolve conflicts
5db0: 20 74 68 61 74 20 6f 63 63 75 72 20 6f 6e 20 55   that occur on U
5dc0: 50 44 41 54 45 20 2a 2f 0a 20 20 75 38 20 64 65  PDATE */.  u8 de
5dd0: 6c 65 74 65 43 6f 6e 66 3b 20 20 20 20 2f 2a 20  leteConf;    /* 
5de0: 48 6f 77 20 74 6f 20 72 65 73 6f 6c 76 65 20 63  How to resolve c
5df0: 6f 6e 66 6c 69 63 74 73 20 74 68 61 74 20 6f 63  onflicts that oc
5e00: 63 75 72 20 6f 6e 20 44 45 4c 45 54 45 20 2a 2f  cur on DELETE */
5e10: 0a 20 20 75 38 20 69 6e 73 65 72 74 43 6f 6e 66  .  u8 insertConf
5e20: 3b 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 72  ;    /* How to r
5e30: 65 73 6f 6c 76 65 20 63 6f 6e 66 6c 69 63 74 73  esolve conflicts
5e40: 20 74 68 61 74 20 6f 63 63 75 72 20 6f 6e 20 49   that occur on I
5e50: 4e 53 45 52 54 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  NSERT */.};../*.
5e60: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
5e70: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
5e80: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
5e90: 65 20 61 20 63 6f 6e 74 72 61 69 6e 74 0a 2a 2a  e a contraint.**
5ea0: 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
5eb0: 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
5ec0: 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
5ed0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
5ee0: 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
5ef0: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
5f00: 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
5f10: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
5f20: 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
5f30: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
5f40: 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
5f50: 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
5f60: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
5f70: 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
5f80: 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
5f90: 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
5fa0: 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
5fb0: 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
5fc0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
5fd0: 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
5fe0: 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
5ff0: 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
6000: 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
6010: 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
6020: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
6030: 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
6040: 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
6050: 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
6060: 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
6070: 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
6080: 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
6090: 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
60a0: 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
60b0: 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
60c0: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
60d0: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
60e0: 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
60f0: 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
6100: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
6110: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
6120: 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
6130: 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
6140: 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
6150: 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
6160: 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
6170: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
6180: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
6190: 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
61a0: 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
61b0: 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
61c0: 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
61d0: 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
61e0: 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
61f0: 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
6200: 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
6210: 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
6220: 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
6230: 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
6240: 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
6250: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
6260: 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
6270: 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
6280: 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
6290: 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
62a0: 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
62b0: 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
62c0: 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
62d0: 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
62e0: 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
62f0: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
6300: 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
6310: 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
6320: 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
6330: 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
6340: 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
6350: 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
6360: 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68  n key..** .** Th
6370: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
6380: 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
6390: 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
63a0: 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
63b0: 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
63c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
63d0: 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
63e0: 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
63f0: 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
6400: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
6410: 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
6420: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
6430: 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
6440: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
6450: 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
6460: 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
6470: 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
6480: 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
6490: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
64a0: 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
64b0: 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
64c0: 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
64d0: 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
64e0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
64f0: 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
6500: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
6510: 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
6520: 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
6530: 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
6540: 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
6550: 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
6560: 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
6570: 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
6580: 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
6590: 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
65a0: 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
65b0: 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
65c0: 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
65d0: 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
65e0: 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
65f0: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
6600: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
6610: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
6620: 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
6630: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
6640: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
6650: 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
6660: 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
6670: 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
6680: 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
6690: 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
66a0: 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20  ault  99  /* Do 
66b0: 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
66c0: 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
66d0: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
66e0: 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
66f0: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
6700: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
6710: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
6720: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
6730: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
6740: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
6750: 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
6760: 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
6770: 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
6780: 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
6790: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
67a0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
67b0: 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
67c0: 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
67d0: 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
67e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
67f0: 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
6800: 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
6810: 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
6820: 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
6830: 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
6840: 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
6850: 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
6860: 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
6870: 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
6880: 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
6890: 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
68a0: 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
68b0: 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
68c0: 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
68d0: 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
68e0: 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
68f0: 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
6900: 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
6910: 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
6920: 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
6930: 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
6940: 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20  e the .** first 
6950: 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
6960: 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
6970: 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
6980: 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
6990: 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
69a0: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
69b0: 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
69c0: 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
69d0: 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
69e0: 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
69f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
6a00: 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
6a10: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
6a20: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
6a30: 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
6a40: 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
6a50: 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
6a60: 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
6a70: 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
6a80: 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
6a90: 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
6aa0: 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
6ab0: 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
6ac0: 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
6ad0: 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
6ae0: 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
6af0: 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
6b00: 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
6b10: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a  t resolution .**
6b20: 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d   algorithm to em
6b30: 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e  ploy whenever an
6b40: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
6b50: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e   to insert a non
6b60: 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65  -unique.** eleme
6b70: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  nt..*/.struct In
6b80: 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
6b90: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
6ba0: 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
6bb0: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  /.  int nColumn;
6bc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6bd0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
6be0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
6bf0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
6c00: 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  nt *aiColumn;   
6c10: 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
6c20: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
6c30: 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
6c40: 20 30 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70   0 */.  Table *p
6c50: 54 61 62 6c 65 3b 20 20 20 2f 2a 20 54 68 65 20  Table;   /* The 
6c60: 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
6c70: 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 69 6e 74  indexed */.  int
6c80: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 2f 2a   tnum;        /*
6c90: 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
6ca0: 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
6cb0: 64 65 78 20 69 6e 20 64 61 74 61 62 61 73 65 20  dex in database 
6cc0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  file */.  u8 onE
6cd0: 72 72 6f 72 3b 20 20 20 20 20 20 2f 2a 20 4f 45  rror;      /* OE
6ce0: 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
6cf0: 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
6d00: 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
6d10: 38 20 61 75 74 6f 49 6e 64 65 78 3b 20 20 20 20  8 autoIndex;    
6d20: 2f 2a 20 54 72 75 65 20 69 66 20 69 73 20 61 75  /* True if is au
6d30: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
6d40: 74 65 64 20 28 65 78 3a 20 62 79 20 55 4e 49 51  ted (ex: by UNIQ
6d50: 55 45 29 20 2a 2f 0a 20 20 75 38 20 69 44 62 3b  UE) */.  u8 iDb;
6d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
6d70: 65 78 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ex in sqlite.aDb
6d80: 5b 5d 20 6f 66 20 77 68 65 72 65 20 74 68 69 73  [] of where this
6d90: 20 69 6e 64 65 78 20 69 73 20 73 74 6f 72 65 64   index is stored
6da0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
6db0: 41 66 66 3b 20 20 20 2f 2a 20 53 74 72 69 6e 67  Aff;   /* String
6dc0: 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
6dd0: 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
6de0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
6df0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 54   *pNext;    /* T
6e00: 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
6e10: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
6e20: 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
6e30: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
6e40: 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
6e50: 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
6e60: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
6e70: 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
6e80: 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
6e90: 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
6ea0: 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
6eb0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
6ec0: 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
6ed0: 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
6ee0: 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
6ef0: 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
6f00: 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
6f10: 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
6f20: 6b 65 20 61 6e 79 20 61 73 73 75 70 74 69 6f 6e  ke any assuption
6f30: 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
6f40: 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
6f50: 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
6f60: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
6f70: 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
6f80: 20 2a 7a 3b 20 20 20 20 20 20 2f 2a 20 54 65 78   *z;      /* Tex
6f90: 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
6fa0: 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
6fb0: 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
6fc0: 6e 65 64 20 64 79 6e 20 20 3a 20 31 3b 20 20 2f  ned dyn  : 1;  /
6fd0: 2a 20 54 72 75 65 20 66 6f 72 20 6d 61 6c 6c 6f  * True for mallo
6fe0: 63 65 64 20 6d 65 6d 6f 72 79 2c 20 66 61 6c 73  ced memory, fals
6ff0: 65 20 66 6f 72 20 73 74 61 74 69 63 20 2a 2f 0a  e for static */.
7000: 20 20 75 6e 73 69 67 6e 65 64 20 6e 20 20 20 20    unsigned n    
7010: 3a 20 33 31 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  : 31; /* Number 
7020: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
7030: 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
7040: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  ;../*.** Each no
7050: 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
7060: 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
7070: 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
7080: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
7090: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
70a0: 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
70b0: 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 69 6e 74  opcode.  The int
70c0: 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
70d0: 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
70e0: 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
70f0: 20 68 65 72 65 2e 20 20 46 6f 72 20 65 78 61 6d   here.  For exam
7100: 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
7110: 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
7120: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
7130: 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
7140: 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
7150: 72 61 74 6f 72 2e 20 20 54 68 69 73 20 73 61 6d  rator.  This sam
7160: 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
7170: 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
7180: 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
7190: 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
71a0: 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
71b0: 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
71c0: 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
71d0: 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
71e0: 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 73  Expr.pLeft are s
71f0: 75 62 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  ubexpressions.  
7200: 45 78 70 72 2e 70 4c 69 73 74 20 69 73 20 61 20  Expr.pList is a 
7210: 6c 69 73 74 0a 2a 2a 20 6f 66 20 61 72 67 75 6d  list.** of argum
7220: 65 6e 74 20 69 66 20 74 68 65 20 65 78 70 72 65  ent if the expre
7230: 73 73 69 6f 6e 20 69 73 20 61 20 66 75 6e 63 74  ssion is a funct
7240: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
7250: 74 6f 6b 65 6e 20 69 73 20 74 68 65 20 6f 70 65  token is the ope
7260: 72 61 74 6f 72 20 74 6f 6b 65 6e 20 66 6f 72 20  rator token for 
7270: 74 68 69 73 20 6e 6f 64 65 2e 20 20 46 6f 72 20  this node.  For 
7280: 73 6f 6d 65 20 65 78 70 72 65 73 73 69 6f 6e 73  some expressions
7290: 0a 2a 2a 20 74 68 61 74 20 68 61 76 65 20 73 75  .** that have su
72a0: 62 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78  bexpressions, Ex
72b0: 70 72 2e 74 6f 6b 65 6e 20 63 61 6e 20 62 65 20  pr.token can be 
72c0: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
72d0: 74 20 74 68 61 74 20 67 61 76 65 0a 2a 2a 20 72  t that gave.** r
72e0: 69 73 65 20 74 6f 20 74 68 65 20 45 78 70 72 2e  ise to the Expr.
72f0: 20 20 49 6e 20 74 68 65 20 6c 61 74 74 65 72 20    In the latter 
7300: 63 61 73 65 2c 20 74 68 65 20 74 6f 6b 65 6e 20  case, the token 
7310: 69 73 20 6d 61 72 6b 65 64 20 61 73 20 62 65 69  is marked as bei
7320: 6e 67 0a 2a 2a 20 61 20 63 6f 6d 70 6f 75 6e 64  ng.** a compound
7330: 20 74 6f 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 41 6e   token..**.** An
7340: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
7350: 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
7360: 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
7370: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
7380: 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
7390: 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
73a0: 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
73b0: 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
73c0: 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
73d0: 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
73e0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
73f0: 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
7400: 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
7410: 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
7420: 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
7430: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
7440: 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
7450: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
7460: 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
7470: 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
7480: 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
7490: 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
74a0: 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
74b0: 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
74c0: 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
74d0: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
74e0: 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
74f0: 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
7500: 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
7510: 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
7520: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
7530: 65 73 73 69 6f 6e 20 69 73 20 61 20 66 75 6e 63  ession is a func
7540: 74 69 6f 6e 2c 20 74 68 65 20 45 78 70 72 2e 69  tion, the Expr.i
7550: 54 61 62 6c 65 20 69 73 20 61 6e 20 69 6e 74 65  Table is an inte
7560: 67 65 72 20 63 6f 64 65 0a 2a 2a 20 72 65 70 72  ger code.** repr
7570: 65 73 65 6e 74 69 6e 67 20 77 68 69 63 68 20 66  esenting which f
7580: 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  unction.  If the
7590: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
75a0: 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
75b0: 6c 65 0a 2a 2a 20 6d 61 72 6b 65 72 20 28 61 20  le.** marker (a 
75c0: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 63 68  question mark ch
75d0: 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
75e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
75f0: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 45 78 70   then the.** Exp
7600: 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
7610: 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
7620: 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
7630: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 45 78 70  e..**.** The Exp
7640: 72 2e 70 53 65 6c 65 63 74 20 66 69 65 6c 64 20  r.pSelect field 
7650: 70 6f 69 6e 74 73 20 74 6f 20 61 20 53 45 4c 45  points to a SELE
7660: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
7670: 68 65 20 53 45 4c 45 43 54 20 6d 69 67 68 74 0a  he SELECT might.
7680: 2a 2a 20 62 65 20 74 68 65 20 72 69 67 68 74 20  ** be the right 
7690: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
76a0: 20 6f 70 65 72 61 74 6f 72 2e 20 20 4f 72 2c 20   operator.  Or, 
76b0: 69 66 20 61 20 73 63 61 6c 61 72 20 53 45 4c 45  if a scalar SELE
76c0: 43 54 20 61 70 70 65 61 72 73 0a 2a 2a 20 69 6e  CT appears.** in
76d0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
76e0: 68 65 20 6f 70 63 6f 64 65 20 69 73 20 54 4b 5f  he opcode is TK_
76f0: 53 45 4c 45 43 54 20 61 6e 64 20 45 78 70 72 2e  SELECT and Expr.
7700: 70 53 65 6c 65 63 74 20 69 73 20 74 68 65 20 6f  pSelect is the o
7710: 6e 6c 79 0a 2a 2a 20 6f 70 65 72 61 6e 64 2e 0a  nly.** operand..
7720: 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
7730: 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
7740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
7750: 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
7760: 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
7770: 0a 20 20 75 38 20 64 61 74 61 54 79 70 65 3b 20  .  u8 dataType; 
7780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 69 74            /* Eit
7790: 68 65 72 20 53 51 4c 49 54 45 5f 53 4f 5f 54 45  her SQLITE_SO_TE
77a0: 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 53 4f 5f  XT or SQLITE_SO_
77b0: 4e 55 4d 20 2a 2f 0a 20 20 75 38 20 69 44 62 3b  NUM */.  u8 iDb;
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77d0: 2f 2a 20 44 61 74 61 62 61 73 65 20 72 65 66 65  /* Database refe
77e0: 72 65 6e 63 65 64 20 62 79 20 74 68 69 73 20 65  renced by this e
77f0: 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 75  xpression */.  u
7800: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
7810: 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
7820: 20 66 6c 61 67 73 2e 20 20 53 65 65 20 62 65 6c   flags.  See bel
7830: 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  ow */.  Expr *pL
7840: 65 66 74 2c 20 2a 70 52 69 67 68 74 3b 20 20 2f  eft, *pRight;  /
7850: 2a 20 4c 65 66 74 20 61 6e 64 20 72 69 67 68 74  * Left and right
7860: 20 73 75 62 6e 6f 64 65 73 20 2a 2f 0a 20 20 45   subnodes */.  E
7870: 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
7880: 20 20 20 20 20 20 2f 2a 20 41 20 6c 69 73 74 20        /* A list 
7890: 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 75  of expressions u
78a0: 73 65 64 20 61 73 20 66 75 6e 63 74 69 6f 6e 20  sed as function 
78b0: 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 20 20 20  arguments.      
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 20 20 2a 2a 20 6f 72 20 69 6e 20 22 3c 65 78     ** or in "<ex
78e0: 70 72 3e 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69  pr> IN (<expr-li
78f0: 73 74 29 22 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  st)" */.  Token 
7900: 74 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  token;          
7910: 20 2f 2a 20 41 6e 20 6f 70 65 72 61 6e 64 20 74   /* An operand t
7920: 6f 6b 65 6e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  oken */.  Token 
7930: 73 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  span;           
7940: 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
7950: 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
7960: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61  ion */.  int iTa
7970: 62 6c 65 2c 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  ble, iColumn;   
7980: 2f 2a 20 57 68 65 6e 20 6f 70 3d 3d 54 4b 5f 43  /* When op==TK_C
7990: 4f 4c 55 4d 4e 2c 20 74 68 65 6e 20 74 68 69 73  OLUMN, then this
79a0: 20 65 78 70 72 20 6e 6f 64 65 20 6d 65 61 6e 73   expr node means
79b0: 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20 20   the.           
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
79d0: 20 69 43 6f 6c 75 6d 6e 2d 74 68 20 66 69 65 6c   iColumn-th fiel
79e0: 64 20 6f 66 20 74 68 65 20 69 54 61 62 6c 65 2d  d of the iTable-
79f0: 74 68 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 69  th table. */.  i
7a00: 6e 74 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  nt iAgg;        
7a10: 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 6f 70        /* When op
7a20: 3d 3d 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  ==TK_COLUMN and 
7a30: 70 50 61 72 73 65 2d 3e 75 73 65 41 67 67 3d 3d  pParse->useAgg==
7a40: 54 52 55 45 2c 20 70 75 6c 6c 0a 20 20 20 20 20  TRUE, pull.     
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a60: 20 20 20 20 2a 2a 20 72 65 73 75 6c 74 20 66 72      ** result fr
7a70: 6f 6d 20 74 68 65 20 69 41 67 67 2d 74 68 20 65  om the iAgg-th e
7a80: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 67  lement of the ag
7a90: 67 72 65 67 61 74 6f 72 20 2a 2f 0a 20 20 53 65  gregator */.  Se
7aa0: 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
7ab0: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65       /* When the
7ac0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
7ad0: 20 73 75 62 2d 73 65 6c 65 63 74 2e 20 20 41 6c   sub-select.  Al
7ae0: 73 6f 20 74 68 65 0a 20 20 20 20 20 20 20 20 20  so the.         
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 2a 2a 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  ** right side of
7b10: 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65   "<expr> IN (<se
7b20: 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 63 68 61  lect>)" */.  cha
7b30: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
7b40: 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
7b50: 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
7b60: 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
7b70: 63 6f 6c 75 6d 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  column */.};../*
7b80: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
7b90: 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
7ba0: 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
7bb0: 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
7bc0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
7bd0: 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 20 20 30  P_FromJoin     0
7be0: 78 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e  x0001  /* Origin
7bf0: 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
7c00: 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
7c10: 6a 6f 69 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  join */../*.** T
7c20: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
7c30: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
7c40: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
7c50: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45  its in the .** E
7c60: 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
7c70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72  .*/.#define Expr
7c80: 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29  HasProperty(E,P)
7c90: 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67       (((E)->flag
7ca0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
7cb0: 66 69 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50  fine ExprHasAnyP
7cc0: 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
7cd0: 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
7ce0: 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
7cf0: 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29  SetProperty(E,P)
7d00: 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c       (E)->flags|
7d10: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70  =(P).#define Exp
7d20: 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45  rClearProperty(E
7d30: 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  ,P)   (E)->flags
7d40: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  &=~(P)../*.** A 
7d50: 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
7d60: 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
7d70: 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
7d80: 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
7d90: 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
7da0: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
7db0: 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
7dc0: 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
7dd0: 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
7de0: 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
7df0: 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
7e00: 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
7e10: 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
7e20: 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
7e30: 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
7e40: 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
7e50: 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
7e60: 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
7e70: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
7e80: 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
7e90: 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
7ea0: 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
7eb0: 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2f 0a 73 74   not used..*/.st
7ec0: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
7ed0: 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
7ee0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7ef0: 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
7f00: 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
7f10: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20  .  int nAlloc;  
7f20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7f30: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
7f40: 6c 6c 6f 63 61 74 65 64 20 62 65 6c 6f 77 20 2a  llocated below *
7f50: 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
7f60: 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 45  ist_item {.    E
7f70: 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
7f80: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
7f90: 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
7fa0: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
7fb0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ame;           /
7fc0: 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
7fd0: 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
7fe0: 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
7ff0: 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
8000: 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
8010: 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
8020: 20 2a 2f 0a 20 20 20 20 75 38 20 69 73 41 67 67   */.    u8 isAgg
8030: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
8040: 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
8050: 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6c  s an aggregate l
8060: 69 6b 65 20 63 6f 75 6e 74 28 2a 29 20 2a 2f 0a  ike count(*) */.
8070: 20 20 20 20 75 38 20 64 6f 6e 65 3b 20 20 20 20      u8 done;    
8080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
8090: 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
80a0: 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
80b0: 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
80c0: 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
80d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
80e0: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 65  entry for each e
80f0: 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a  xpression */.};.
8100: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
8110: 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
8120: 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
8130: 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
8140: 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
8150: 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
8160: 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
8170: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
8180: 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
8190: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
81a0: 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
81b0: 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
81c0: 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
81d0: 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
81e0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
81f0: 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
8200: 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
8210: 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
8220: 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
8230: 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
8240: 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
8250: 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
8260: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
8270: 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
8280: 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
8290: 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
82a0: 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
82b0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
82c0: 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
82d0: 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
82e0: 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
82f0: 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
8300: 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
8310: 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
8320: 64 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 49  dList {.  int nI
8330: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
8340: 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
8350: 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
8360: 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b  */.  int nAlloc;
8370: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8380: 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
8390: 61 74 65 64 20 66 6f 72 20 61 5b 5d 20 62 65 6c  ated for a[] bel
83a0: 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 49  ow */.  struct I
83b0: 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
83c0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
83d0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
83e0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
83f0: 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
8400: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
8410: 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
8420: 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
8430: 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
8440: 20 7d 20 2a 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a   } *a;.};../*.**
8450: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
8460: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
8470: 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
8480: 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
8490: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
84a0: 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
84b0: 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
84c0: 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
84d0: 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
84e0: 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
84f0: 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
8500: 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
8510: 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
8520: 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
8530: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8540: 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
8550: 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
8560: 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
8570: 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
8580: 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
8590: 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
85a0: 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
85b0: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
85c0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
85d0: 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
85e0: 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
85f0: 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
8600: 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
8610: 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
8620: 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
8630: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
8640: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
8650: 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
8660: 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
8670: 44 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  D..*/.struct Src
8680: 4c 69 73 74 20 7b 0a 20 20 75 31 36 20 6e 53 72  List {.  u16 nSr
8690: 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
86a0: 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
86b0: 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
86c0: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
86d0: 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 6f 63 3b 20  /.  u16 nAlloc; 
86e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
86f0: 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
8700: 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
8710: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
8720: 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
8730: 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
8740: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
8750: 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
8760: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
8770: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
8780: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
8790: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
87a0: 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
87b0: 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
87c0: 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
87d0: 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
87e0: 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
87f0: 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
8800: 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
8810: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
8820: 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
8830: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
8840: 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
8850: 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
8860: 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
8870: 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
8880: 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 2f 2a  jointype;     /*
8890: 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
88a0: 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65  tween this table
88b0: 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 2a 2f   and the next */
88c0: 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
88d0: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
88e0: 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
88f0: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
8900: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
8910: 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
8920: 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
8930: 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
8940: 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
8950: 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
8960: 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
8970: 20 6a 6f 69 6e 20 2a 2f 0a 20 20 7d 20 61 5b 31   join */.  } a[1
8980: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
8990: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
89a0: 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
89b0: 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
89c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
89d0: 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
89e0: 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
89f0: 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
8a00: 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
8a10: 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
8a20: 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
8a30: 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
8a40: 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
8a50: 55 52 41 4c 20 20 20 30 78 30 30 30 32 20 20 20  URAL   0x0002   
8a60: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
8a70: 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
8a80: 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
8a90: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 20 20        0x0004    
8aa0: 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
8ab0: 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
8ac0: 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 30  _RIGHT     0x000
8ad0: 38 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  8    /* Right ou
8ae0: 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
8af0: 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
8b00: 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 54 68   0x0010    /* Th
8b10: 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
8b20: 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
8b30: 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
8b40: 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
8b50: 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
8b60: 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
8b70: 70 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  pe */../*.** For
8b80: 20 65 61 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f   each nested loo
8b90: 70 20 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61  p in a WHERE cla
8ba0: 75 73 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  use implementati
8bb0: 6f 6e 2c 20 74 68 65 20 57 68 65 72 65 49 6e 66  on, the WhereInf
8bc0: 6f 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 63  o.** structure c
8bd0: 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
8be0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
8bf0: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
8c00: 69 73 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  is structure.** 
8c10: 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  is intended to b
8c20: 65 20 70 72 69 76 61 74 65 20 74 68 65 20 74 68  e private the th
8c30: 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65  e where.c module
8c40: 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20   and should not 
8c50: 62 65 0a 2a 2a 20 61 63 63 65 73 73 20 6f 72 20  be.** access or 
8c60: 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 74 68 65  modified by othe
8c70: 72 20 6d 6f 64 75 6c 65 73 2e 0a 2a 2f 0a 73 74  r modules..*/.st
8c80: 72 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20  ruct WhereLevel 
8c90: 7b 0a 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20  {.  int iMem;   
8ca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
8cb0: 72 79 20 63 65 6c 6c 20 75 73 65 64 20 62 79 20  ry cell used by 
8cc0: 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
8cd0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20  Index *pIdx;    
8ce0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 75 73       /* Index us
8cf0: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72  ed */.  int iCur
8d00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8d10: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  Cursor number us
8d20: 65 64 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ed for this inde
8d30: 78 20 2a 2f 0a 20 20 69 6e 74 20 73 63 6f 72 65  x */.  int score
8d40: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
8d50: 6f 77 20 77 65 6c 6c 20 74 68 69 73 20 69 6e 64  ow well this ind
8d60: 65 78 65 64 20 73 63 6f 72 65 64 20 2a 2f 0a 20  exed scored */. 
8d70: 20 69 6e 74 20 62 72 6b 3b 20 20 20 20 20 20 20   int brk;       
8d80: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
8d90: 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20  re to break out 
8da0: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  of the loop */. 
8db0: 20 69 6e 74 20 63 6f 6e 74 3b 20 20 20 20 20 20   int cont;      
8dc0: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
8dd0: 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77  re to continue w
8de0: 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f  ith the next loo
8df0: 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74  p cycle */.  int
8e00: 20 6f 70 2c 20 70 31 2c 20 70 32 3b 20 20 20 20   op, p1, p2;    
8e10: 20 20 2f 2a 20 4f 70 63 6f 64 65 20 75 73 65 64    /* Opcode used
8e20: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 20 74 68   to terminate th
8e30: 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20  e loop */.  int 
8e40: 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20  iLeftJoin;      
8e50: 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20   /* Memory cell 
8e60: 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
8e70: 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49  t LEFT OUTER JOI
8e80: 4e 20 2a 2f 0a 20 20 69 6e 74 20 74 6f 70 3b 20  N */.  int top; 
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
8ea0: 69 72 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  irst instruction
8eb0: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f 66 20   of interior of 
8ec0: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
8ed0: 74 20 69 6e 4f 70 2c 20 69 6e 50 31 2c 20 69 6e  t inOp, inP1, in
8ee0: 50 32 3b 2f 2a 20 4f 70 63 6f 64 65 20 75 73 65  P2;/* Opcode use
8ef0: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 61  d to implement a
8f00: 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f  n IN operator */
8f10: 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
8f20: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68          /* Do th
8f30: 65 20 73 63 61 6e 20 69 6e 20 74 68 65 20 72 65  e scan in the re
8f40: 76 65 72 73 65 20 64 69 72 65 63 74 69 6f 6e 20  verse direction 
8f50: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
8f60: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72   WHERE clause pr
8f70: 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65  ocessing routine
8f80: 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e   has two halves.
8f90: 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70    The.** first p
8fa0: 61 72 74 20 64 6f 65 73 20 74 68 65 20 73 74 61  art does the sta
8fb0: 72 74 20 6f 66 20 74 68 65 20 57 48 45 52 45 20  rt of the WHERE 
8fc0: 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63  loop and the sec
8fd0: 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73  ond.** half does
8fe0: 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65   the tail of the
8ff0: 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e   WHERE loop.  An
9000: 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
9010: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
9020: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
9030: 65 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64  e first half and
9040: 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20   passed.** into 
9050: 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20  the second half 
9060: 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e  to give some con
9070: 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75  tinuity..*/.stru
9080: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20  ct WhereInfo {. 
9090: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 0a   Parse *pParse;.
90a0: 20 20 53 72 63 4c 69 73 74 20 2a 70 54 61 62 4c    SrcList *pTabL
90b0: 69 73 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ist;   /* List o
90c0: 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  f tables in the 
90d0: 6a 6f 69 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 43  join */.  int iC
90e0: 6f 6e 74 69 6e 75 65 3b 20 20 20 20 20 20 20 2f  ontinue;       /
90f0: 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63  * Jump here to c
9100: 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78  ontinue with nex
9110: 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  t record */.  in
9120: 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20  t iBreak;       
9130: 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
9140: 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20  to break out of 
9150: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
9160: 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t nLevel;       
9170: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9180: 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f 0a 20  nested loop */. 
9190: 20 69 6e 74 20 73 61 76 65 64 4e 54 61 62 3b 20   int savedNTab; 
91a0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
91b0: 66 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 62  f pParse->nTab b
91c0: 65 66 6f 72 65 20 57 68 65 72 65 42 65 67 69 6e  efore WhereBegin
91d0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 70 65 61 6b  () */.  int peak
91e0: 4e 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  NTab;        /* 
91f0: 56 61 6c 75 65 20 6f 66 20 70 50 61 72 73 65 2d  Value of pParse-
9200: 3e 6e 54 61 62 20 61 66 74 65 72 20 57 68 65 72  >nTab after Wher
9210: 65 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20 57 68  eBegin() */.  Wh
9220: 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20  ereLevel a[1];  
9230: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
9240: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73  n about each nes
9250: 74 20 6c 6f 6f 70 20 69 6e 20 74 68 65 20 57 48  t loop in the WH
9260: 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ERE */.};../*.**
9270: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
9280: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
9290: 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
92a0: 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
92b0: 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
92c0: 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
92d0: 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
92e0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
92f0: 20 54 68 65 20 7a 53 65 6c 65 63 74 20 66 69 65   The zSelect fie
9300: 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
9310: 74 68 65 20 53 65 6c 65 63 74 20 73 74 72 75 63  the Select struc
9320: 74 75 72 65 20 6d 75 73 74 20 62 65 20 70 65 72  ture must be per
9330: 73 69 73 74 65 6e 74 2e 0a 2a 2a 20 4e 6f 72 6d  sistent..** Norm
9340: 61 6c 6c 79 2c 20 74 68 65 20 65 78 70 72 65 73  ally, the expres
9350: 73 69 6f 6e 20 74 72 65 65 20 70 6f 69 6e 74 73  sion tree points
9360: 20 74 6f 20 74 6f 6b 65 6e 73 20 69 6e 20 74 68   to tokens in th
9370: 65 20 6f 72 69 67 69 6e 61 6c 20 69 6e 70 75 74  e original input
9380: 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20  .** string that 
9390: 65 6e 63 6f 64 65 73 20 74 68 65 20 73 65 6c 65  encodes the sele
93a0: 63 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  ct.  But if the 
93b0: 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
93c0: 20 6d 75 73 74 20 6c 69 76 65 0a 2a 2a 20 6c 6f   must live.** lo
93d0: 6e 67 65 72 20 74 68 61 6e 20 69 74 73 20 69 6e  nger than its in
93e0: 70 75 74 20 73 74 72 69 6e 67 20 28 66 6f 72 20  put string (for 
93f0: 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 69 74 20  example when it 
9400: 69 73 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  is used to descr
9410: 69 62 65 0a 2a 2a 20 61 20 56 49 45 57 29 20 77  ibe.** a VIEW) w
9420: 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 61  e have to make a
9430: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 69 6e 70   copy of the inp
9440: 75 74 20 73 74 72 69 6e 67 20 73 6f 20 74 68 61  ut string so tha
9450: 74 20 74 68 65 20 6e 6f 64 65 73 0a 2a 2a 20 6f  t the nodes.** o
9460: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
9470: 20 74 72 65 65 20 77 69 6c 6c 20 68 61 76 65 20   tree will have 
9480: 73 6f 6d 65 74 68 69 6e 67 20 74 6f 20 70 6f 69  something to poi
9490: 6e 74 20 74 6f 2e 20 20 7a 53 65 6c 65 63 74 20  nt to.  zSelect 
94a0: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 68 6f  is used.** to ho
94b0: 6c 64 20 74 68 61 74 20 63 6f 70 79 2e 0a 2a 2a  ld that copy..**
94c0: 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
94d0: 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
94e0: 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
94f0: 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
9500: 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
9510: 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
9520: 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
9530: 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
9540: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
9550: 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
9560: 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
9570: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
9580: 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
9590: 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
95a0: 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
95b0: 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
95c0: 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
95d0: 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
95e0: 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
95f0: 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
9600: 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
9610: 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
9620: 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
9630: 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
9640: 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
9650: 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
9660: 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
9670: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
9680: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
9690: 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
96a0: 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
96b0: 43 45 50 54 20 2a 2f 0a 20 20 75 38 20 69 73 44  CEPT */.  u8 isD
96c0: 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
96d0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
96e0: 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
96f0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
9700: 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
9710: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
9720: 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
9730: 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
9740: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
9750: 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
9760: 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
9770: 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
9780: 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
9790: 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
97a0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
97b0: 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
97c0: 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
97d0: 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
97e0: 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
97f0: 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
9800: 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
9810: 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
9820: 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
9830: 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
9840: 20 20 69 6e 74 20 6e 4c 69 6d 69 74 2c 20 6e 4f    int nLimit, nO
9850: 66 66 73 65 74 3b 20 20 20 2f 2a 20 4c 49 4d 49  ffset;   /* LIMI
9860: 54 20 61 6e 64 20 4f 46 46 53 45 54 20 76 61 6c  T and OFFSET val
9870: 75 65 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 6e  ues.  -1 means n
9880: 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ot used */.  int
9890: 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
98a0: 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
98b0: 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
98c0: 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
98d0: 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 63 68 61  ounters */.  cha
98e0: 72 20 2a 7a 53 65 6c 65 63 74 3b 20 20 20 20 20  r *zSelect;     
98f0: 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
9900: 74 65 78 74 20 6f 66 20 74 68 65 20 53 45 4c 45  text of the SELE
9910: 43 54 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 7d 3b  CT command */.};
9920: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
9930: 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
9940: 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
9950: 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
9960: 79 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ys..*/.#define S
9970: 52 54 5f 43 61 6c 6c 62 61 63 6b 20 20 20 20 20  RT_Callback     
9980: 31 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 61 20 63  1  /* Invoke a c
9990: 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 65 61 63  allback with eac
99a0: 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
99b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
99c0: 65 6d 20 20 20 20 20 20 20 20 20 20 32 20 20 2f  em          2  /
99d0: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
99e0: 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
99f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
9a00: 65 74 20 20 20 20 20 20 20 20 20 20 33 20 20 2f  et          3  /
9a10: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
9a20: 73 20 75 6e 69 71 75 65 20 6b 65 79 73 20 69 6e  s unique keys in
9a30: 20 61 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66   a table */.#def
9a40: 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
9a50: 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
9a60: 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
9a70: 69 6e 20 61 20 74 61 62 6c 65 20 2a 2f 0a 23 64  in a table */.#d
9a80: 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
9a90: 20 20 20 20 20 20 20 36 20 20 2f 2a 20 52 65 6d         6  /* Rem
9aa0: 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
9ab0: 61 20 55 4e 49 4f 4e 20 74 61 62 6c 65 20 2a 2f  a UNION table */
9ac0: 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
9ad0: 6c 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  le        7  /* 
9ae0: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
9af0: 64 61 74 61 20 77 69 74 68 20 61 20 75 6e 69 71  data with a uniq
9b00: 75 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ue key */.#defin
9b10: 65 20 53 52 54 5f 54 65 6d 70 54 61 62 6c 65 20  e SRT_TempTable 
9b20: 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72     8  /* Store r
9b30: 65 73 75 6c 74 20 69 6e 20 61 20 74 72 61 73 69  esult in a trasi
9b40: 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ent table */.#de
9b50: 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
9b60: 20 20 20 20 20 20 39 20 20 2f 2a 20 44 6f 20 6e        9  /* Do n
9b70: 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
9b80: 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
9b90: 23 64 65 66 69 6e 65 20 53 52 54 5f 53 6f 72 74  #define SRT_Sort
9ba0: 65 72 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53  er      10  /* S
9bb0: 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
9bc0: 74 68 65 20 73 6f 72 74 65 72 20 2a 2f 0a 23 64  the sorter */.#d
9bd0: 65 66 69 6e 65 20 53 52 54 5f 53 75 62 72 6f 75  efine SRT_Subrou
9be0: 74 69 6e 65 20 20 31 31 20 20 2f 2a 20 43 61 6c  tine  11  /* Cal
9bf0: 6c 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  l a subroutine t
9c00: 6f 20 68 61 6e 64 6c 65 20 72 65 73 75 6c 74 73  o handle results
9c10: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20   */../*.** When 
9c20: 61 20 53 45 4c 45 43 54 20 75 73 65 73 20 61 67  a SELECT uses ag
9c30: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
9c40: 73 20 28 6c 69 6b 65 20 22 63 6f 75 6e 74 28 2a  s (like "count(*
9c50: 29 22 20 6f 72 20 22 61 76 67 28 66 31 29 22 29  )" or "avg(f1)")
9c60: 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 6f 20 64  .** we have to d
9c70: 6f 20 73 6f 6d 65 20 61 64 64 69 74 69 6f 6e 61  o some additiona
9c80: 6c 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 65 78  l analysis of ex
9c90: 70 72 65 73 73 69 6f 6e 73 2e 20 20 41 6e 20 69  pressions.  An i
9ca0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
9cb0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9cc0: 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
9cd0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20  rmation about a 
9ce0: 73 69 6e 67 6c 65 20 73 75 62 65 78 70 72 65 73  single subexpres
9cf0: 73 69 6f 6e 0a 2a 2a 20 73 6f 6d 65 77 68 65 72  sion.** somewher
9d00: 65 20 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20  e in the SELECT 
9d10: 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 6e 20 61  statement.  An a
9d20: 72 72 61 79 20 6f 66 20 74 68 65 73 65 20 73 74  rray of these st
9d30: 72 75 63 74 75 72 65 73 20 68 6f 6c 64 73 0a 2a  ructures holds.*
9d40: 2a 20 61 6c 6c 20 74 68 65 20 69 6e 66 6f 72 6d  * all the inform
9d50: 61 74 69 6f 6e 20 77 65 20 6e 65 65 64 20 74 6f  ation we need to
9d60: 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
9d70: 6f 72 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20  or aggregate.** 
9d80: 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 2a 2a 0a  expressions..**.
9d90: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 68 65  ** Note that whe
9da0: 6e 20 61 6e 61 6c 79 7a 69 6e 67 20 61 20 53 45  n analyzing a SE
9db0: 4c 45 43 54 20 63 6f 6e 74 61 69 6e 69 6e 67 20  LECT containing 
9dc0: 61 67 67 72 65 67 61 74 65 73 2c 20 62 6f 74 68  aggregates, both
9dd0: 0a 2a 2a 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  .** non-aggregat
9de0: 65 20 66 69 65 6c 64 20 76 61 72 69 61 62 6c 65  e field variable
9df0: 73 20 61 6e 64 20 61 67 67 72 65 67 61 74 65 20  s and aggregate 
9e00: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 73 74  functions are st
9e10: 6f 72 65 64 0a 2a 2a 20 69 6e 20 74 68 65 20 41  ored.** in the A
9e20: 67 67 45 78 70 72 20 61 72 72 61 79 20 6f 66 20  ggExpr array of 
9e30: 74 68 65 20 50 61 72 73 65 72 20 73 74 72 75 63  the Parser struc
9e40: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
9e50: 70 45 78 70 72 20 66 69 65 6c 64 20 70 6f 69 6e  pExpr field poin
9e60: 74 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73  ts to an express
9e70: 69 6f 6e 20 74 68 61 74 20 69 73 20 70 61 72 74  ion that is part
9e80: 20 6f 66 20 65 69 74 68 65 72 20 74 68 65 0a 2a   of either the.*
9e90: 2a 20 66 69 65 6c 64 20 6c 69 73 74 2c 20 74 68  * field list, th
9ea0: 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
9eb0: 65 2c 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c  e, the HAVING cl
9ec0: 61 75 73 65 20 6f 72 20 74 68 65 20 4f 52 44 45  ause or the ORDE
9ed0: 52 20 42 59 0a 2a 2a 20 63 6c 61 75 73 65 2e 20  R BY.** clause. 
9ee0: 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
9ef0: 77 69 6c 6c 20 62 65 20 66 72 65 65 64 20 77 68  will be freed wh
9f00: 65 6e 20 74 68 6f 73 65 20 63 6c 61 75 73 65 73  en those clauses
9f10: 20 61 72 65 20 63 6c 65 61 6e 65 64 0a 2a 2a 20   are cleaned.** 
9f20: 75 70 2e 20 20 44 6f 20 6e 6f 74 20 74 72 79 20  up.  Do not try 
9f30: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 65 78  to delete the ex
9f40: 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65  pression attache
9f50: 64 20 74 6f 20 41 67 67 45 78 70 72 2e 70 45 78  d to AggExpr.pEx
9f60: 70 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 67 67  pr..**.** If Agg
9f70: 45 78 70 72 2e 70 45 78 70 72 3d 3d 30 2c 20 74  Expr.pExpr==0, t
9f80: 68 61 74 20 6d 65 61 6e 73 20 74 68 65 20 65 78  hat means the ex
9f90: 70 72 65 73 73 69 6f 6e 20 69 73 20 22 63 6f 75  pression is "cou
9fa0: 6e 74 28 2a 29 22 2e 0a 2a 2f 0a 73 74 72 75 63  nt(*)"..*/.struc
9fb0: 74 20 41 67 67 45 78 70 72 20 7b 0a 20 20 69 6e  t AggExpr {.  in
9fc0: 74 20 69 73 41 67 67 3b 20 20 20 20 20 20 20 20  t isAgg;        
9fd0: 2f 2a 20 69 66 20 54 52 55 45 20 63 6f 6e 74 61  /* if TRUE conta
9fe0: 69 6e 73 20 61 6e 20 61 67 67 72 65 67 61 74 65  ins an aggregate
9ff0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 45   function */.  E
a000: 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
a010: 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
a020: 6f 6e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  on */.  FuncDef 
a030: 2a 70 46 75 6e 63 3b 20 20 20 2f 2a 20 49 6e 66  *pFunc;   /* Inf
a040: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
a050: 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
a060: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
a070: 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
a080: 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
a090: 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
a0a0: 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
a0b0: 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
a0c0: 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
a0d0: 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
a0e0: 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
a0f0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
a100: 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
a110: 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
a120: 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
a130: 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2f 0a 73  tire parse..*/.s
a140: 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
a150: 73 71 6c 69 74 65 20 2a 64 62 3b 20 20 20 20 20  sqlite *db;     
a160: 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
a170: 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
a180: 75 72 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ure */.  int rc;
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a1a0: 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
a1b0: 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
a1c0: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
a1d0: 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
a1e0: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 54  r message */.  T
a1f0: 6f 6b 65 6e 20 73 45 72 72 54 6f 6b 65 6e 3b 20  oken sErrToken; 
a200: 20 20 20 20 2f 2a 20 54 68 65 20 74 6f 6b 65 6e      /* The token
a210: 20 61 74 20 77 68 69 63 68 20 74 68 65 20 65 72   at which the er
a220: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
a230: 20 20 54 6f 6b 65 6e 20 73 46 69 72 73 74 54 6f    Token sFirstTo
a240: 6b 65 6e 3b 20 20 20 2f 2a 20 54 68 65 20 66 69  ken;   /* The fi
a250: 72 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  rst token parsed
a260: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73   */.  Token sLas
a270: 74 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 68  tToken;    /* Th
a280: 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
a290: 73 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  sed */.  const c
a2a0: 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 2f 2a  har *zTail;   /*
a2b0: 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
a2c0: 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
a2d0: 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
a2e0: 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
a2f0: 6c 65 3b 20 20 20 20 2f 2a 20 41 20 74 61 62 6c  le;    /* A tabl
a300: 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
a310: 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
a320: 42 4c 45 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  BLE */.  Vdbe *p
a330: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
a340: 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
a350: 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
a360: 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
a370: 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
a380: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
a390: 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
a3a0: 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
a3b0: 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
a3c0: 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
a3d0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
a3e0: 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
a3f0: 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
a400: 71 75 65 72 79 20 2a 2f 0a 20 20 75 38 20 6e 61  query */.  u8 na
a410: 6d 65 43 6c 61 73 68 3b 20 20 20 20 20 20 20 20  meClash;        
a420: 2f 2a 20 41 20 70 65 72 6d 61 6e 65 6e 74 20 74  /* A permanent t
a430: 61 62 6c 65 20 6e 61 6d 65 20 63 6c 61 73 68 65  able name clashe
a440: 73 20 77 69 74 68 20 74 65 6d 70 20 74 61 62 6c  s with temp tabl
a450: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 75 38 20 75  e name */.  u8 u
a460: 73 65 41 67 67 3b 20 20 20 20 20 20 20 20 20 20  seAgg;          
a470: 20 2f 2a 20 49 66 20 74 72 75 65 2c 20 65 78 74   /* If true, ext
a480: 72 61 63 74 20 66 69 65 6c 64 20 76 61 6c 75 65  ract field value
a490: 73 20 66 72 6f 6d 20 74 68 65 20 61 67 67 72 65  s from the aggre
a4a0: 67 61 74 6f 72 0a 20 20 20 20 20 20 20 20 20 20  gator.          
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
a4c0: 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67  while generating
a4d0: 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 4e   expressions.  N
a4e0: 6f 72 6d 61 6c 6c 79 20 66 61 6c 73 65 20 2a 2f  ormally false */
a4f0: 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
a500: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a510: 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
a520: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
a530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a540: 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
a550: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
a560: 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
a570: 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
a580: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a590: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
a5a0: 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
a5b0: 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
a5c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a5d0: 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
a5e0: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 67 67 3b  r */.  int nAgg;
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a600: 75 6d 62 65 72 20 6f 66 20 61 67 67 72 65 67 61  umber of aggrega
a610: 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  te expressions *
a620: 2f 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  /.  int nVar;   
a630: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a640: 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
a650: 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
a660: 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
a670: 41 67 67 45 78 70 72 20 2a 61 41 67 67 3b 20 20  AggExpr *aAgg;  
a680: 20 20 20 20 20 2f 2a 20 41 6e 20 61 72 72 61 79       /* An array
a690: 20 6f 66 20 61 67 67 72 65 67 61 74 65 20 65 78   of aggregate ex
a6a0: 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 63  pressions */.  c
a6b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
a6c0: 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
a6d0: 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
a6e0: 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
a6f0: 61 63 6b 73 20 2a 2f 0a 20 20 54 72 69 67 67 65  acks */.  Trigge
a700: 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
a710: 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
a720: 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
a730: 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
a740: 45 52 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  ER */.  TriggerS
a750: 74 61 63 6b 20 2a 74 72 69 67 53 74 61 63 6b 3b  tack *trigStack;
a760: 20 20 2f 2a 20 54 72 69 67 67 65 72 20 61 63 74    /* Trigger act
a770: 69 6f 6e 73 20 62 65 69 6e 67 20 63 6f 64 65 64  ions being coded
a780: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
a790: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
a7a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
a7b0: 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
a7c0: 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
a7d0: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
a7e0: 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
a7f0: 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
a800: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
a810: 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
a820: 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
a830: 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
a840: 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
a850: 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
a860: 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
a870: 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
a880: 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
a890: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a8a0: 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
a8b0: 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
a8c0: 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
a8d0: 73 20 66 6f 72 20 50 32 20 76 61 6c 75 65 20 69  s for P2 value i
a8e0: 6e 20 4f 50 5f 50 75 74 49 6e 74 4b 65 79 20 61  n OP_PutIntKey a
a8f0: 6e 64 20 4f 50 5f 44 65 6c 65 74 65 0a 2a 2f 0a  nd OP_Delete.*/.
a900: 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
a910: 43 48 41 4e 47 45 20 20 20 31 20 20 20 20 2f 2a  CHANGE   1    /*
a920: 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
a930: 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64  b->nChange */.#d
a940: 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53  efine OPFLAG_LAS
a950: 54 52 4f 57 49 44 20 32 20 20 20 20 2f 2a 20 53  TROWID 2    /* S
a960: 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
a970: 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
a980: 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 53 43  efine OPFLAG_CSC
a990: 48 41 4e 47 45 20 20 34 20 20 20 20 2f 2a 20 53  HANGE  4    /* S
a9a0: 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
a9b0: 3e 63 73 43 68 61 6e 67 65 20 2a 2f 0a 0a 2f 2a  >csChange */../*
a9c0: 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
a9d0: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
a9e0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a9f0: 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
aa00: 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
aa10: 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
aa20: 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
aa30: 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
aa40: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
aa50: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
aa60: 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
aa70: 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
aa80: 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
aa90: 66 20 74 68 65 20 73 71 6c 69 74 65 2a 20 74 68  f the sqlite* th
aaa0: 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
aab0: 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
aac0: 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
aad0: 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
aae0: 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
aaf0: 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
ab00: 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
ab10: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
ab20: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
ab30: 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
ab40: 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
ab50: 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
ab60: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
ab70: 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
ab80: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
ab90: 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
aba0: 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
abb0: 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
abc0: 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
abd0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
abe0: 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
abf0: 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
ac00: 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
ac10: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
ac20: 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
ac30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
ac40: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
ac50: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
ac60: 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
ac70: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
ac80: 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
ac90: 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 6e 61 6d  er {.  char *nam
aca0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
acb0: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
acc0: 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
acf0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
ad00: 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
ad10: 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
ad20: 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
ad30: 2a 2f 0a 20 20 75 38 20 69 44 62 3b 20 20 20 20  */.  u8 iDb;    
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ad50: 44 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e  Database contain
ad60: 69 6e 67 20 74 68 69 73 20 74 72 69 67 67 65 72  ing this trigger
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
ad80: 2f 0a 20 20 75 38 20 69 54 61 62 44 62 3b 20 20  /.  u8 iTabDb;  
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
ada0: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
adb0: 6e 67 20 54 72 69 67 67 65 72 2e 74 61 62 6c 65  ng Trigger.table
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
add0: 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
ade0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
adf0: 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
ae00: 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
ae10: 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
ae20: 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
ae30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
ae40: 20 6f 66 20 54 4b 5f 42 45 46 4f 52 45 2c 20 54   of TK_BEFORE, T
ae50: 4b 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  K_AFTER */.  Exp
ae60: 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
ae70: 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
ae80: 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
ae90: 78 70 72 65 73 69 6f 6e 20 28 6d 61 79 20 62 65  xpresion (may be
aea0: 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
aeb0: 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
aec0: 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
aed0: 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
aee0: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
aef0: 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
af20: 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
af30: 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6f 72  ere */.  int for
af40: 65 61 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  each;           
af50: 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 52 4f   /* One of TK_RO
af60: 57 20 6f 72 20 54 4b 5f 53 54 41 54 45 4d 45 4e  W or TK_STATEMEN
af70: 54 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 6e 61 6d  T */.  Token nam
af80: 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 2f  eToken;        /
af90: 2a 20 54 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 69  * Token containi
afa0: 6e 67 20 7a 4e 61 6d 65 2e 20 55 73 65 20 64 75  ng zName. Use du
afb0: 72 69 6e 67 20 70 61 72 73 69 6e 67 20 6f 6e 6c  ring parsing onl
afc0: 79 20 2a 2f 0a 0a 20 20 54 72 69 67 67 65 72 53  y */..  TriggerS
afd0: 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
afe0: 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
aff0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
b000: 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
b010: 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
b020: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
b030: 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
b040: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
b050: 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
b060: 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
b070: 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
b080: 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
b090: 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
b0a0: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
b0b0: 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
b0c0: 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
b0d0: 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49  rogram. . *. * I
b0e0: 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
b0f0: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
b100: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
b110: 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
b120: 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
b130: 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
b140: 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
b150: 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
b160: 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
b170: 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  he . * associate
b180: 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
b190: 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
b1a0: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
b1b0: 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
b1c0: 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
b1d0: 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
b1e0: 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20  ger-program.. * 
b1f0: 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
b200: 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
b210: 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
b220: 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
b230: 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
b240: 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
b250: 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
b260: 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
b270: 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
b280: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20  rmined by the . 
b290: 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
b2a0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
b2b0: 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
b2c0: 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
b2d0: 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
b2e0: 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
b2f0: 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
b300: 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
b310: 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
b320: 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
b330: 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
b350: 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
b360: 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
b370: 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
b380: 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
b390: 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
b3a0: 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
b3b0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
b3c0: 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
b3d0: 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
b3e0: 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
b3f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
b400: 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
b410: 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
b420: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
b430: 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
b440: 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
b450: 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
b460: 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
b470: 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
b480: 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
b490: 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
b4a0: 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
b4b0: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
b4c0: 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
b4d0: 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
b4e0: 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
b500: 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
b510: 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
b520: 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
b530: 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
b540: 69 6e 67 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ing the name of 
b550: 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
b560: 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
b570: 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
b580: 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
b590: 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
b5a0: 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
b5b0: 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
b5c0: 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
b5d0: 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
b5e0: 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
b5f0: 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
b600: 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
b610: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
b620: 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
b630: 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
b640: 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
b650: 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
b660: 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
b670: 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
b680: 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
b690: 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
b6a0: 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
b6b0: 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
b6c0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
b6d0: 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
b6e0: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
b6f0: 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
b700: 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
b710: 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
b720: 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
b730: 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
b740: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
b750: 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
b760: 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
b770: 74 65 70 20 7b 0a 20 20 69 6e 74 20 6f 70 3b 20  tep {.  int op; 
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b790: 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
b7a0: 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
b7b0: 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
b7c0: 54 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  T */.  int orcon
b7d0: 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  f;          /* O
b7e0: 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
b7f0: 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
b800: 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
b810: 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
b820: 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
b830: 74 20 6f 66 20 2a 2f 0a 0a 20 20 53 65 6c 65 63  t of */..  Selec
b840: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
b850: 2f 2a 20 56 61 6c 69 64 20 66 6f 72 20 53 45 4c  /* Valid for SEL
b860: 45 43 54 20 61 6e 64 20 73 6f 6d 65 74 69 6d 65  ECT and sometime
b870: 73 20 0a 09 09 09 20 20 49 4e 53 45 52 54 20 73  s ....  INSERT s
b880: 74 65 70 73 20 28 77 68 65 6e 20 70 45 78 70 72  teps (when pExpr
b890: 4c 69 73 74 20 3d 3d 20 30 29 20 2a 2f 0a 20 20  List == 0) */.  
b8a0: 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20  Token target;   
b8b0: 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 20 66 6f       /* Valid fo
b8c0: 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
b8d0: 2c 20 49 4e 53 45 52 54 20 73 74 65 70 73 20 2a  , INSERT steps *
b8e0: 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
b8f0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69  ;        /* Vali
b900: 64 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  d for DELETE, UP
b910: 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
b920: 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
b930: 69 73 74 3b 20 2f 2a 20 56 61 6c 69 64 20 66 6f  ist; /* Valid fo
b940: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
b950: 6e 74 73 20 61 6e 64 20 73 6f 6d 65 74 69 6d 65  nts and sometime
b960: 73 20 0a 09 09 09 20 20 20 49 4e 53 45 52 54 20  s ....   INSERT 
b970: 73 74 65 70 73 20 28 77 68 65 6e 20 70 53 65 6c  steps (when pSel
b980: 65 63 74 20 3d 3d 20 30 29 20 20 20 20 20 20 20  ect == 0)       
b990: 20 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70    */.  IdList *p
b9a0: 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 56  IdList;     /* V
b9b0: 61 6c 69 64 20 66 6f 72 20 49 4e 53 45 52 54 20  alid for INSERT 
b9c0: 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20  statements only 
b9d0: 2a 2f 0a 0a 20 20 54 72 69 67 67 65 72 53 74 65  */..  TriggerSte
b9e0: 70 20 2a 20 70 4e 65 78 74 3b 20 2f 2a 20 4e 65  p * pNext; /* Ne
b9f0: 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
ba00: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 20 2a  ist */.};../*. *
ba10: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
ba20: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
ba30: 61 63 6b 20 73 74 6f 72 65 73 20 69 6e 66 6f 72  ack stores infor
ba40: 6d 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20  mation required 
ba50: 64 75 72 69 6e 67 20 63 6f 64 65 0a 20 2a 20 67  during code. * g
ba60: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 61 20 73  eneration of a s
ba70: 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 70 72  ingle trigger pr
ba80: 6f 67 72 61 6d 2e 20 57 68 69 6c 65 20 74 68 65  ogram. While the
ba90: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
baa0: 20 69 73 20 62 65 69 6e 67 0a 20 2a 20 63 6f 64   is being. * cod
bab0: 65 64 2c 20 69 74 73 20 61 73 73 6f 63 69 61 74  ed, its associat
bac0: 65 64 20 54 72 69 67 67 65 72 53 74 61 63 6b 20  ed TriggerStack 
bad0: 69 6e 73 74 61 6e 63 65 20 69 73 20 70 6f 69 6e  instance is poin
bae0: 74 65 64 20 74 6f 20 62 79 20 74 68 65 0a 20 2a  ted to by the. *
baf0: 20 22 70 54 72 69 67 67 65 72 53 74 61 63 6b 22   "pTriggerStack"
bb00: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 50   member of the P
bb10: 61 72 73 65 20 73 74 72 75 63 74 75 72 65 2e 0a  arse structure..
bb20: 20 2a 0a 20 2a 20 54 68 65 20 70 54 61 62 20 6d   *. * The pTab m
bb30: 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
bb40: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
bb50: 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
bb60: 67 20 63 6f 64 65 64 20 6f 6e 2e 20 54 68 65 20  g coded on. The 
bb70: 0a 20 2a 20 6e 65 77 49 64 78 20 6d 65 6d 62 65  . * newIdx membe
bb80: 72 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 69  r contains the i
bb90: 6e 64 65 78 20 6f 66 20 74 68 65 20 76 64 62 65  ndex of the vdbe
bba0: 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
bbb0: 6e 74 73 20 61 74 20 74 68 65 20 74 65 6d 70 0a  nts at the temp.
bbc0: 20 2a 20 74 61 62 6c 65 20 74 68 61 74 20 73 74   * table that st
bbd0: 6f 72 65 73 20 74 68 65 20 6e 65 77 2e 2a 20 72  ores the new.* r
bbe0: 65 66 65 72 65 6e 63 65 73 2e 20 49 66 20 6e 65  eferences. If ne
bbf0: 77 2e 2a 20 72 65 66 65 72 65 6e 63 65 73 20 61  w.* references a
bc00: 72 65 20 6e 6f 74 20 76 61 6c 69 64 0a 20 2a 20  re not valid. * 
bc10: 66 6f 72 20 74 68 65 20 74 72 69 67 67 65 72 20  for the trigger 
bc20: 62 65 69 6e 67 20 63 6f 64 65 64 20 28 66 6f 72  being coded (for
bc30: 20 65 78 61 6d 70 6c 65 20 61 6e 20 4f 4e 20 44   example an ON D
bc40: 45 4c 45 54 45 20 74 72 69 67 67 65 72 29 2c 20  ELETE trigger), 
bc50: 74 68 65 6e 20 6e 65 77 49 64 78 0a 20 2a 20 69  then newIdx. * i
bc60: 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 54 68 65  s set to -1. The
bc70: 20 6f 6c 64 49 64 78 20 6d 65 6d 62 65 72 20 69   oldIdx member i
bc80: 73 20 61 6e 61 6c 6f 67 6f 75 73 20 74 6f 20 6e  s analogous to n
bc90: 65 77 49 64 78 2c 20 66 6f 72 20 6f 6c 64 2e 2a  ewIdx, for old.*
bca0: 20 72 65 66 65 72 65 6e 63 65 73 2e 0a 20 2a 0a   references.. *.
bcb0: 20 2a 20 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49   * The ON CONFLI
bcc0: 43 54 20 70 6f 6c 69 63 79 20 74 6f 20 62 65 20  CT policy to be 
bcd0: 75 73 65 64 20 66 6f 72 20 74 68 65 20 74 72 69  used for the tri
bce0: 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
bcf0: 70 73 20 69 73 20 73 74 6f 72 65 64 20 0a 20 2a  ps is stored . *
bd00: 20 61 73 20 74 68 65 20 6f 72 63 6f 6e 66 20 6d   as the orconf m
bd10: 65 6d 62 65 72 2e 20 49 66 20 74 68 69 73 20 69  ember. If this i
bd20: 73 20 4f 45 5f 44 65 66 61 75 6c 74 2c 20 74 68  s OE_Default, th
bd30: 65 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  en the ON CONFLI
bd40: 43 54 20 63 6c 61 75 73 65 20 0a 20 2a 20 73 70  CT clause . * sp
bd50: 65 63 69 66 69 65 64 20 66 6f 72 20 69 6e 64 69  ecified for indi
bd60: 76 69 64 75 61 6c 20 74 72 69 67 67 65 72 73 20  vidual triggers 
bd70: 73 74 65 70 73 20 69 73 20 75 73 65 64 2e 0a 20  steps is used.. 
bd80: 2a 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  *. * struct Trig
bd90: 67 65 72 53 74 61 63 6b 20 68 61 73 20 61 20 22  gerStack has a "
bda0: 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 2c 20 74  pNext" member, t
bdb0: 6f 20 61 6c 6c 6f 77 20 6c 69 6e 6b 65 64 20 6c  o allow linked l
bdc0: 69 73 74 73 20 74 6f 20 62 65 0a 20 2a 20 63 6f  ists to be. * co
bdd0: 6e 73 74 72 75 63 74 65 64 2e 20 57 68 65 6e 20  nstructed. When 
bde0: 63 6f 64 69 6e 67 20 6e 65 73 74 65 64 20 74 72  coding nested tr
bdf0: 69 67 67 65 72 73 20 28 74 72 69 67 67 65 72 73  iggers (triggers
be00: 20 66 69 72 65 64 20 62 79 20 6f 74 68 65 72 20   fired by other 
be10: 74 72 69 67 67 65 72 73 29 0a 20 2a 20 65 61 63  triggers). * eac
be20: 68 20 6e 65 73 74 65 64 20 74 72 69 67 67 65 72  h nested trigger
be30: 20 73 74 6f 72 65 73 20 69 74 73 20 70 61 72 65   stores its pare
be40: 6e 74 20 74 72 69 67 67 65 72 27 73 20 54 72 69  nt trigger's Tri
be50: 67 67 65 72 53 74 61 63 6b 20 61 73 20 74 68 65  ggerStack as the
be60: 20 22 70 4e 65 78 74 22 20 0a 20 2a 20 70 6f 69   "pNext" . * poi
be70: 6e 74 65 72 2e 20 4f 6e 63 65 20 74 68 65 20 6e  nter. Once the n
be80: 65 73 74 65 64 20 74 72 69 67 67 65 72 20 68 61  ested trigger ha
be90: 73 20 62 65 65 6e 20 63 6f 64 65 64 2c 20 74 68  s been coded, th
bea0: 65 20 70 4e 65 78 74 20 76 61 6c 75 65 20 69 73  e pNext value is
beb0: 20 72 65 73 74 6f 72 65 64 0a 20 2a 20 74 6f 20   restored. * to 
bec0: 74 68 65 20 70 54 72 69 67 67 65 72 53 74 61 63  the pTriggerStac
bed0: 6b 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  k member of the 
bee0: 50 61 72 73 65 20 73 74 75 63 74 75 72 65 20 61  Parse stucture a
bef0: 6e 64 20 63 6f 64 69 6e 67 20 6f 66 20 74 68 65  nd coding of the
bf00: 20 70 61 72 65 6e 74 0a 20 2a 20 74 72 69 67 67   parent. * trigg
bf10: 65 72 20 63 6f 6e 74 69 6e 75 65 73 2e 0a 20 2a  er continues.. *
bf20: 0a 20 2a 20 42 65 66 6f 72 65 20 61 20 6e 65 73  . * Before a nes
bf30: 74 65 64 20 74 72 69 67 67 65 72 20 69 73 20 63  ted trigger is c
bf40: 6f 64 65 64 2c 20 74 68 65 20 6c 69 6e 6b 65 64  oded, the linked
bf50: 20 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f   list pointed to
bf60: 20 62 79 20 74 68 65 20 0a 20 2a 20 70 54 72 69   by the . * pTri
bf70: 67 67 65 72 53 74 61 63 6b 20 69 73 20 73 63 61  ggerStack is sca
bf80: 6e 6e 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  nned to ensure t
bf90: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 20  hat the trigger 
bfa0: 69 73 20 6e 6f 74 20 61 62 6f 75 74 20 74 6f 20  is not about to 
bfb0: 62 65 20 63 6f 64 65 64 0a 20 2a 20 72 65 63 75  be coded. * recu
bfc0: 72 73 69 76 65 6c 79 2e 20 49 66 20 74 68 69 73  rsively. If this
bfd0: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 64 65   condition is de
bfe0: 74 65 63 74 65 64 2c 20 74 68 65 20 6e 65 73 74  tected, the nest
bff0: 65 64 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f  ed trigger is no
c000: 74 20 63 6f 64 65 64 2e 0a 20 2a 2f 0a 73 74 72  t coded.. */.str
c010: 75 63 74 20 54 72 69 67 67 65 72 53 74 61 63 6b  uct TriggerStack
c020: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62   {.  Table *pTab
c030: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  ;         /* Tab
c040: 6c 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73  le that triggers
c050: 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 62   are currently b
c060: 65 69 6e 67 20 63 6f 64 65 64 20 6f 6e 20 2a 2f  eing coded on */
c070: 0a 20 20 69 6e 74 20 6e 65 77 49 64 78 3b 20 20  .  int newIdx;  
c080: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
c090: 20 6f 66 20 76 64 62 65 20 63 75 72 73 6f 72 20   of vdbe cursor 
c0a0: 74 6f 20 22 6e 65 77 22 20 74 65 6d 70 20 74 61  to "new" temp ta
c0b0: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6c 64  ble */.  int old
c0c0: 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Idx;          /*
c0d0: 20 49 6e 64 65 78 20 6f 66 20 76 64 62 65 20 63   Index of vdbe c
c0e0: 75 72 73 6f 72 20 74 6f 20 22 6f 6c 64 22 20 74  ursor to "old" t
c0f0: 65 6d 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  emp table */.  i
c100: 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
c110: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
c120: 72 63 6f 6e 66 20 70 6f 6c 69 63 79 20 2a 2f 0a  rconf policy */.
c130: 20 20 69 6e 74 20 69 67 6e 6f 72 65 4a 75 6d 70    int ignoreJump
c140: 3b 20 20 20 20 20 20 2f 2a 20 77 68 65 72 65 20  ;      /* where 
c150: 74 6f 20 6a 75 6d 70 20 74 6f 20 66 6f 72 20 61  to jump to for a
c160: 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 2a   RAISE(IGNORE) *
c170: 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
c180: 69 67 67 65 72 3b 20 20 20 2f 2a 20 54 68 65 20  igger;   /* The 
c190: 74 72 69 67 67 65 72 20 63 75 72 72 65 6e 74 6c  trigger currentl
c1a0: 79 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f  y being coded */
c1b0: 0a 20 20 54 72 69 67 67 65 72 53 74 61 63 6b 20  .  TriggerStack 
c1c0: 2a 70 4e 65 78 74 3b 20 2f 2a 20 4e 65 78 74 20  *pNext; /* Next 
c1d0: 74 72 69 67 67 65 72 20 64 6f 77 6e 20 6f 6e 20  trigger down on 
c1e0: 74 68 65 20 74 72 69 67 67 65 72 20 73 74 61 63  the trigger stac
c1f0: 6b 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  k */.};../*.** T
c200: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
c210: 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
c220: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
c230: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
c240: 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
c250: 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
c260: 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
c270: 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
c280: 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
c290: 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
c2a0: 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
c2b0: 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
c2c0: 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
c2d0: 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
c2e0: 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
c2f0: 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
c300: 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
c310: 6e 20 68 65 72 65 20 2a 2f 0a 20 20 63 6f 6e 73  n here */.  cons
c320: 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
c330: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
c340: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
c350: 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
c360: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
c370: 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
c380: 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
c390: 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
c3a0: 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
c3b0: 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
c3c0: 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
c3d0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
c3e0: 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
c3f0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
c400: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 69  */.};../*. * Thi
c410: 73 20 67 6c 6f 62 61 6c 20 66 6c 61 67 20 69 73  s global flag is
c420: 20 73 65 74 20 66 6f 72 20 70 65 72 66 6f 72 6d   set for perform
c430: 61 6e 63 65 20 74 65 73 74 69 6e 67 20 6f 66 20  ance testing of 
c440: 74 72 69 67 67 65 72 73 2e 20 57 68 65 6e 20 69  triggers. When i
c450: 74 20 69 73 20 73 65 74 0a 20 2a 20 53 51 4c 69  t is set. * SQLi
c460: 74 65 20 77 69 6c 6c 20 70 65 72 66 6f 72 6d 20  te will perform 
c470: 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20  the overhead of 
c480: 62 75 69 6c 64 69 6e 67 20 6e 65 77 20 61 6e 64  building new and
c490: 20 6f 6c 64 20 74 72 69 67 67 65 72 20 72 65 66   old trigger ref
c4a0: 65 72 65 6e 63 65 73 20 0a 20 2a 20 65 76 65 6e  erences . * even
c4b0: 20 77 68 65 6e 20 6e 6f 20 74 72 69 67 67 65 72   when no trigger
c4c0: 73 20 65 78 69 73 74 0a 20 2a 2f 0a 65 78 74 65  s exist. */.exte
c4d0: 72 6e 20 69 6e 74 20 61 6c 77 61 79 73 5f 63 6f  rn int always_co
c4e0: 64 65 5f 74 72 69 67 67 65 72 5f 73 65 74 75 70  de_trigger_setup
c4f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  ;../*.** Interna
c500: 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
c510: 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
c520: 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
c530: 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
c540: 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
c550: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e  ite3StrNICmp(con
c560: 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
c570: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 69   char *, int);.i
c580: 6e 74 20 73 71 6c 69 74 65 33 48 61 73 68 4e 6f  nt sqlite3HashNo
c590: 43 61 73 65 28 63 6f 6e 73 74 20 63 68 61 72 20  Case(const char 
c5a0: 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
c5b0: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 63 6f 6e  ite3IsNumber(con
c5c0: 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 2a 29 3b  st char*, int*);
c5d0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6d 70  .int sqlite3Comp
c5e0: 61 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  are(const char *
c5f0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
c600: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 6f 72 74  .int sqlite3Sort
c610: 43 6f 6d 70 61 72 65 28 63 6f 6e 73 74 20 63 68  Compare(const ch
c620: 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
c630: 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
c640: 33 52 65 61 6c 54 6f 53 6f 72 74 61 62 6c 65 28  3RealToSortable(
c650: 64 6f 75 62 6c 65 20 72 2c 20 63 68 61 72 20 2a  double r, char *
c660: 29 3b 0a 23 69 66 64 65 66 20 4d 45 4d 4f 52 59  );.#ifdef MEMORY
c670: 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 2a 73  _DEBUG.  void *s
c680: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5f 28 69 6e  qlite3Malloc_(in
c690: 74 2c 69 6e 74 2c 63 68 61 72 2a 2c 69 6e 74 29  t,int,char*,int)
c6a0: 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
c6b0: 46 72 65 65 5f 28 76 6f 69 64 2a 2c 63 68 61 72  Free_(void*,char
c6c0: 2a 2c 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  *,int);.  void *
c6d0: 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 5f 28  sqlite3Realloc_(
c6e0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2c  void*,int,char*,
c6f0: 69 6e 74 29 3b 0a 20 20 63 68 61 72 20 2a 73 71  int);.  char *sq
c700: 6c 69 74 65 33 53 74 72 44 75 70 5f 28 63 6f 6e  lite3StrDup_(con
c710: 73 74 20 63 68 61 72 2a 2c 63 68 61 72 2a 2c 69  st char*,char*,i
c720: 6e 74 29 3b 0a 20 20 63 68 61 72 20 2a 73 71 6c  nt);.  char *sql
c730: 69 74 65 33 53 74 72 4e 44 75 70 5f 28 63 6f 6e  ite3StrNDup_(con
c740: 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 2c 63 68  st char*, int,ch
c750: 61 72 2a 2c 69 6e 74 29 3b 0a 20 20 76 6f 69 64  ar*,int);.  void
c760: 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4d 65 6d   sqlite3CheckMem
c770: 6f 72 79 28 76 6f 69 64 2a 2c 69 6e 74 29 3b 0a  ory(void*,int);.
c780: 23 65 6c 73 65 0a 20 20 76 6f 69 64 20 2a 73 71  #else.  void *sq
c790: 6c 69 74 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  liteMalloc(int);
c7a0: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 4d  .  void *sqliteM
c7b0: 61 6c 6c 6f 63 52 61 77 28 69 6e 74 29 3b 0a 20  allocRaw(int);. 
c7c0: 20 76 6f 69 64 20 73 71 6c 69 74 65 46 72 65 65   void sqliteFree
c7d0: 28 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20  (void*);.  void 
c7e0: 2a 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63 28 76  *sqliteRealloc(v
c7f0: 6f 69 64 2a 2c 69 6e 74 29 3b 0a 20 20 63 68 61  oid*,int);.  cha
c800: 72 20 2a 73 71 6c 69 74 65 53 74 72 44 75 70 28  r *sqliteStrDup(
c810: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c820: 63 68 61 72 20 2a 73 71 6c 69 74 65 53 74 72 4e  char *sqliteStrN
c830: 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Dup(const char*,
c840: 20 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20   int);.# define 
c850: 73 71 6c 69 74 65 33 43 68 65 63 6b 4d 65 6d 6f  sqlite3CheckMemo
c860: 72 79 28 61 2c 62 29 0a 23 65 6e 64 69 66 0a 63  ry(a,b).#endif.c
c870: 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
c880: 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
c890: 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
c8a0: 69 74 65 33 56 4d 50 72 69 6e 74 66 28 63 6f 6e  ite3VMPrintf(con
c8b0: 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
c8c0: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
c8d0: 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
c8e0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c8f0: 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
c900: 74 65 33 53 65 74 4e 53 74 72 69 6e 67 28 63 68  te3SetNString(ch
c910: 61 72 20 2a 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  ar **, ...);.voi
c920: 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
c930: 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
c940: 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
c950: 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
c960: 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
c970: 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
c980: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
c990: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
c9a0: 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
c9b0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
c9c0: 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
c9d0: 74 65 33 45 78 65 63 28 50 61 72 73 65 2a 29 3b  te3Exec(Parse*);
c9e0: 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
c9f0: 70 72 28 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  pr(int, Expr*, E
ca00: 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  xpr*, Token*);.v
ca10: 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
ca20: 70 61 6e 28 45 78 70 72 2a 2c 54 6f 6b 65 6e 2a  pan(Expr*,Token*
ca30: 2c 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a  ,Token*);.Expr *
ca40: 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
ca50: 69 6f 6e 28 45 78 70 72 4c 69 73 74 2a 2c 20 54  ion(ExprList*, T
ca60: 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
ca70: 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 45  ite3ExprDelete(E
ca80: 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
ca90: 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
caa0: 41 70 70 65 6e 64 28 45 78 70 72 4c 69 73 74 2a  Append(ExprList*
cab0: 2c 45 78 70 72 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  ,Expr*,Token*);.
cac0: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
cad0: 4c 69 73 74 44 65 6c 65 74 65 28 45 78 70 72 4c  ListDelete(ExprL
cae0: 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
caf0: 65 33 49 6e 69 74 28 73 71 6c 69 74 65 2a 2c 20  e3Init(sqlite*, 
cb00: 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
cb10: 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
cb20: 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
cb30: 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
cb40: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
cb50: 53 63 68 65 6d 61 28 73 71 6c 69 74 65 2a 2c 20  Schema(sqlite*, 
cb60: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
cb70: 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
cb80: 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
cb90: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 49 6e  qlite3RollbackIn
cba0: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
cbb0: 6c 69 74 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lite*);.void sql
cbc0: 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
cbd0: 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
cbe0: 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
cbf0: 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
cc00: 65 63 74 28 50 61 72 73 65 2a 2c 63 68 61 72 2a  ect(Parse*,char*
cc10: 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
cc20: 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
cc30: 72 54 61 62 6c 65 28 56 64 62 65 20 2a 76 2c 20  rTable(Vdbe *v, 
cc40: 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
cc50: 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
cc60: 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
cc70: 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
cc80: 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
cc90: 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
cca0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
ccb0: 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
ccc0: 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
ccd0: 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
cce0: 28 50 61 72 73 65 2a 2c 20 49 64 4c 69 73 74 2a  (Parse*, IdList*
ccf0: 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
cd00: 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70  ite3AddColumnTyp
cd10: 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
cd20: 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
cd30: 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
cd40: 61 6c 75 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  alue(Parse*,Toke
cd50: 6e 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  n*,int);.int sql
cd60: 69 74 65 33 43 6f 6c 6c 61 74 65 54 79 70 65 28  ite3CollateType(
cd70: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
cd80: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
cd90: 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
cda0: 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
cdb0: 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
cdc0: 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 53  (Parse*,Token*,S
cdd0: 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
cde0: 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
cdf0: 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
ce00: 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
ce10: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 69  );.int sqlite3Vi
ce20: 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
ce30: 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
ce40: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
ce50: 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
ce60: 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
ce70: 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
ce80: 61 62 6c 65 28 73 71 6c 69 74 65 2a 2c 20 54 61  able(sqlite*, Ta
ce90: 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
cea0: 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
ceb0: 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
cec0: 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
ced0: 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 49  IdList*, int);.I
cee0: 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
cef0: 4c 69 73 74 41 70 70 65 6e 64 28 49 64 4c 69 73  ListAppend(IdLis
cf00: 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
cf10: 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
cf20: 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
cf30: 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
cf40: 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
cf50: 74 41 70 70 65 6e 64 28 53 72 63 4c 69 73 74 2a  tAppend(SrcList*
cf60: 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
cf70: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
cf80: 72 63 4c 69 73 74 41 64 64 41 6c 69 61 73 28 53  rcListAddAlias(S
cf90: 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
cfa0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
cfb0: 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f  cListAssignCurso
cfc0: 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rs(Parse*, SrcLi
cfd0: 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
cfe0: 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 49  e3IdListDelete(I
cff0: 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
d000: 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
d010: 74 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  te(SrcList*);.vo
d020: 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
d030: 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
d040: 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 49 64 4c  en*,SrcList*,IdL
d050: 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
d060: 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
d070: 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
d080: 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
d090: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
d0a0: 64 4b 65 79 54 79 70 65 28 56 64 62 65 2a 2c 20  dKeyType(Vdbe*, 
d0b0: 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
d0c0: 20 73 71 6c 69 74 65 33 41 64 64 49 64 78 4b 65   sqlite3AddIdxKe
d0d0: 79 54 79 70 65 28 56 64 62 65 2a 2c 20 49 6e 64  yType(Vdbe*, Ind
d0e0: 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ex*);.int sqlite
d0f0: 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  3Select(Parse*, 
d100: 53 65 6c 65 63 74 2a 2c 20 69 6e 74 2c 20 69 6e  Select*, int, in
d110: 74 2c 20 53 65 6c 65 63 74 2a 2c 20 69 6e 74 2c  t, Select*, int,
d120: 20 69 6e 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a   int*);.Select *
d130: 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
d140: 28 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  (ExprList*,SrcLi
d150: 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
d160: 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
d170: 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
d190: 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
d1a0: 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
d1b0: 65 74 65 28 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  ete(Select*);.vo
d1c0: 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
d1d0: 55 6e 62 69 6e 64 28 53 65 6c 65 63 74 2a 29 3b  Unbind(Select*);
d1e0: 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
d1f0: 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
d200: 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
d210: 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
d220: 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
d230: 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
d240: 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
d250: 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
d260: 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
d270: 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
d280: 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
d290: 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
d2a0: 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
d2b0: 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
d2c0: 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 20 53  eBegin(Parse*, S
d2d0: 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  rcList*, Expr*, 
d2e0: 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2a 29  int, ExprList**)
d2f0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
d300: 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
d310: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
d320: 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
d330: 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
d340: 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
d350: 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
d360: 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
d370: 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
d380: 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
d390: 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
d3a0: 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
d3b0: 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
d3c0: 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
d3d0: 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
d3e0: 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 2a  indTable(sqlite*
d3f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
d400: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
d410: 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
d420: 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 63 6f 6e  Table(Parse*,con
d430: 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
d440: 63 68 61 72 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  char*);.Index *s
d450: 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
d460: 73 71 6c 69 74 65 2a 2c 63 6f 6e 73 74 20 63 68  sqlite*,const ch
d470: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
d480: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
d490: 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
d4a0: 64 65 78 28 73 71 6c 69 74 65 2a 2c 49 6e 64 65  dex(sqlite*,Inde
d4b0: 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
d4c0: 33 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 53 72  3Copy(Parse*, Sr
d4d0: 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
d4e0: 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
d4f0: 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
d500: 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
d510: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
d520: 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
d530: 71 6c 69 74 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  qlite*);.int sql
d540: 69 74 65 33 47 6c 6f 62 43 6f 6d 70 61 72 65 28  ite3GlobCompare(
d550: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
d560: 68 61 72 2a 2c 63 6f 6e 73 74 20 75 6e 73 69 67  har*,const unsig
d570: 6e 65 64 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  ned char*);.int 
d580: 73 71 6c 69 74 65 33 4c 69 6b 65 43 6f 6d 70 61  sqlite3LikeCompa
d590: 72 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  re(const unsigne
d5a0: 64 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 75 6e  d char*,const un
d5b0: 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 63  signed char*);.c
d5c0: 68 61 72 20 2a 73 71 6c 69 74 65 33 54 61 62 6c  har *sqlite3Tabl
d5d0: 65 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 54  eNameFromToken(T
d5e0: 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
d5f0: 74 65 33 45 78 70 72 43 68 65 63 6b 28 50 61 72  te3ExprCheck(Par
d600: 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
d610: 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
d620: 74 65 33 45 78 70 72 54 79 70 65 28 45 78 70 72  te3ExprType(Expr
d630: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
d640: 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
d650: 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
d660: 6c 69 74 65 46 75 6e 63 49 64 28 54 6f 6b 65 6e  liteFuncId(Token
d670: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
d680: 78 70 72 52 65 73 6f 6c 76 65 49 64 73 28 50 61  xprResolveIds(Pa
d690: 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
d6a0: 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
d6b0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
d6c0: 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
d6d0: 74 65 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72  tes(Parse*, Expr
d6e0: 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
d6f0: 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
d700: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 61  ;.void sqlite3Ra
d710: 6e 64 6f 6d 6e 65 73 73 28 69 6e 74 2c 20 76 6f  ndomness(int, vo
d720: 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
d730: 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
d740: 6c 69 74 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lite*);.void sql
d750: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
d760: 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
d770: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
d780: 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
d790: 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
d7a0: 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
d7b0: 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
d7c0: 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
d7d0: 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
d7e0: 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 69 6e  tion(Parse*);.in
d7f0: 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
d800: 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
d810: 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
d820: 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
d830: 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
d840: 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
d850: 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
d860: 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
d870: 65 6c 65 74 65 28 73 71 6c 69 74 65 2a 2c 20 56  elete(sqlite*, V
d880: 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
d890: 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
d8a0: 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
d8b0: 49 6e 64 65 78 44 65 6c 65 74 65 28 73 71 6c 69  IndexDelete(sqli
d8c0: 74 65 2a 2c 20 56 64 62 65 2a 2c 20 54 61 62 6c  te*, Vdbe*, Tabl
d8d0: 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 29 3b  e*, int, char*);
d8e0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
d8f0: 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
d900: 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
d910: 6c 65 2a 2c 69 6e 74 2c 63 68 61 72 2a 2c 69 6e  le*,int,char*,in
d920: 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
d930: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
d940: 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
d950: 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
d960: 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  t, char*, int, i
d970: 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
d980: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
d990: 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
d9a0: 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
d9b0: 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
d9c0: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
d9d0: 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
d9e0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
d9f0: 64 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  dWriteOperation(
da00: 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Parse*);.Expr *s
da10: 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 45 78  qlite3ExprDup(Ex
da20: 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
da30: 65 33 54 6f 6b 65 6e 43 6f 70 79 28 54 6f 6b 65  e3TokenCopy(Toke
da40: 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  n*, Token*);.Exp
da50: 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
da60: 70 72 4c 69 73 74 44 75 70 28 45 78 70 72 4c 69  prListDup(ExprLi
da70: 73 74 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  st*);.SrcList *s
da80: 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
da90: 28 53 72 63 4c 69 73 74 2a 29 3b 0a 49 64 4c 69  (SrcList*);.IdLi
daa0: 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
dab0: 74 44 75 70 28 49 64 4c 69 73 74 2a 29 3b 0a 53  tDup(IdList*);.S
dac0: 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
dad0: 6c 65 63 74 44 75 70 28 53 65 6c 65 63 74 2a 29  lectDup(Select*)
dae0: 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
daf0: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
db00: 71 6c 69 74 65 2a 2c 63 6f 6e 73 74 20 63 68 61  qlite*,const cha
db10: 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  r*,int,int,int);
db20: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
db30: 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
db40: 74 69 6f 6e 73 28 73 71 6c 69 74 65 2a 29 3b 0a  tions(sqlite*);.
db50: 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
db60: 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
db70: 74 69 6f 6e 73 28 73 71 6c 69 74 65 2a 29 3b 0a  tions(sqlite*);.
db80: 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
db90: 79 4f 6e 28 73 71 6c 69 74 65 2a 29 3b 0a 69 6e  yOn(sqlite*);.in
dba0: 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  t sqlite3SafetyO
dbb0: 66 66 28 73 71 6c 69 74 65 2a 29 3b 0a 69 6e 74  ff(sqlite*);.int
dbc0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
dbd0: 65 63 6b 28 73 71 6c 69 74 65 2a 29 3b 0a 76 6f  eck(sqlite*);.vo
dbe0: 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
dbf0: 43 6f 6f 6b 69 65 28 73 71 6c 69 74 65 2a 2c 20  Cookie(sqlite*, 
dc00: 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
dc10: 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
dc20: 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
dc30: 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
dc40: 53 72 63 4c 69 73 74 2a 2c 69 6e 74 2c 45 78 70  SrcList*,int,Exp
dc50: 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
dc60: 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
dc70: 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
dc80: 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
dc90: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
dca0: 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
dcb0: 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
dcc0: 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
dcd0: 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
dce0: 54 72 69 67 67 65 72 2a 2c 20 69 6e 74 29 3b 0a  Trigger*, int);.
dcf0: 69 6e 74 20 73 71 6c 69 74 65 33 54 72 69 67 67  int sqlite3Trigg
dd00: 65 72 73 45 78 69 73 74 28 50 61 72 73 65 2a 20  ersExist(Parse* 
dd10: 2c 20 54 72 69 67 67 65 72 2a 20 2c 20 69 6e 74  , Trigger* , int
dd20: 20 2c 20 69 6e 74 20 2c 20 69 6e 74 2c 20 45 78   , int , int, Ex
dd30: 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
dd40: 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
dd50: 67 65 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ger(Parse*, int,
dd60: 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
dd70: 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
dd80: 6e 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  nt, .           
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
dda0: 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
ddb0: 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
ddc0: 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
ddd0: 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
dde0: 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
ddf0: 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
de00: 65 72 53 74 65 70 28 54 72 69 67 67 65 72 53 74  erStep(TriggerSt
de10: 65 70 2a 29 3b 0a 54 72 69 67 67 65 72 53 74 65  ep*);.TriggerSte
de20: 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
de30: 72 53 65 6c 65 63 74 53 74 65 70 28 53 65 6c 65  rSelectStep(Sele
de40: 63 74 2a 29 3b 0a 54 72 69 67 67 65 72 53 74 65  ct*);.TriggerSte
de50: 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
de60: 72 49 6e 73 65 72 74 53 74 65 70 28 54 6f 6b 65  rInsertStep(Toke
de70: 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 45 78 70  n*, IdList*, Exp
de80: 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  rList*, Select*,
de90: 20 69 6e 74 29 3b 0a 54 72 69 67 67 65 72 53 74   int);.TriggerSt
dea0: 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
deb0: 65 72 55 70 64 61 74 65 53 74 65 70 28 54 6f 6b  erUpdateStep(Tok
dec0: 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
ded0: 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 54 72 69  Expr*, int);.Tri
dee0: 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
def0: 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
df00: 65 70 28 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  ep(Token*, Expr*
df10: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
df20: 65 6c 65 74 65 54 72 69 67 67 65 72 28 54 72 69  eleteTrigger(Tri
df30: 67 67 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  gger*);.int sqli
df40: 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
df50: 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
df60: 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
df70: 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
df80: 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
df90: 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
dfa0: 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
dfb0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
dfc0: 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
dfd0: 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
dfe0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
dff0: 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
e000: 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
e010: 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
e020: 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
e030: 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
e040: 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
e050: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
e060: 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
e070: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
e080: 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
e090: 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
e0a0: 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
e0b0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
e0c0: 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
e0d0: 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
e0e0: 78 74 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  xt*);.#else.# de
e0f0: 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
e100: 52 65 61 64 28 61 2c 62 2c 63 29 0a 23 20 64 65  Read(a,b,c).# de
e110: 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
e120: 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
e130: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
e140: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
e150: 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
e160: 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
e170: 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
e180: 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
e190: 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
e1a0: 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
e1b0: 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
e1c0: 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
e1d0: 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
e1e0: 68 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  h(Parse*, Token*
e1f0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  );.int sqlite3Bt
e200: 72 65 65 46 61 63 74 6f 72 79 28 63 6f 6e 73 74  reeFactory(const
e210: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f 6e   sqlite *db, con
e220: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
e230: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
e240: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d             int m
e250: 6f 64 65 2c 20 69 6e 74 20 6e 50 67 2c 20 42 74  ode, int nPg, Bt
e260: 72 65 65 20 2a 2a 70 70 42 74 72 65 65 29 3b 0a  ree **ppBtree);.
e270: 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 49 6e  int sqlite3FixIn
e280: 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
e290: 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
e2a0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
e2b0: 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
e2c0: 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
e2d0: 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
e2e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
e2f0: 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
e300: 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
e310: 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
e320: 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
e330: 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
e340: 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
e350: 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
e360: 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
e370: 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
e380: 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 64  TriggerStep*);.d
e390: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 41 74 6f  ouble sqlite3Ato
e3a0: 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
e3b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 29 3b   const char **);
e3c0: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 73  .char *sqlite3_s
e3d0: 6e 70 72 69 6e 74 66 28 69 6e 74 2c 63 68 61 72  nprintf(int,char
e3e0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  *,const char*,..
e3f0: 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  .);.int sqlite3F
e400: 69 74 73 49 6e 33 32 42 69 74 73 28 63 6f 6e 73  itsIn32Bits(cons
e410: 74 20 63 68 61 72 20 2a 29 3b 0a 0a 75 6e 73 69  t char *);..unsi
e420: 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74  gned char *sqlit
e430: 65 33 75 74 66 31 36 74 6f 38 28 63 6f 6e 73 74  e3utf16to8(const
e440: 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
e450: 74 20 4e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  t N);.void *sqli
e460: 74 65 33 75 74 66 38 74 6f 31 36 62 65 28 63 6f  te3utf8to16be(co
e470: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
e480: 72 20 2a 70 49 6e 2c 20 69 6e 74 20 4e 29 3b 0a  r *pIn, int N);.
e490: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 75 74 66  void *sqlite3utf
e4a0: 38 74 6f 31 36 6c 65 28 63 6f 6e 73 74 20 75 6e  8to16le(const un
e4b0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 49 6e  signed char *pIn
e4c0: 2c 20 69 6e 74 20 4e 29 3b 0a 76 6f 69 64 20 73  , int N);.void s
e4d0: 71 6c 69 74 65 33 75 74 66 31 36 74 6f 31 36 6c  qlite3utf16to16l
e4e0: 65 28 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  e(void *pData, i
e4f0: 6e 74 20 4e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt N);.void sqli
e500: 74 65 33 75 74 66 31 36 74 6f 31 36 62 65 28 76  te3utf16to16be(v
e510: 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
e520: 4e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  N);.int sqlite3P
e530: 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
e540: 64 20 63 68 61 72 20 2a 2c 20 75 36 34 29 3b 0a  d char *, u64);.
e550: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61  int sqlite3GetVa
e560: 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
e570: 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
e580: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
e590: 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
e5a0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
e5b0: 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
e5c0: 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
e5d0: 36 34 20 76 29 3b 0a 63 68 61 72 20 73 71 6c 69  64 v);.char sqli
e5e0: 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28  te3AffinityType(
e5f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
e600: 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
e610: 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
e620: 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
e630: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
e640: 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28  ableAffinityStr(
e650: 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  Vdbe *, Table *)
e660: 3b 0a 0a                                         ;..