Skip to content

Commit

Permalink
Improve the INSERT statement
Browse files Browse the repository at this point in the history
  • Loading branch information
pplam committed Jun 30, 2022
1 parent d636a71 commit 33a6c85
Show file tree
Hide file tree
Showing 5 changed files with 1,380,381 additions and 927,148 deletions.
31 changes: 27 additions & 4 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -1324,10 +1324,33 @@ module.exports = grammar({
seq(
kw("INSERT"),
kw("INTO"),
$._identifier,
optional($.identifier_list),
choice($.values_clause, $.select_statement, $.set_clause),
),
field("table_name", $._identifier),
optional(seq(kw("AS"), $.alias)),
optional(alias($.identifier_list, $.column_names)),
optional($.overriding_value),
choice(
$.default_values,
$.values_clause,
$.select_statement,
$.set_clause,
),
optional($.on_conflict),
optional($.returning_clause),
),
overriding_value: $ =>
seq(kw("OVERRIDING"), choice(kw("SYSTEM"), kw("USER")), kw("VALUE")),
default_values: $ => kw("DEFAULT VALUES"),
on_conflict: $ =>
seq(kw("ON CONFLICT"), optional($.conflict_target), $.conflict_action),
conflict_target: $ =>
choice(seq($.index_item, optional($.where_clause)), $.on_constraint),
on_constraint: $ =>
seq(kw("ON CONSTRAINT"), field("constraint_name", $._identifier)),
conflict_action: $ => choice($.do_nothing, $.do_update),
do_nothing: $ => kw("DO NOTHING"),
do_update: $ =>
seq(kw("DO UPDATE"), $.set_clause, optional($.where_clause)),
returning_clause: $ => seq(kw("RETURNING"), $._aliasable_expression),
values_clause: $ =>
seq(
kw("VALUES"),
Expand Down
333 changes: 330 additions & 3 deletions src/grammar.json
Original file line number Diff line number Diff line change
Expand Up @@ -12548,15 +12548,62 @@
"value": "INTO"
},
{
"type": "SYMBOL",
"name": "_identifier"
"type": "FIELD",
"name": "table_name",
"content": {
"type": "SYMBOL",
"name": "_identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][sS]"
},
"named": false,
"value": "AS"
},
{
"type": "SYMBOL",
"name": "alias"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "identifier_list"
},
"named": true,
"value": "column_names"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier_list"
"name": "overriding_value"
},
{
"type": "BLANK"
Expand All @@ -12566,6 +12613,10 @@
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "default_values"
},
{
"type": "SYMBOL",
"name": "values_clause"
Expand All @@ -12579,6 +12630,282 @@
"name": "set_clause"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "on_conflict"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "returning_clause"
},
{
"type": "BLANK"
}
]
}
]
},
"overriding_value": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[oO][vV][eE][rR][rR][iI][dD][iI][nN][gG]"
},
"named": false,
"value": "OVERRIDING"
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][yY][sS][tT][eE][mM]"
},
"named": false,
"value": "SYSTEM"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[uU][sS][eE][rR]"
},
"named": false,
"value": "USER"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[vV][aA][lL][uU][eE]"
},
"named": false,
"value": "VALUE"
}
]
},
"default_values": {
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[dD][eE][fF][aA][uU][lL][tT]"
},
{
"type": "PATTERN",
"value": "[vV][aA][lL][uU][eE][sS]"
}
]
},
"named": false,
"value": "DEFAULT_VALUES"
},
"on_conflict": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[oO][nN]"
},
{
"type": "PATTERN",
"value": "[cC][oO][nN][fF][lL][iI][cC][tT]"
}
]
},
"named": false,
"value": "ON_CONFLICT"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "conflict_target"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "conflict_action"
}
]
},
"conflict_target": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "index_item"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "where_clause"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "on_constraint"
}
]
},
"on_constraint": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[oO][nN]"
},
{
"type": "PATTERN",
"value": "[cC][oO][nN][sS][tT][rR][aA][iI][nN][tT]"
}
]
},
"named": false,
"value": "ON_CONSTRAINT"
},
{
"type": "FIELD",
"name": "constraint_name",
"content": {
"type": "SYMBOL",
"name": "_identifier"
}
}
]
},
"conflict_action": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "do_nothing"
},
{
"type": "SYMBOL",
"name": "do_update"
}
]
},
"do_nothing": {
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[dD][oO]"
},
{
"type": "PATTERN",
"value": "[nN][oO][tT][hH][iI][nN][gG]"
}
]
},
"named": false,
"value": "DO_NOTHING"
},
"do_update": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[dD][oO]"
},
{
"type": "PATTERN",
"value": "[uU][pP][dD][aA][tT][eE]"
}
]
},
"named": false,
"value": "DO_UPDATE"
},
{
"type": "SYMBOL",
"name": "set_clause"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "where_clause"
},
{
"type": "BLANK"
}
]
}
]
},
"returning_clause": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[rR][eE][tT][uU][rR][nN][iI][nN][gG]"
},
"named": false,
"value": "RETURNING"
},
{
"type": "SYMBOL",
"name": "_aliasable_expression"
}
]
},
Expand Down
Loading

0 comments on commit 33a6c85

Please sign in to comment.