Grammar: Support ON INSERT in foreign key clauses

Allow ON INSERT in foreign key clauses like this:
CREATE TABLE x
(
	y INTEGER REFERENCES ref(id) ON INSERT CASCADE
)
Note that ON INSERT is allowed by SQLite but missing in the SQLite
documentation.

This partially fixes EoD's problem in issue #63.
This commit is contained in:
Martin Kleusberg
2014-07-26 20:42:20 +02:00
parent 4cafe43525
commit 7f007824fa
5 changed files with 384 additions and 370 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -78,10 +78,10 @@ protected:
private:
static const char* tokenNames[];
#ifndef NO_STATIC_CONSTS
static const int NUM_TOKENS = 106;
static const int NUM_TOKENS = 107;
#else
enum {
NUM_TOKENS = 106
NUM_TOKENS = 107
};
#endif

View File

@@ -50,6 +50,7 @@ tokens {
IGNORE="IGNORE";
IN="IN";
INITIALLY="INITIALLY";
INSERT="INSERT";
IMMEDIATE="IMMEDIATE";
IS="IS";
NO="NO";
@@ -377,7 +378,7 @@ conflictclause
foreignkeyclause
:
REFERENCES tablename (LPAREN columnname (COMMA columnname)* RPAREN)?
( ON (DELETE | UPDATE)
( ON (DELETE | UPDATE | INSERT)
( SET (NULL_T | DEFAULT)
| CASCADE
| RESTRICT

View File

@@ -49,71 +49,72 @@ struct CUSTOM_API sqlite3TokenTypes {
IGNORE = 38,
IN = 39,
INITIALLY = 40,
IMMEDIATE = 41,
IS = 42,
NO = 43,
NOT = 44,
NULL_T = 45,
MATCH = 46,
EXISTS = 47,
ON = 48,
PRIMARY = 49,
RAISE = 50,
REFERENCES = 51,
REGEXP = 52,
REPLACE = 53,
RESTRICT = 54,
ROLLBACK = 55,
ROWID = 56,
SET = 57,
TEMPORARY = 58,
TEMP = 59,
THEN = 60,
UNIQUE = 61,
UPDATE = 62,
WHEN = 63,
WITHOUT = 64,
TYPE_NAME = 65,
COLUMNDEF = 66,
COLUMNCONSTRAINT = 67,
TABLECONSTRAINT = 68,
CREATETABLE = 69,
KEYWORDASTABLENAME = 70,
KEYWORDASCOLUMNNAME = 71,
DIGIT = 72,
DOT = 73,
ID = 74,
QUOTEDID = 75,
QUOTEDLITERAL = 76,
NUMERIC = 77,
NL = 78,
COMMENT = 79,
WS = 80,
STRINGLITERAL = 81,
LPAREN = 82,
RPAREN = 83,
COMMA = 84,
SEMI = 85,
PLUS = 86,
MINUS = 87,
STAR = 88,
TILDE = 89,
AMPERSAND = 90,
BITOR = 91,
OROP = 92,
EQUAL = 93,
EQUAL2 = 94,
GREATER = 95,
GREATEREQUAL = 96,
LOWER = 97,
LOWEREQUAL = 98,
UNEQUAL = 99,
UNEQUAL2 = 100,
BITWISELEFT = 101,
BITWISERIGHT = 102,
SELECT = 103,
SLASH = 104,
PERCENT = 105,
INSERT = 41,
IMMEDIATE = 42,
IS = 43,
NO = 44,
NOT = 45,
NULL_T = 46,
MATCH = 47,
EXISTS = 48,
ON = 49,
PRIMARY = 50,
RAISE = 51,
REFERENCES = 52,
REGEXP = 53,
REPLACE = 54,
RESTRICT = 55,
ROLLBACK = 56,
ROWID = 57,
SET = 58,
TEMPORARY = 59,
TEMP = 60,
THEN = 61,
UNIQUE = 62,
UPDATE = 63,
WHEN = 64,
WITHOUT = 65,
TYPE_NAME = 66,
COLUMNDEF = 67,
COLUMNCONSTRAINT = 68,
TABLECONSTRAINT = 69,
CREATETABLE = 70,
KEYWORDASTABLENAME = 71,
KEYWORDASCOLUMNNAME = 72,
DIGIT = 73,
DOT = 74,
ID = 75,
QUOTEDID = 76,
QUOTEDLITERAL = 77,
NUMERIC = 78,
NL = 79,
COMMENT = 80,
WS = 81,
STRINGLITERAL = 82,
LPAREN = 83,
RPAREN = 84,
COMMA = 85,
SEMI = 86,
PLUS = 87,
MINUS = 88,
STAR = 89,
TILDE = 90,
AMPERSAND = 91,
BITOR = 92,
OROP = 93,
EQUAL = 94,
EQUAL2 = 95,
GREATER = 96,
GREATEREQUAL = 97,
LOWER = 98,
LOWEREQUAL = 99,
UNEQUAL = 100,
UNEQUAL2 = 101,
BITWISELEFT = 102,
BITWISERIGHT = 103,
SELECT = 104,
SLASH = 105,
PERCENT = 106,
NULL_TREE_LOOKAHEAD = 3
};
#ifdef __cplusplus