Add COMMENT ON statement support

pull/315/head
Maksim Novikov 2022-06-12 15:48:50 +07:00
parent aabbcf3fe3
commit 2bce477da0
No known key found for this signature in database
GPG Key ID: 2F1C320B72DA6C55
5 changed files with 35115 additions and 34012 deletions

@ -96,10 +96,25 @@ module.exports = grammar({
$.create_schema_statement,
$.create_role_statement,
$.create_extension_statement,
$.comment_statement,
),
optional(";"),
),
comment_statement: $ =>
seq(
kw("COMMENT ON"),
choice(
seq(
choice(kw("EXTENSION"), kw("SCHEMA"), kw("TABLE")),
$._identifier,
),
seq(kw("FUNCTION"), $.function_call),
),
kw("IS"),
choice($.string, $.NULL),
),
begin_statement: $ =>
seq(kw("BEGIN"), optional(choice(kw("WORK"), kw("TRANSACTION")))),
commit_statement: $ =>
@ -577,7 +592,7 @@ module.exports = grammar({
_quoted_identifier: $ =>
choice(
seq("`", field("name", /[^`]*/), "`"), // MySQL style quoting
seq('"', field("name", /[^"]*/), '"'), // ANSI QUOTES
seq('"', field("name", /(""|[^"])*/), '"'), // ANSI QUOTES
),
identifier: $ => choice($._unquoted_identifier, $._quoted_identifier),
dotted_name: $ => prec.left(PREC.primary, sep2($.identifier, ".")),

115
src/grammar.json vendored

@ -93,6 +93,10 @@
{
"type": "SYMBOL",
"name": "create_extension_statement"
},
{
"type": "SYMBOL",
"name": "comment_statement"
}
]
},
@ -110,6 +114,115 @@
}
]
},
"comment_statement": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[cC][oO][mM][mM][eE][nN][tT]"
},
{
"type": "PATTERN",
"value": "[oO][nN]"
}
]
},
"named": false,
"value": "COMMENT_ON"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][xX][tT][eE][nN][sS][iI][oO][nN]"
},
"named": false,
"value": "EXTENSION"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][cC][hH][eE][mM][aA]"
},
"named": false,
"value": "SCHEMA"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[tT][aA][bB][lL][eE]"
},
"named": false,
"value": "TABLE"
}
]
},
{
"type": "SYMBOL",
"name": "_identifier"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[fF][uU][nN][cC][tT][iI][oO][nN]"
},
"named": false,
"value": "FUNCTION"
},
{
"type": "SYMBOL",
"name": "function_call"
}
]
}
]
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[iI][sS]"
},
"named": false,
"value": "IS"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "NULL"
}
]
}
]
},
"begin_statement": {
"type": "SEQ",
"members": [
@ -4751,7 +4864,7 @@
"name": "name",
"content": {
"type": "PATTERN",
"value": "[^\"]*"
"value": "(\"\"|[^\"])*"
}
},
{

@ -1352,6 +1352,37 @@
]
}
},
{
"type": "comment_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "NULL",
"named": true
},
{
"type": "dotted_name",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "string",
"named": true
}
]
}
},
{
"type": "commit_statement",
"named": true,
@ -3832,6 +3863,10 @@
"type": "begin_statement",
"named": true
},
{
"type": "comment_statement",
"named": true
},
{
"type": "commit_statement",
"named": true
@ -4893,6 +4928,10 @@
"type": "COLUMN",
"named": false
},
{
"type": "COMMENT_ON",
"named": false
},
{
"type": "COMMIT",
"named": false
@ -4997,6 +5036,10 @@
"type": "FULL",
"named": false
},
{
"type": "FUNCTION",
"named": false
},
{
"type": "GRANT",
"named": false

68921
src/parser.c vendored

File diff suppressed because it is too large Load Diff

@ -2287,3 +2287,34 @@ CREATE EXTENSION btree_gist
(identifier)
(schema
(identifier))))
================================================================================
COMMENT STATEMENT
================================================================================
COMMENT ON TABLE mytable IS 'This is my table.';
COMMENT ON TABLE mytable IS NULL;
COMMENT ON SCHEMA myschema IS 'my schema tables';
COMMENT ON FUNCTION public."Test]()&*^!@""'`\/#"() IS 'some comment';
--------------------------------------------------------------------------------
(source_file
(comment_statement
(identifier)
(string
(content)))
(comment_statement
(identifier)
(NULL))
(comment_statement
(identifier)
(string
(content)))
(comment_statement
(function_call
(dotted_name
(identifier)
(identifier)))
(string
(content))))