Compare commits
2 Commits
acda125c15
...
09f0ec4c3f
Author | SHA1 | Date |
---|---|---|
Dmitriy Pleshevskiy | 09f0ec4c3f | |
Dmitriy Pleshevskiy | de04a49b20 |
78
grammar.js
78
grammar.js
|
@ -34,20 +34,12 @@ module.exports = grammar({
|
|||
),
|
||||
|
||||
column_definitions: ($) =>
|
||||
seq(
|
||||
"(",
|
||||
optional(
|
||||
commaSepRepeat1(choice($.column_definition /*, $.table_constraint*/))
|
||||
),
|
||||
")"
|
||||
parens(
|
||||
optional(commaSep1(choice($.column_definition, $.table_constraint)))
|
||||
),
|
||||
|
||||
column_definition: ($) =>
|
||||
seq(
|
||||
field("name", $.identifier),
|
||||
field("datatype", $._type),
|
||||
repeat($.column_constraint)
|
||||
),
|
||||
seq(field("name", $.identifier), $.type, repeat($.column_constraint)),
|
||||
|
||||
column_constraint: ($) =>
|
||||
seq(
|
||||
|
@ -57,17 +49,12 @@ module.exports = grammar({
|
|||
$.keyword_null,
|
||||
seq($.keyword_default, $._expression),
|
||||
// TODO: add index_parameters in UNIQUE, PRIMARY KEY
|
||||
seq(
|
||||
$.keyword_unique,
|
||||
optional(
|
||||
seq($.keyword_nulls, optional($.keyword_not), $.keyword_distinct)
|
||||
)
|
||||
),
|
||||
$._unique_constraint,
|
||||
$._primary_key,
|
||||
seq(
|
||||
$.keyword_references,
|
||||
$.table_reference,
|
||||
optional(seq("(", field("refcolumn", $.identifier), ")")),
|
||||
optional($.ref_column),
|
||||
optional($._foreign_key_match),
|
||||
optional(
|
||||
choice(
|
||||
|
@ -82,6 +69,44 @@ module.exports = grammar({
|
|||
// TODO: DEFERRABLE
|
||||
),
|
||||
|
||||
ref_column: ($) => parens(field("name", $.identifier)),
|
||||
|
||||
table_constraint: ($) =>
|
||||
seq(
|
||||
optional(seq($.keyword_constraint, field("name", $.identifier))),
|
||||
choice(
|
||||
seq($._unique_constraint, $.column_list),
|
||||
seq($._primary_key, $.column_list),
|
||||
seq(
|
||||
$._foreign_key,
|
||||
$.column_list,
|
||||
$.keyword_references,
|
||||
$.table_reference,
|
||||
optional(alias($.column_list, $.ref_column_list)),
|
||||
optional($._foreign_key_match),
|
||||
optional(
|
||||
choice(
|
||||
seq($._foreign_key_on_delete, $._foreign_key_on_update),
|
||||
seq($._foreign_key_on_update, $._foreign_key_on_delete)
|
||||
)
|
||||
)
|
||||
)
|
||||
// TODO: CHECK
|
||||
// TODO: EXCLUDE
|
||||
)
|
||||
// TODO: DEFERRABLE
|
||||
),
|
||||
|
||||
column_list: ($) => parens(commaSep1(field("name", $.identifier))),
|
||||
|
||||
_unique_constraint: ($) =>
|
||||
seq(
|
||||
$.keyword_unique,
|
||||
optional(
|
||||
seq($.keyword_nulls, optional($.keyword_not), $.keyword_distinct)
|
||||
)
|
||||
),
|
||||
|
||||
_foreign_key_match: ($) =>
|
||||
seq(
|
||||
$.keyword_match,
|
||||
|
@ -100,7 +125,7 @@ module.exports = grammar({
|
|||
seq(
|
||||
$.keyword_set,
|
||||
choice($.keyword_null, $.keyword_default),
|
||||
optional(seq("(", commaSepRepeat1($.identifier), ")"))
|
||||
optional(parens(commaSep1($.identifier)))
|
||||
)
|
||||
),
|
||||
|
||||
|
@ -126,8 +151,9 @@ module.exports = grammar({
|
|||
),
|
||||
|
||||
// References: https://www.postgresql.org/docs/15/datatype.html
|
||||
_type: ($) =>
|
||||
type: ($) =>
|
||||
choice(
|
||||
field("name", $.identifier),
|
||||
$._type_numeric,
|
||||
$._type_character,
|
||||
$._type_datetime,
|
||||
|
@ -306,8 +332,16 @@ function mkKeyword(word) {
|
|||
return new RegExp(word + "|" + word.toUpperCase());
|
||||
}
|
||||
|
||||
function commaSepRepeat1(field) {
|
||||
return seq(field, repeat(seq(",", field)));
|
||||
function commaSep1(rule) {
|
||||
return sep1(",", rule);
|
||||
}
|
||||
|
||||
function sep1(separator, rule) {
|
||||
return seq(rule, repeat(seq(separator, rule)));
|
||||
}
|
||||
|
||||
function parens(rule) {
|
||||
return seq("(", rule, ")");
|
||||
}
|
||||
|
||||
function parametricType($, type, params = ["size"]) {
|
||||
|
|
348
src/grammar.json
348
src/grammar.json
|
@ -126,6 +126,10 @@
|
|||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "column_definition"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "table_constraint"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -144,6 +148,10 @@
|
|||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "column_definition"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "table_constraint"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -175,12 +183,8 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "datatype",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "_type"
|
||||
}
|
||||
"type": "SYMBOL",
|
||||
"name": "type"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
|
@ -244,46 +248,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_unique"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_nulls"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_not"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_distinct"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
"type": "SYMBOL",
|
||||
"name": "_unique_constraint"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
|
@ -304,25 +270,8 @@
|
|||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "("
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "refcolumn",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ")"
|
||||
}
|
||||
]
|
||||
"type": "SYMBOL",
|
||||
"name": "ref_column"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
|
@ -386,6 +335,265 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"ref_column": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "("
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "name",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ")"
|
||||
}
|
||||
]
|
||||
},
|
||||
"table_constraint": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_constraint"
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "name",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_unique_constraint"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "column_list"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_primary_key"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "column_list"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_foreign_key"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "column_list"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_references"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "table_reference"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "ALIAS",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "column_list"
|
||||
},
|
||||
"named": true,
|
||||
"value": "ref_column_list"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_foreign_key_match"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_foreign_key_on_delete"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_foreign_key_on_update"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_foreign_key_on_update"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_foreign_key_on_delete"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"column_list": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "("
|
||||
},
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "name",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ","
|
||||
},
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "name",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ")"
|
||||
}
|
||||
]
|
||||
},
|
||||
"_unique_constraint": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_unique"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_nulls"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_not"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "keyword_distinct"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"_foreign_key_match": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
|
@ -612,9 +820,17 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"_type": {
|
||||
"type": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "FIELD",
|
||||
"name": "name",
|
||||
"content": {
|
||||
"type": "SYMBOL",
|
||||
"name": "identifier"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_type_numeric"
|
||||
|
|
|
@ -43,16 +43,6 @@
|
|||
"named": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"refcolumn": {
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"children": {
|
||||
|
@ -131,6 +121,10 @@
|
|||
"type": "literal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "ref_column",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "referencial_action",
|
||||
"named": true
|
||||
|
@ -146,104 +140,6 @@
|
|||
"type": "column_definition",
|
||||
"named": true,
|
||||
"fields": {
|
||||
"datatype": {
|
||||
"multiple": false,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "char",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "decimal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "double",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_bigint",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_bigserial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_boolean",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_bytea",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_date",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_datetime",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_integer",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_money",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_real",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_serial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_smallint",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_smallserial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_text",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_time",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_timestamp",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_timestamptz",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_uuid",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_xml",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "numeric",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "varchar",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": {
|
||||
"multiple": false,
|
||||
"required": true,
|
||||
|
@ -257,11 +153,15 @@
|
|||
},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": false,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "column_constraint",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "type",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -277,10 +177,30 @@
|
|||
{
|
||||
"type": "column_definition",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "table_constraint",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "column_list",
|
||||
"named": true,
|
||||
"fields": {
|
||||
"name": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "create_table",
|
||||
"named": true,
|
||||
|
@ -481,6 +401,38 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ref_column",
|
||||
"named": true,
|
||||
"fields": {
|
||||
"name": {
|
||||
"multiple": false,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ref_column_list",
|
||||
"named": true,
|
||||
"fields": {
|
||||
"name": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "referencial_action",
|
||||
"named": true,
|
||||
|
@ -554,6 +506,108 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "table_constraint",
|
||||
"named": true,
|
||||
"fields": {
|
||||
"name": {
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "column_list",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_constraint",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_delete",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_distinct",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_foreign",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_full",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_key",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_match",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_not",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_nulls",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_on",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_partial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_primary",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_references",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_simple",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_unique",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_update",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "ref_column_list",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "referencial_action",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "table_reference",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "table_reference",
|
||||
"named": true,
|
||||
|
@ -580,6 +634,120 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "type",
|
||||
"named": true,
|
||||
"fields": {
|
||||
"name": {
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "identifier",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"children": {
|
||||
"multiple": false,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "char",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "decimal",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "double",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_bigint",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_bigserial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_boolean",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_bytea",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_date",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_datetime",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_integer",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_money",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_real",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_serial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_smallint",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_smallserial",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_text",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_time",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_timestamp",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_timestamptz",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_uuid",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "keyword_xml",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "numeric",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "varchar",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "varchar",
|
||||
"named": true,
|
||||
|
|
4470
src/parser.c
4470
src/parser.c
File diff suppressed because it is too large
Load Diff
|
@ -135,33 +135,33 @@ create table foo (
|
|||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_boolean)
|
||||
(type (keyword_boolean))
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (numeric
|
||||
(type (numeric
|
||||
(keyword_numeric)
|
||||
precision: (number)
|
||||
)
|
||||
))
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_timestamptz)
|
||||
(type (keyword_timestamptz))
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (varchar
|
||||
(type (varchar
|
||||
(keyword_varchar)
|
||||
size: (number)
|
||||
)
|
||||
))
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_uuid)
|
||||
(type (keyword_uuid))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -190,7 +190,7 @@ create table foo (
|
|||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_uuid)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_primary)
|
||||
(keyword_key)
|
||||
|
@ -198,7 +198,7 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
|
@ -206,14 +206,14 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_null)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
|
@ -250,7 +250,7 @@ create table foo (
|
|||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_uuid)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_primary)
|
||||
(keyword_key)
|
||||
|
@ -258,7 +258,7 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_uuid)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_null)
|
||||
)
|
||||
|
@ -267,7 +267,9 @@ create table foo (
|
|||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
refcolumn: (identifier)
|
||||
(ref_column
|
||||
name: (identifier)
|
||||
)
|
||||
(keyword_on)
|
||||
(keyword_update)
|
||||
(referencial_action
|
||||
|
@ -309,7 +311,7 @@ create table foo (
|
|||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_uuid)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
|
@ -319,7 +321,7 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
|
@ -329,7 +331,7 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
|
@ -338,7 +340,7 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
|
@ -356,7 +358,7 @@ create table foo (
|
|||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
datatype: (keyword_text)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
|
@ -370,3 +372,310 @@ create table foo (
|
|||
)
|
||||
)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
Create a table with table constraints
|
||||
================================================================================
|
||||
create table foo (
|
||||
id uuid,
|
||||
primary key (id),
|
||||
c1 text not null,
|
||||
c2 text null,
|
||||
c3 text not null default 'hello',
|
||||
unique (c1, c3)
|
||||
);
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(statement
|
||||
(create_table
|
||||
(keyword_create)
|
||||
(keyword_table)
|
||||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_uuid))
|
||||
)
|
||||
(table_constraint
|
||||
(keyword_primary)
|
||||
(keyword_key)
|
||||
(column_list
|
||||
name: (identifier)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_null)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
)
|
||||
(column_constraint
|
||||
(keyword_default)
|
||||
(literal
|
||||
(literal_string)
|
||||
)
|
||||
)
|
||||
)
|
||||
(table_constraint
|
||||
(keyword_unique)
|
||||
(column_list
|
||||
name: (identifier)
|
||||
name: (identifier)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
Create a table with primary key and foreign key
|
||||
================================================================================
|
||||
create table foo (
|
||||
id uuid primary key,
|
||||
bar_id uuid null references bar (id) on update set null on delete cascade
|
||||
);
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(statement
|
||||
(create_table
|
||||
(keyword_create)
|
||||
(keyword_table)
|
||||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_primary)
|
||||
(keyword_key)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_null)
|
||||
)
|
||||
(column_constraint
|
||||
(keyword_references)
|
||||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
(ref_column
|
||||
name: (identifier)
|
||||
)
|
||||
(keyword_on)
|
||||
(keyword_update)
|
||||
(referencial_action
|
||||
(keyword_set)
|
||||
(keyword_null)
|
||||
)
|
||||
(keyword_on)
|
||||
(keyword_delete)
|
||||
(referencial_action
|
||||
(keyword_cascade)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
Create a table with named column constraints
|
||||
================================================================================
|
||||
create table foo (
|
||||
id uuid constraint foo_pkey primary key,
|
||||
c1 text constraint strong_c1 not null,
|
||||
c2 text constraint weak_c2 null,
|
||||
c3 text constraint "c3 with power" not null constraint "c2 set default hello" default 'hello',
|
||||
c4 text constraint "c4 unique" unique nulls not distinct
|
||||
);
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(statement
|
||||
(create_table
|
||||
(keyword_create)
|
||||
(keyword_table)
|
||||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_primary)
|
||||
(keyword_key)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_null)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
)
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_default)
|
||||
(literal
|
||||
(literal_string)
|
||||
)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
(column_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_unique)
|
||||
(keyword_nulls)
|
||||
(keyword_not)
|
||||
(keyword_distinct)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
================================================================================
|
||||
Create a table with named table constraints
|
||||
================================================================================
|
||||
create table foo (
|
||||
id uuid,
|
||||
constraint foo_pkey primary key (id),
|
||||
c3 uuid not null,
|
||||
constraint foo_c3_fkey foreign key (c3) references bar (id) on update set null on delete cascade,
|
||||
c4 text,
|
||||
constraint "c4 unique" unique nulls not distinct (c4)
|
||||
);
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
(source_file
|
||||
(statement
|
||||
(create_table
|
||||
(keyword_create)
|
||||
(keyword_table)
|
||||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
(column_definitions
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_uuid))
|
||||
)
|
||||
(table_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_primary)
|
||||
(keyword_key)
|
||||
(column_list
|
||||
name: (identifier)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_uuid))
|
||||
(column_constraint
|
||||
(keyword_not)
|
||||
(keyword_null)
|
||||
)
|
||||
)
|
||||
(table_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_foreign)
|
||||
(keyword_key)
|
||||
(column_list
|
||||
name: (identifier)
|
||||
)
|
||||
(keyword_references)
|
||||
(table_reference
|
||||
name: (identifier)
|
||||
)
|
||||
(ref_column_list
|
||||
name: (identifier)
|
||||
)
|
||||
(keyword_on)
|
||||
(keyword_update)
|
||||
(referencial_action
|
||||
(keyword_set)
|
||||
(keyword_null)
|
||||
)
|
||||
(keyword_on)
|
||||
(keyword_delete)
|
||||
(referencial_action
|
||||
(keyword_cascade)
|
||||
)
|
||||
)
|
||||
(column_definition
|
||||
name: (identifier)
|
||||
(type (keyword_text))
|
||||
)
|
||||
(table_constraint
|
||||
(keyword_constraint)
|
||||
name: (identifier)
|
||||
(keyword_unique)
|
||||
(keyword_nulls)
|
||||
(keyword_not)
|
||||
(keyword_distinct)
|
||||
(column_list
|
||||
name: (identifier)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue