refac #2
6 changed files with 3999 additions and 664 deletions
175
grammar.js
175
grammar.js
|
@ -3,6 +3,8 @@ module.exports = grammar({
|
||||||
|
|
||||||
extras: ($) => [/\s\n/, /\s/, $.comment, $.marginalia],
|
extras: ($) => [/\s\n/, /\s/, $.comment, $.marginalia],
|
||||||
|
|
||||||
|
conflicts: ($) => [[$.keyword_char, $.keyword_varchar]],
|
||||||
|
|
||||||
word: ($) => $._identifier,
|
word: ($) => $._identifier,
|
||||||
|
|
||||||
rules: {
|
rules: {
|
||||||
|
@ -25,12 +27,6 @@ module.exports = grammar({
|
||||||
$.column_definitions
|
$.column_definitions
|
||||||
),
|
),
|
||||||
|
|
||||||
table_reference: ($) =>
|
|
||||||
seq(
|
|
||||||
optional(seq(field("schema", $.identifier), ".")),
|
|
||||||
field("name", $.identifier)
|
|
||||||
),
|
|
||||||
|
|
||||||
column_definitions: ($) =>
|
column_definitions: ($) =>
|
||||||
seq(
|
seq(
|
||||||
"(",
|
"(",
|
||||||
|
@ -38,11 +34,20 @@ module.exports = grammar({
|
||||||
")"
|
")"
|
||||||
),
|
),
|
||||||
|
|
||||||
column_definition: ($) => seq(field("name", $.identifier)),
|
column_definition: ($) =>
|
||||||
|
seq(field("name", $.identifier), field("datatype", $._type)),
|
||||||
|
|
||||||
//constraint: $ => seq(),
|
//constraint: $ => seq(),
|
||||||
|
|
||||||
|
table_reference: ($) =>
|
||||||
|
seq(
|
||||||
|
optional(seq(field("schema", $.identifier), ".")),
|
||||||
|
field("name", $.identifier)
|
||||||
|
),
|
||||||
|
|
||||||
// keywords
|
// keywords
|
||||||
|
_if_not_exists: ($) => seq($.keyword_if, $.keyword_not, $.keyword_exists),
|
||||||
|
|
||||||
keyword_create: (_) => mkKeyword("create"),
|
keyword_create: (_) => mkKeyword("create"),
|
||||||
keyword_table: (_) => mkKeyword("table"),
|
keyword_table: (_) => mkKeyword("table"),
|
||||||
keyword_temporary: (_) => choice(mkKeyword("temporary"), mkKeyword("temp")),
|
keyword_temporary: (_) => choice(mkKeyword("temporary"), mkKeyword("temp")),
|
||||||
|
@ -51,13 +56,150 @@ module.exports = grammar({
|
||||||
keyword_not: (_) => mkKeyword("not"),
|
keyword_not: (_) => mkKeyword("not"),
|
||||||
keyword_exists: (_) => mkKeyword("exists"),
|
keyword_exists: (_) => mkKeyword("exists"),
|
||||||
|
|
||||||
_if_not_exists: ($) => seq($.keyword_if, $.keyword_not, $.keyword_exists),
|
// References: https://www.postgresql.org/docs/15/datatype.html
|
||||||
|
_type: ($) =>
|
||||||
|
choice(
|
||||||
|
$._type_numeric,
|
||||||
|
$._type_character,
|
||||||
|
$._type_datetime,
|
||||||
|
$._type_geometric,
|
||||||
|
$._type_net,
|
||||||
|
$._type_bit_string,
|
||||||
|
$._type_text_search,
|
||||||
|
$.keyword_money,
|
||||||
|
$.keyword_bytea,
|
||||||
|
$.keyword_boolean,
|
||||||
|
$.keyword_uuid,
|
||||||
|
$.keyword_xml
|
||||||
|
// TODO: add arrays References: https://www.postgresql.org/docs/15/arrays.html
|
||||||
|
// TODO: add rangetypes References: https://www.postgresql.org/docs/15/rangetypes.html
|
||||||
|
// TODO: add OID types References: https://www.postgresql.org/docs/15/datatype-oid.html
|
||||||
|
),
|
||||||
|
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-numeric.html
|
||||||
|
_type_numeric: ($) =>
|
||||||
|
choice(
|
||||||
|
$.keyword_smallint,
|
||||||
|
$.keyword_integer,
|
||||||
|
$.keyword_bigint,
|
||||||
|
$.keyword_real,
|
||||||
|
$.keyword_smallserial,
|
||||||
|
$.keyword_serial,
|
||||||
|
$.keyword_bigserial,
|
||||||
|
$.double,
|
||||||
|
$.numeric,
|
||||||
|
$.decimal
|
||||||
|
),
|
||||||
|
double: ($) => seq(mkKeyword("double"), mkKeyword("precision")),
|
||||||
|
decimal: ($) =>
|
||||||
|
choice(
|
||||||
|
parametricType($, $.keyword_decimal, ["precision"]),
|
||||||
|
parametricType($, $.keyword_decimal, ["precision", "scale"])
|
||||||
|
),
|
||||||
|
numeric: ($) =>
|
||||||
|
choice(
|
||||||
|
parametricType($, $.keyword_numeric, ["precision"]),
|
||||||
|
parametricType($, $.keyword_numeric, ["precision", "scale"])
|
||||||
|
),
|
||||||
|
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-character.html
|
||||||
|
_type_character: ($) => choice($.keyword_text, $.char, $.varchar),
|
||||||
|
char: ($) => parametricType($, $.keyword_char),
|
||||||
|
varchar: ($) => parametricType($, $.keyword_varchar),
|
||||||
|
|
||||||
|
// TODO: add interval type
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-datetime.html
|
||||||
|
_type_datetime: ($) =>
|
||||||
|
choice(
|
||||||
|
$.keyword_date,
|
||||||
|
$.keyword_datetime,
|
||||||
|
$.keyword_time,
|
||||||
|
$.keyword_timestamp,
|
||||||
|
$.keyword_timestamptz
|
||||||
|
),
|
||||||
|
|
||||||
|
// TODO: add geometric types
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-geometric.html
|
||||||
|
_type_geometric: ($) => choice(),
|
||||||
|
|
||||||
|
// TODO: add net types
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-net-types.html
|
||||||
|
_type_net: ($) => choice(),
|
||||||
|
|
||||||
|
// TODO: add bit string types
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-bit.html
|
||||||
|
_type_bit_string: ($) => choice(),
|
||||||
|
|
||||||
|
// TODO: add text search types
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-textsearch.html
|
||||||
|
_type_text_search: ($) => choice(),
|
||||||
|
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-json.html
|
||||||
|
_type_json: ($) => choice($.keyword_json, $.keyword_jsonb),
|
||||||
|
|
||||||
|
keyword_boolean: (_) => mkKeyword("boolean"),
|
||||||
|
|
||||||
|
keyword_smallint: (_) => mkKeyword("smallint"),
|
||||||
|
keyword_integer: (_) => mkKeyword("integer"),
|
||||||
|
keyword_bigint: (_) => mkKeyword("bigint"),
|
||||||
|
keyword_decimal: (_) => mkKeyword("decimal"),
|
||||||
|
keyword_numeric: (_) => mkKeyword("numeric"),
|
||||||
|
keyword_real: (_) => mkKeyword("real"),
|
||||||
|
keyword_smallserial: (_) => mkKeyword("smallserial"),
|
||||||
|
keyword_serial: (_) => mkKeyword("serial"),
|
||||||
|
keyword_bigserial: (_) => mkKeyword("bigserial"),
|
||||||
|
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-money.html
|
||||||
|
keyword_money: (_) => mkKeyword("money"),
|
||||||
|
|
||||||
|
keyword_text: (_) => mkKeyword("text"),
|
||||||
|
keyword_char: (_) => choice(mkKeyword("character"), mkKeyword("char")),
|
||||||
|
keyword_varchar: (_) =>
|
||||||
|
choice(
|
||||||
|
mkKeyword("varchar"),
|
||||||
|
seq(mkKeyword("character", mkKeyword("varying")))
|
||||||
|
),
|
||||||
|
|
||||||
|
keyword_bytea: (_) => mkKeyword("bytea"),
|
||||||
|
|
||||||
|
keyword_date: (_) => mkKeyword("date"),
|
||||||
|
keyword_datetime: (_) => mkKeyword("datetime"),
|
||||||
|
keyword_time: ($) =>
|
||||||
|
seq(
|
||||||
|
mkKeyword("time"),
|
||||||
|
choice(optional($._without_time_zone), $._with_time_zone)
|
||||||
|
),
|
||||||
|
keyword_timestamp: ($) =>
|
||||||
|
seq(mkKeyword("timestamp"), optional($._without_time_zone)),
|
||||||
|
keyword_timestamptz: ($) =>
|
||||||
|
choice(
|
||||||
|
mkKeyword("timestamptz"),
|
||||||
|
seq(mkKeyword("timestamp"), $._with_time_zone)
|
||||||
|
),
|
||||||
|
|
||||||
|
_without_time_zone: ($) => seq($._keyword_without, $._keyword_time_zone),
|
||||||
|
_with_time_zone: ($) => seq($._keyword_with, $._keyword_time_zone),
|
||||||
|
_keyword_without: (_) => mkKeyword("without"),
|
||||||
|
_keyword_with: (_) => mkKeyword("with"),
|
||||||
|
_keyword_time_zone: (_) => seq(mkKeyword("time"), mkKeyword("zone")),
|
||||||
|
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-uuid.html
|
||||||
|
keyword_uuid: (_) => mkKeyword("uuid"),
|
||||||
|
|
||||||
|
// References: https://www.postgresql.org/docs/15/datatype-xml.html
|
||||||
|
keyword_xml: (_) => mkKeyword("xml"),
|
||||||
|
|
||||||
|
keyword_json: (_) => mkKeyword("json"),
|
||||||
|
keyword_jsonb: (_) => mkKeyword("jsonb"),
|
||||||
|
|
||||||
// -------
|
// -------
|
||||||
|
|
||||||
comment: (_) => seq("--", /.*\n/),
|
comment: (_) => seq("--", /.*\n/),
|
||||||
// https://stackoverflow.com/questions/13014947/regex-to-match-a-c-style-multiline-comment
|
// https://stackoverflow.com/questions/13014947/regex-to-match-a-c-style-multiline-comment
|
||||||
marginalia: (_) => seq("/*", /[^*]*\*+(?:[^/*][^*]*\*+)*/, "/"),
|
marginalia: (_) => seq("/*", /[^*]*\*+(?:[^/*][^*]*\*+)*/, "/"),
|
||||||
|
|
||||||
|
_number: (_) => /\d+/,
|
||||||
|
|
||||||
identifier: ($) => choice($._identifier, seq('"', $._identifier, '"')),
|
identifier: ($) => choice($._identifier, seq('"', $._identifier, '"')),
|
||||||
|
|
||||||
_identifier: (_) => /([a-zA-Z_][0-9a-zA-Z_]*)/,
|
_identifier: (_) => /([a-zA-Z_][0-9a-zA-Z_]*)/,
|
||||||
|
@ -71,3 +213,20 @@ function mkKeyword(word) {
|
||||||
function commaSepRepeat1(field) {
|
function commaSepRepeat1(field) {
|
||||||
return seq(field, repeat(seq(",", field)));
|
return seq(field, repeat(seq(",", field)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parametricType($, type, params = ["size"]) {
|
||||||
|
return prec.right(
|
||||||
|
choice(
|
||||||
|
type,
|
||||||
|
seq(
|
||||||
|
type,
|
||||||
|
"(",
|
||||||
|
// first parameter is guaranteed, shift it out of the array
|
||||||
|
field(params.shift(), alias($._number, $.literal)),
|
||||||
|
// then, fill in the ", next" until done
|
||||||
|
...params.map((p) => seq(",", field(p, alias($._number, $.literal)))),
|
||||||
|
")"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
826
src/grammar.json
826
src/grammar.json
|
@ -107,44 +107,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"table_reference": {
|
|
||||||
"type": "SEQ",
|
|
||||||
"members": [
|
|
||||||
{
|
|
||||||
"type": "CHOICE",
|
|
||||||
"members": [
|
|
||||||
{
|
|
||||||
"type": "SEQ",
|
|
||||||
"members": [
|
|
||||||
{
|
|
||||||
"type": "FIELD",
|
|
||||||
"name": "schema",
|
|
||||||
"content": {
|
|
||||||
"type": "SYMBOL",
|
|
||||||
"name": "identifier"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "STRING",
|
|
||||||
"value": "."
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "BLANK"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "FIELD",
|
|
||||||
"name": "name",
|
|
||||||
"content": {
|
|
||||||
"type": "SYMBOL",
|
|
||||||
"name": "identifier"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"column_definitions": {
|
"column_definitions": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -211,6 +173,69 @@
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "identifier"
|
"name": "identifier"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "datatype",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"table_reference": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "schema",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "name",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_if_not_exists": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_if"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_not"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_exists"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -251,22 +276,726 @@
|
||||||
"type": "PATTERN",
|
"type": "PATTERN",
|
||||||
"value": "exists|EXISTS"
|
"value": "exists|EXISTS"
|
||||||
},
|
},
|
||||||
"_if_not_exists": {
|
"_type": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_numeric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_character"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_datetime"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_geometric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_net"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_bit_string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_type_text_search"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_money"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_bytea"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_uuid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_xml"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_type_numeric": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_smallint"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_bigint"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_real"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_smallserial"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_serial"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_bigserial"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "double"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "numeric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "decimal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"double": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "double|DOUBLE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "precision|PRECISION"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"decimal": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PREC_RIGHT",
|
||||||
|
"value": 0,
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_decimal"
|
||||||
|
},
|
||||||
|
{
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "keyword_if"
|
"name": "keyword_decimal"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "STRING",
|
||||||
"name": "keyword_not"
|
"value": "("
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "precision",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "keyword_exists"
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PREC_RIGHT",
|
||||||
|
"value": 0,
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_decimal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_decimal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "precision",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ","
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "scale",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"numeric": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PREC_RIGHT",
|
||||||
|
"value": 0,
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_numeric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_numeric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "precision",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PREC_RIGHT",
|
||||||
|
"value": 0,
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_numeric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_numeric"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "precision",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ","
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "scale",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_type_character": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "char"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "varchar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"char": {
|
||||||
|
"type": "PREC_RIGHT",
|
||||||
|
"value": 0,
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_char"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_char"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "size",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"varchar": {
|
||||||
|
"type": "PREC_RIGHT",
|
||||||
|
"value": 0,
|
||||||
|
"content": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_varchar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_varchar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": "("
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FIELD",
|
||||||
|
"name": "size",
|
||||||
|
"content": {
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_number"
|
||||||
|
},
|
||||||
|
"named": true,
|
||||||
|
"value": "literal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ")"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"_type_datetime": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_date"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_datetime"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_timestamp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_timestamptz"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_type_geometric": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": []
|
||||||
|
},
|
||||||
|
"_type_net": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": []
|
||||||
|
},
|
||||||
|
"_type_bit_string": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": []
|
||||||
|
},
|
||||||
|
"_type_text_search": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": []
|
||||||
|
},
|
||||||
|
"_type_json": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "keyword_jsonb"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword_boolean": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "boolean|BOOLEAN"
|
||||||
|
},
|
||||||
|
"keyword_smallint": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "smallint|SMALLINT"
|
||||||
|
},
|
||||||
|
"keyword_integer": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "integer|INTEGER"
|
||||||
|
},
|
||||||
|
"keyword_bigint": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "bigint|BIGINT"
|
||||||
|
},
|
||||||
|
"keyword_decimal": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "decimal|DECIMAL"
|
||||||
|
},
|
||||||
|
"keyword_numeric": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "numeric|NUMERIC"
|
||||||
|
},
|
||||||
|
"keyword_real": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "real|REAL"
|
||||||
|
},
|
||||||
|
"keyword_smallserial": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "smallserial|SMALLSERIAL"
|
||||||
|
},
|
||||||
|
"keyword_serial": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "serial|SERIAL"
|
||||||
|
},
|
||||||
|
"keyword_bigserial": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "bigserial|BIGSERIAL"
|
||||||
|
},
|
||||||
|
"keyword_money": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "money|MONEY"
|
||||||
|
},
|
||||||
|
"keyword_text": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "text|TEXT"
|
||||||
|
},
|
||||||
|
"keyword_char": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "character|CHARACTER"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "char|CHAR"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword_varchar": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "varchar|VARCHAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "character|CHARACTER"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword_bytea": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "bytea|BYTEA"
|
||||||
|
},
|
||||||
|
"keyword_date": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "date|DATE"
|
||||||
|
},
|
||||||
|
"keyword_datetime": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "datetime|DATETIME"
|
||||||
|
},
|
||||||
|
"keyword_time": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "time|TIME"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_without_time_zone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_with_time_zone"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword_timestamp": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "timestamp|TIMESTAMP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_without_time_zone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword_timestamptz": {
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "timestamptz|TIMESTAMPTZ"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "timestamp|TIMESTAMP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_with_time_zone"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_without_time_zone": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_keyword_without"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_keyword_time_zone"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_with_time_zone": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_keyword_with"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "_keyword_time_zone"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"_keyword_without": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "without|WITHOUT"
|
||||||
|
},
|
||||||
|
"_keyword_with": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "with|WITH"
|
||||||
|
},
|
||||||
|
"_keyword_time_zone": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "time|TIME"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "zone|ZONE"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword_uuid": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "uuid|UUID"
|
||||||
|
},
|
||||||
|
"keyword_xml": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "xml|XML"
|
||||||
|
},
|
||||||
|
"keyword_json": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "json|JSON"
|
||||||
|
},
|
||||||
|
"keyword_jsonb": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "jsonb|JSONB"
|
||||||
},
|
},
|
||||||
"comment": {
|
"comment": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
|
@ -298,6 +1027,10 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"_number": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "\\d+"
|
||||||
|
},
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"type": "CHOICE",
|
"type": "CHOICE",
|
||||||
"members": [
|
"members": [
|
||||||
|
@ -347,7 +1080,12 @@
|
||||||
"name": "marginalia"
|
"name": "marginalia"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"conflicts": [],
|
"conflicts": [
|
||||||
|
[
|
||||||
|
"keyword_char",
|
||||||
|
"keyword_varchar"
|
||||||
|
]
|
||||||
|
],
|
||||||
"precedences": [],
|
"precedences": [],
|
||||||
"externals": [],
|
"externals": [],
|
||||||
"inline": [],
|
"inline": [],
|
||||||
|
|
|
@ -1,8 +1,132 @@
|
||||||
[
|
[
|
||||||
|
{
|
||||||
|
"type": "char",
|
||||||
|
"named": true,
|
||||||
|
"fields": {
|
||||||
|
"size": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "keyword_char",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "column_definition",
|
"type": "column_definition",
|
||||||
"named": true,
|
"named": true,
|
||||||
"fields": {
|
"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": {
|
"name": {
|
||||||
"multiple": false,
|
"multiple": false,
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -82,21 +206,123 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "decimal",
|
||||||
|
"named": true,
|
||||||
|
"fields": {
|
||||||
|
"precision": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "keyword_decimal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "double",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "identifier",
|
"type": "identifier",
|
||||||
"named": true,
|
"named": true,
|
||||||
"fields": {}
|
"fields": {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_char",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "keyword_temporary",
|
"type": "keyword_temporary",
|
||||||
"named": true,
|
"named": true,
|
||||||
"fields": {}
|
"fields": {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_time",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_timestamp",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_timestamptz",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_varchar",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "marginalia",
|
"type": "marginalia",
|
||||||
"named": true,
|
"named": true,
|
||||||
"fields": {}
|
"fields": {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "numeric",
|
||||||
|
"named": true,
|
||||||
|
"fields": {
|
||||||
|
"precision": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scale": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "keyword_numeric",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "source_file",
|
"type": "source_file",
|
||||||
"named": true,
|
"named": true,
|
||||||
|
@ -153,6 +379,32 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "varchar",
|
||||||
|
"named": true,
|
||||||
|
"fields": {
|
||||||
|
"size": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"children": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "keyword_varchar",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "\"",
|
"type": "\"",
|
||||||
"named": false
|
"named": false
|
||||||
|
@ -189,10 +441,38 @@
|
||||||
"type": ";",
|
"type": ";",
|
||||||
"named": false
|
"named": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_bigint",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_bigserial",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_boolean",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_bytea",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "keyword_create",
|
"type": "keyword_create",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_date",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_datetime",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_decimal",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "keyword_exists",
|
"type": "keyword_exists",
|
||||||
"named": true
|
"named": true
|
||||||
|
@ -201,16 +481,68 @@
|
||||||
"type": "keyword_if",
|
"type": "keyword_if",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_integer",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_json",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_jsonb",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_money",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "keyword_not",
|
"type": "keyword_not",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_numeric",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_real",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_serial",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_smallint",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_smallserial",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "keyword_table",
|
"type": "keyword_table",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_text",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "keyword_unlogged",
|
"type": "keyword_unlogged",
|
||||||
"named": true
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_uuid",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "keyword_xml",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "literal",
|
||||||
|
"named": true
|
||||||
}
|
}
|
||||||
]
|
]
|
3269
src/parser.c
3269
src/parser.c
File diff suppressed because it is too large
Load diff
|
@ -110,3 +110,60 @@ create table if not exists foo ();
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Create a table with different columns
|
||||||
|
================================================================================
|
||||||
|
create table foo (
|
||||||
|
c1 text,
|
||||||
|
c2 boolean,
|
||||||
|
c3 numeric(1),
|
||||||
|
c4 timestamp with time zone,
|
||||||
|
c5 varchar(120),
|
||||||
|
c6 uuid
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(statement
|
||||||
|
(create_table
|
||||||
|
(keyword_create)
|
||||||
|
(keyword_table)
|
||||||
|
(table_reference
|
||||||
|
name: (identifier)
|
||||||
|
)
|
||||||
|
(column_definitions
|
||||||
|
(column_definition
|
||||||
|
name: (identifier)
|
||||||
|
datatype: (keyword_text)
|
||||||
|
)
|
||||||
|
(column_definition
|
||||||
|
name: (identifier)
|
||||||
|
datatype: (keyword_boolean)
|
||||||
|
)
|
||||||
|
(column_definition
|
||||||
|
name: (identifier)
|
||||||
|
datatype: (numeric
|
||||||
|
(keyword_numeric)
|
||||||
|
precision: (literal)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(column_definition
|
||||||
|
name: (identifier)
|
||||||
|
datatype: (keyword_timestamptz)
|
||||||
|
)
|
||||||
|
(column_definition
|
||||||
|
name: (identifier)
|
||||||
|
datatype: (varchar
|
||||||
|
(keyword_varchar)
|
||||||
|
size: (literal)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(column_definition
|
||||||
|
name: (identifier)
|
||||||
|
datatype: (keyword_uuid)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
Binary file not shown.
Loading…
Reference in a new issue