wip
This commit is contained in:
parent
dc314830d2
commit
b121cd1fc1
4 changed files with 53255 additions and 63447 deletions
59
grammar.js
59
grammar.js
|
@ -27,6 +27,14 @@ module.exports = grammar({
|
|||
// NOTE(chrde): https://github.com/tree-sitter/tree-sitter-javascript/blob/1ddbf1588c353edab37791cdcc9f17e56fb4ea73/grammar.js#L9
|
||||
extras: ($) => [$.comment, /[\s\uFEFF\u2060\u200B\u00A0]/],
|
||||
|
||||
conflicts: ($) => [
|
||||
[$.op_expression],
|
||||
[$.select_statement],
|
||||
[$.from_item],
|
||||
[$.select_group_by, $._value_expression],
|
||||
[$.time_expression, $.op_expression],
|
||||
],
|
||||
|
||||
rules: {
|
||||
source_file: ($) =>
|
||||
repeat(choice($.psql_statement, seq($._statement, ";"))),
|
||||
|
@ -664,7 +672,6 @@ module.exports = grammar({
|
|||
do_block: ($) => seq(kw("do"), $.block),
|
||||
|
||||
select_statement: ($) =>
|
||||
prec.left(
|
||||
seq(
|
||||
optional($.with_query),
|
||||
kw("select"),
|
||||
|
@ -677,7 +684,6 @@ module.exports = grammar({
|
|||
optional($.select_order_by),
|
||||
optional($._select_limit_offset),
|
||||
optional($.into)
|
||||
)
|
||||
),
|
||||
|
||||
with_query: ($) => seq(kw("with"), commaSep1($.with_query_item)),
|
||||
|
@ -718,8 +724,6 @@ module.exports = grammar({
|
|||
|
||||
// TODO(chrde): rollup, cube, grouping sets
|
||||
select_group_by: ($) =>
|
||||
prec(
|
||||
1,
|
||||
seq(
|
||||
kw("group"),
|
||||
kw("by"),
|
||||
|
@ -727,7 +731,6 @@ module.exports = grammar({
|
|||
seq("(", commaSep1($._value_expression), ")"),
|
||||
commaSep1($._value_expression)
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
select_order_by: ($) =>
|
||||
|
@ -746,12 +749,10 @@ module.exports = grammar({
|
|||
select_from: ($) => seq(kw("from"), commaSep1($.from_item)),
|
||||
|
||||
from_item: ($) =>
|
||||
prec.left(
|
||||
seq(
|
||||
// TODO(chrde): https://www.postgresql.org/docs/current/sql-select.html
|
||||
choice($.from_select, $.from_table, $.from_function),
|
||||
repeat($.join_item)
|
||||
)
|
||||
),
|
||||
|
||||
from_select: ($) =>
|
||||
|
@ -773,12 +774,10 @@ module.exports = grammar({
|
|||
),
|
||||
|
||||
join_item: ($) =>
|
||||
prec.left(
|
||||
choice(
|
||||
seq(kw("natural"), $.join_type, $.from_item),
|
||||
seq($.join_type, $.from_item, $.join_condition),
|
||||
seq(kw("cross"), kw("join"), $.from_item)
|
||||
)
|
||||
),
|
||||
|
||||
join_condition: ($) =>
|
||||
|
@ -913,8 +912,7 @@ module.exports = grammar({
|
|||
|
||||
type_length: ($) => seq("(", $.number, ")"),
|
||||
|
||||
string: ($) =>
|
||||
seq("'", repeat(choice(prec(1, /''/), prec(2, /[^']/))), "'"),
|
||||
string: ($) => seq("'", repeat(choice(/''/, /[^']/)), "'"),
|
||||
|
||||
// NOTE(chrde): taken from https://github.com/tree-sitter/tree-sitter-javascript/blob/1ddbf1588c353edab37791cdcc9f17e56fb4ea73/grammar.js#L899
|
||||
comment: ($) =>
|
||||
|
@ -1003,37 +1001,20 @@ module.exports = grammar({
|
|||
|
||||
op_expression: ($) =>
|
||||
choice(
|
||||
prec.left(12, seq($._value_expression, $.cast, $._type)),
|
||||
seq($._value_expression, $.cast, $._type),
|
||||
// array access
|
||||
prec.right(10, seq(choice($.minus, $.plus), $._value_expression)),
|
||||
seq(choice($.minus, $.plus), $._value_expression),
|
||||
// ^
|
||||
prec.left(
|
||||
8,
|
||||
seq($._value_expression, choice("*", "/", "%"), $._value_expression)
|
||||
),
|
||||
prec.left(
|
||||
7,
|
||||
seq($._value_expression, choice("-", "+"), $._value_expression)
|
||||
),
|
||||
prec.left(6, seq($._value_expression, $.other_op, $._value_expression)),
|
||||
prec.left(
|
||||
5,
|
||||
seq($._value_expression, $.contains_op, $._value_expression)
|
||||
),
|
||||
prec.left(
|
||||
4,
|
||||
seq($._value_expression, $.comparison_op, $._value_expression)
|
||||
),
|
||||
prec.left(
|
||||
3,
|
||||
seq($._value_expression, $.comparison_kw, $._value_expression)
|
||||
),
|
||||
prec.left(3, seq($._value_expression, $.comparison_null)),
|
||||
prec.right(2, seq($.not, $._value_expression)),
|
||||
prec.left(
|
||||
1,
|
||||
seq($._value_expression, choice("*", "/", "%"), $._value_expression),
|
||||
seq($._value_expression, choice("-", "+"), $._value_expression),
|
||||
seq($._value_expression, $.other_op, $._value_expression),
|
||||
seq($._value_expression, $.contains_op, $._value_expression),
|
||||
seq($._value_expression, $.comparison_op, $._value_expression),
|
||||
seq($._value_expression, $.comparison_kw, $._value_expression),
|
||||
seq($._value_expression, $.comparison_null),
|
||||
seq($.not, $._value_expression),
|
||||
|
||||
seq($._value_expression, choice($.and, $.or), $._value_expression)
|
||||
)
|
||||
),
|
||||
|
||||
_list_of_identifiers: ($) => seq("(", commaSep($.identifier), ")"),
|
||||
|
|
|
@ -4294,9 +4294,6 @@
|
|||
]
|
||||
},
|
||||
"select_statement": {
|
||||
"type": "PREC_LEFT",
|
||||
"value": 0,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -4445,7 +4442,6 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"with_query": {
|
||||
"type": "SEQ",
|
||||
|
@ -4711,9 +4707,6 @@
|
|||
]
|
||||
},
|
||||
"select_group_by": {
|
||||
"type": "PREC",
|
||||
"value": 1,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -4793,7 +4786,6 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"select_order_by": {
|
||||
"type": "SEQ",
|
||||
|
@ -4939,9 +4931,6 @@
|
|||
]
|
||||
},
|
||||
"from_item": {
|
||||
"type": "PREC_LEFT",
|
||||
"value": 0,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -4969,7 +4958,6 @@
|
|||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"from_select": {
|
||||
"type": "SEQ",
|
||||
|
@ -5119,9 +5107,6 @@
|
|||
]
|
||||
},
|
||||
"join_item": {
|
||||
"type": "PREC_LEFT",
|
||||
"value": 0,
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
|
@ -5176,7 +5161,6 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"join_condition": {
|
||||
"type": "CHOICE",
|
||||
|
@ -6001,21 +5985,13 @@
|
|||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "PREC",
|
||||
"value": 1,
|
||||
"content": {
|
||||
"type": "PATTERN",
|
||||
"value": "''"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC",
|
||||
"value": 2,
|
||||
"content": {
|
||||
"type": "PATTERN",
|
||||
"value": "[^']"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -6537,9 +6513,6 @@
|
|||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 12,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6555,12 +6528,8 @@
|
|||
"name": "_type"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_RIGHT",
|
||||
"value": 10,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6581,12 +6550,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 8,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6615,12 +6580,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 7,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6645,12 +6606,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 6,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6666,12 +6623,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 5,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6687,12 +6640,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 4,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6708,12 +6657,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 3,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6729,12 +6674,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 3,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6746,12 +6687,8 @@
|
|||
"name": "comparison_null"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_RIGHT",
|
||||
"value": 2,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6763,12 +6700,8 @@
|
|||
"name": "_value_expression"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "PREC_LEFT",
|
||||
"value": 1,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
|
@ -6794,7 +6727,6 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"_list_of_identifiers": {
|
||||
|
@ -7047,7 +6979,25 @@
|
|||
"value": "[\\s\\uFEFF\\u2060\\u200B\\u00A0]"
|
||||
}
|
||||
],
|
||||
"conflicts": [],
|
||||
"conflicts": [
|
||||
[
|
||||
"op_expression"
|
||||
],
|
||||
[
|
||||
"select_statement"
|
||||
],
|
||||
[
|
||||
"from_item"
|
||||
],
|
||||
[
|
||||
"select_group_by",
|
||||
"_value_expression"
|
||||
],
|
||||
[
|
||||
"time_expression",
|
||||
"op_expression"
|
||||
]
|
||||
],
|
||||
"precedences": [],
|
||||
"externals": [],
|
||||
"inline": [],
|
||||
|
|
115507
src/parser.c
115507
src/parser.c
File diff suppressed because it is too large
Load diff
|
@ -223,7 +223,13 @@ alter table foo add constraint u_bar unique(bar);
|
|||
(table_constraint
|
||||
(identifier)
|
||||
(table_constraint_ty
|
||||
(identifier)))))))
|
||||
(identifier)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
column drop constraint
|
||||
|
|
Loading…
Add table
Reference in a new issue