Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support row constructors #45

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Next Next commit
Support CREATE VIEW statement
pplam committed Jun 26, 2022
commit a9b8dcea43a3bb6368d66d069c0823160708b525
28 changes: 28 additions & 0 deletions grammar.js
Original file line number Diff line number Diff line change
@@ -109,6 +109,7 @@ module.exports = grammar({
$.create_trigger_statement,
$.create_function_statement,
$.comment_statement,
$.create_view_statement,
),
optional(";"),
),
@@ -136,6 +137,7 @@ module.exports = grammar({
$.create_extension_statement,
$.return_statement,
$.declare_statement,
$.create_view_statement,
),
optional(";"),
),
@@ -798,6 +800,32 @@ module.exports = grammar({
")",
),

create_view_statement: $ =>
prec.right(
seq(
kw("CREATE"),
optional(createCaseInsensitiveRegex("OR REPLACE")),
optional(choice(kw("TEMPORARY"), kw("TEMP"))),
kw("VIEW"),
$._identifier,
optional($.view_columns),
optional($.view_options),
$.view_body,
optional($.view_check_option),
),
),
view_columns: $ => seq("(", commaSep1($._identifier), ")"),
// PostgreSQL currently only support the SECURITY_BARRIER option
view_options: $ => seq(kw("WITH"), "(", commaSep1($.identifier), ")"),
// MySQL support
view_check_option: $ =>
seq(
kw("WITH"),
optional(choice(kw("CASCADED"), kw("LOCAL"))),
kw("CHECK OPTION"),
),
view_body: $ => seq(kw("AS"), choice($.select_statement, $.values_clause)),

// SELECT
_select_statement: $ =>
seq(
297 changes: 297 additions & 0 deletions src/grammar.json
Original file line number Diff line number Diff line change
@@ -109,6 +109,10 @@
{
"type": "SYMBOL",
"name": "comment_statement"
},
{
"type": "SYMBOL",
"name": "create_view_statement"
}
]
},
@@ -210,6 +214,10 @@
{
"type": "SYMBOL",
"name": "declare_statement"
},
{
"type": "SYMBOL",
"name": "create_view_statement"
}
]
},
@@ -7149,6 +7157,295 @@
}
]
},
"create_view_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][rR][eE][aA][tT][eE]"
},
"named": false,
"value": "CREATE"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[oO][rR][ ][rR][eE][pP][lL][aA][cC][eE]"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[tT][eE][mM][pP][oO][rR][aA][rR][yY]"
},
"named": false,
"value": "TEMPORARY"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[tT][eE][mM][pP]"
},
"named": false,
"value": "TEMP"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[vV][iI][eE][wW]"
},
"named": false,
"value": "VIEW"
},
{
"type": "SYMBOL",
"name": "_identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "view_columns"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "view_options"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "view_body"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "view_check_option"
},
{
"type": "BLANK"
}
]
}
]
}
},
"view_columns": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_identifier"
}
]
}
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"view_options": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[wW][iI][tT][hH]"
},
"named": false,
"value": "WITH"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"view_check_option": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[wW][iI][tT][hH]"
},
"named": false,
"value": "WITH"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][aA][sS][cC][aA][dD][eE][dD]"
},
"named": false,
"value": "CASCADED"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[lL][oO][cC][aA][lL]"
},
"named": false,
"value": "LOCAL"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "[cC][hH][eE][cC][kK]"
},
{
"type": "PATTERN",
"value": "[oO][pP][tT][iI][oO][nN]"
}
]
},
"named": false,
"value": "CHECK_OPTION"
}
]
},
"view_body": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][sS]"
},
"named": false,
"value": "AS"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "select_statement"
},
{
"type": "SYMBOL",
"name": "values_clause"
}
]
}
]
},
"_select_statement": {
"type": "SEQ",
"members": [
Loading