You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.0 KiB
90 lines
3.0 KiB
local syntax = require "core.syntax"
|
|
|
|
-- In sql symbols can be lower case and upper case
|
|
local keywords = {
|
|
"CREATE", "SELECT", "INSERT", "INTO", "UPDATE",
|
|
"DELETE", "TABLE", "DROP", "VALUES", "NOT",
|
|
"NULL", "PRIMARY", "KEY", "REFERENCES",
|
|
"DEFAULT", "UNIQUE", "CONSTRAINT", "CHECK",
|
|
"ON", "EXCLUDE", "WITH", "USING", "WHERE",
|
|
"GROUP", "BY", "HAVING", "DISTINCT", "LIMIT",
|
|
"OFFSET", "ONLY", "CROSS", "JOIN", "INNER",
|
|
"LEFT", "RIGHT", "FULL", "OUTER", "NATURAL",
|
|
"AND", "OR", "AS", "ORDER", "ORDINALITY",
|
|
"UNNEST", "FROM", "VIEW", "RETURNS", "SETOF",
|
|
"LANGUAGE", "SQL", "LIKE", "LATERAL",
|
|
"INTERVAL", "PARTITION", "UNION", "INTERSECT",
|
|
"EXCEPT", "ALL", "ASC", "DESC", "NULLS",
|
|
"FIRST", "LAST", "IN", "RECURSIVE", "ARRAY",
|
|
"RETURNING", "SET", "ALSO", "INSTEAD",
|
|
"ALTER", "SEQUENCE", "OWNED", "AT", "ZONE",
|
|
"WITHOUT", "TO", "TIMEZONE", "TYPE", "ENUM",
|
|
"DOCUMENT", "XMLPARSE", "XMLSERIALIZE",
|
|
"CONTENT", "OPTION", "INDEX", "ANY",
|
|
"EXTENSION", "ISNULL", "NOTNULL", "UNKNOWN",
|
|
"CASE", "THEN", "WHEN", "ELSE", "END",
|
|
"ROWS", "BETWEEN", "UNBOUNDED", "PRECEDING",
|
|
"UNBOUNDED", "FOLLOWING", "EXISTS", "SOME",
|
|
"COLLATION", "FOR", "TRIGGER", "BEFORE",
|
|
"EACH", "ROW", "EXECUTE", "PROCEDURE",
|
|
"FUNCTION", "DECLARE", "BEGIN", "LOOP",
|
|
"RAISE", "NOTICE", "LOOP", "EVENT",
|
|
"OPERATOR", "DOMAIN", "VARIADIC", "FOREIGN"
|
|
}
|
|
|
|
local types = {
|
|
"BIGINT", "INT8", "BIGSERIAL", "SERIAL8",
|
|
"BIT", "VARBIT", "BOOLEAN", "BOOL", "BOX",
|
|
"BYTEA", "CHARACTER", "CHAR", "VARCHAR",
|
|
"CIDR", "CIRCLE", "DATE", "DOUBLE",
|
|
"PRECISION", "FLOAT8", "INET", "INTEGER",
|
|
"INT", "INT4", "INTERVAL", "JSON", "JSONB",
|
|
"LINE", "LSEG", "MACADDR", "MONEY", "NUMERIC",
|
|
"DECIMAL", "PATH", "POINT", "POLYGON", "REAL",
|
|
"FLOAT4", "INT2", "SMALLINT", "SMALLSERIAL",
|
|
"SERIAL2", "SERIAL", "SERIAL4", "TEXT",
|
|
"TIME", "TIMEZ", "TIMESTAMP", "TIMESTAMPZ",
|
|
"TSQUERY", "TSVECTOR", "TXID_SNAPSHOT",
|
|
"UUID", "XML", "INT4RANGE", "INT8RANGE",
|
|
"NUMRANGE", "TSRANGE", "TSTZRANGE",
|
|
"DATERANGE", "PG_LSN"
|
|
}
|
|
|
|
local literals = {
|
|
"FALSE", "TRUE", "CURRENT_TIMESTAMP",
|
|
"CURRENT_TIME", "CURRENT_DATE", "LOCALTIME",
|
|
"LOCALTIMESTAMP"
|
|
}
|
|
|
|
local symbols = {}
|
|
for _, keyword in ipairs(keywords) do
|
|
symbols[keyword:lower()] = "keyword"
|
|
symbols[keyword] = "keyword"
|
|
end
|
|
|
|
for _, type in ipairs(types) do
|
|
symbols[type:lower()] = "keyword2"
|
|
symbols[type] = "keyword2"
|
|
end
|
|
|
|
for _, literal in ipairs(literals) do
|
|
symbols[literal:lower()] = "literal"
|
|
symbols[literal] = "literal"
|
|
end
|
|
|
|
syntax.add {
|
|
files = { "%.sql$", "%.psql$" },
|
|
comment = "--",
|
|
patterns = {
|
|
{ pattern = "%-%-.-\n", type = "comment" },
|
|
{ pattern = { "/%*", "%*/" }, type = "comment" },
|
|
{ pattern = { "'", "'", '\\' }, type = "string" },
|
|
{ pattern = "-?%d+[%d%.eE]*f?", type = "number" },
|
|
{ pattern = "-?%.?%d+f?", type = "number" },
|
|
{ pattern = "[%+%-=/%*%%<>!~|&@%?$#]", type = "operator" },
|
|
{ pattern = "[%a_][%w_]*%f[(]", type = "function" },
|
|
{ pattern = "[%a_][%w_]*", type = "symbol" },
|
|
},
|
|
symbols = symbols,
|
|
}
|
|
|
|
|