local M = {}

-- TODO: might be worth to detect kind of reserved keywords by using the
-- driver name and then lookup the table (if exist).
-- For example,
-- - if the driver is redshift -> https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html
-- - if the driver is postgres -> https://www.postgresql.org/docs/current/sql-keywords-appendix.html
-- but this list will do for now. It covers most cases.

-- https://en.wikipedia.org/wiki/List_of_SQL_reserved_words
M.reserved_sql_keywords = {
  { name = "abort", type = "keyword", description = "" },
  { name = "abortsession", type = "keyword", description = "" },
  { name = "abs", type = "keyword", description = "" },
  { name = "absent", type = "keyword", description = "" },
  { name = "absolute", type = "keyword", description = "" },
  { name = "access", type = "keyword", description = "" },
  { name = "accessible", type = "keyword", description = "" },
  { name = "access_lock", type = "keyword", description = "" },
  { name = "account", type = "keyword", description = "" },
  { name = "acos", type = "keyword", description = "" },
  { name = "acosh", type = "keyword", description = "" },
  { name = "action", type = "keyword", description = "" },
  { name = "add", type = "keyword", description = "" },
  { name = "add_months", type = "keyword", description = "" },
  { name = "admin", type = "keyword", description = "" },
  { name = "after", type = "keyword", description = "" },
  { name = "aggregate", type = "keyword", description = "" },
  { name = "alias", type = "keyword", description = "" },
  { name = "all", type = "keyword", description = "" },
  { name = "allocate", type = "keyword", description = "" },
  { name = "allow", type = "keyword", description = "" },
  { name = "alter", type = "keyword", description = "" },
  { name = "alterand", type = "keyword", description = "" },
  { name = "amp", type = "keyword", description = "" },
  { name = "analyse", type = "keyword", description = "" },
  { name = "analyze", type = "keyword", description = "" },
  { name = "and", type = "keyword", description = "" },
  { name = "ansidate", type = "keyword", description = "" },
  { name = "any", type = "keyword", description = "" },
  { name = "any_value", type = "keyword", description = "" },
  { name = "are", type = "keyword", description = "" },
  { name = "array", type = "keyword", description = "" },
  { name = "array_agg", type = "keyword", description = "" },
  { name = "array_exists", type = "keyword", description = "" },
  { name = "array_max_cardinality", type = "keyword", description = "" },
  { name = "as", type = "keyword", description = "" },
  { name = "asc", type = "keyword", description = "" },
  { name = "asensitive", type = "keyword", description = "" },
  { name = "asin", type = "keyword", description = "" },
  { name = "asinh", type = "keyword", description = "" },
  { name = "assertion", type = "keyword", description = "" },
  { name = "associate", type = "keyword", description = "" },
  { name = "asutime", type = "keyword", description = "" },
  { name = "asymmetric", type = "keyword", description = "" },
  { name = "at", type = "keyword", description = "" },
  { name = "atan", type = "keyword", description = "" },
  { name = "atan2", type = "keyword", description = "" },
  { name = "atanh", type = "keyword", description = "" },
  { name = "atomic", type = "keyword", description = "" },
  { name = "audit", type = "keyword", description = "" },
  { name = "authorization", type = "keyword", description = "" },
  { name = "aux", type = "keyword", description = "" },
  { name = "auxiliary", type = "keyword", description = "" },
  { name = "ave", type = "keyword", description = "" },
  { name = "average", type = "keyword", description = "" },
  { name = "avg", type = "keyword", description = "" },
  { name = "backup", type = "keyword", description = "" },
  { name = "before", type = "keyword", description = "" },
  { name = "begin", type = "keyword", description = "" },
  { name = "begin_frame", type = "keyword", description = "" },
  { name = "begin_partition", type = "keyword", description = "" },
  { name = "between", type = "keyword", description = "" },
  { name = "bigint", type = "keyword", description = "" },
  { name = "binary", type = "keyword", description = "" },
  { name = "bit", type = "keyword", description = "" },
  { name = "blob", type = "keyword", description = "" },
  { name = "boolean", type = "keyword", description = "" },
  { name = "both", type = "keyword", description = "" },
  { name = "breadth", type = "keyword", description = "" },
  { name = "break", type = "keyword", description = "" },
  { name = "browse", type = "keyword", description = "" },
  { name = "bt", type = "keyword", description = "" },
  { name = "btrim", type = "keyword", description = "" },
  { name = "bufferpool", type = "keyword", description = "" },
  { name = "bulk", type = "keyword", description = "" },
  { name = "but", type = "keyword", description = "" },
  { name = "by", type = "keyword", description = "" },
  { name = "byte", type = "keyword", description = "" },
  { name = "byteint", type = "keyword", description = "" },
  { name = "bytes", type = "keyword", description = "" },
  { name = "call", type = "keyword", description = "" },
  { name = "called", type = "keyword", description = "" },
  { name = "capture", type = "keyword", description = "" },
  { name = "cardinality", type = "keyword", description = "" },
  { name = "cascade", type = "keyword", description = "" },
  { name = "cascaded", type = "keyword", description = "" },
  { name = "case", type = "keyword", description = "" },
  { name = "casespecific", type = "keyword", description = "" },
  { name = "case_n", type = "keyword", description = "" },
  { name = "cast", type = "keyword", description = "" },
  { name = "catalog", type = "keyword", description = "" },
  { name = "ccsid", type = "keyword", description = "" },
  { name = "cd", type = "keyword", description = "" },
  { name = "ceil", type = "keyword", description = "" },
  { name = "ceiling", type = "keyword", description = "" },
  { name = "change", type = "keyword", description = "" },
  { name = "char", type = "keyword", description = "" },
  { name = "char2hexint", type = "keyword", description = "" },
  { name = "character", type = "keyword", description = "" },
  { name = "characters", type = "keyword", description = "" },
  { name = "character_length", type = "keyword", description = "" },
  { name = "chars", type = "keyword", description = "" },
  { name = "char_length", type = "keyword", description = "" },
  { name = "check", type = "keyword", description = "" },
  { name = "checkpoint", type = "keyword", description = "" },
  { name = "class", type = "keyword", description = "" },
  { name = "classifier", type = "keyword", description = "" },
  { name = "clob", type = "keyword", description = "" },
  { name = "clone", type = "keyword", description = "" },
  { name = "close", type = "keyword", description = "" },
  { name = "cluster", type = "keyword", description = "" },
  { name = "clustered", type = "keyword", description = "" },
  { name = "cm", type = "keyword", description = "" },
  { name = "coalesce", type = "keyword", description = "" },
  { name = "collate", type = "keyword", description = "" },
  { name = "collation", type = "keyword", description = "" },
  { name = "collect", type = "keyword", description = "" },
  { name = "collection", type = "keyword", description = "" },
  { name = "collid", type = "keyword", description = "" },
  { name = "column", type = "keyword", description = "" },
  { name = "column_value", type = "keyword", description = "" },
  { name = "comment", type = "keyword", description = "" },
  { name = "commit", type = "keyword", description = "" },
  { name = "completion", type = "keyword", description = "" },
  { name = "compress", type = "keyword", description = "" },
  { name = "compute", type = "keyword", description = "" },
  { name = "concat", type = "keyword", description = "" },
  { name = "concurrently", type = "keyword", description = "" },
  { name = "condition", type = "keyword", description = "" },
  { name = "connect", type = "keyword", description = "" },
  { name = "connection", type = "keyword", description = "" },
  { name = "constraint", type = "keyword", description = "" },
  { name = "constraints", type = "keyword", description = "" },
  { name = "constructor", type = "keyword", description = "" },
  { name = "contains", type = "keyword", description = "" },
  { name = "containstable", type = "keyword", description = "" },
  { name = "content", type = "keyword", description = "" },
  { name = "continue", type = "keyword", description = "" },
  { name = "convert", type = "keyword", description = "" },
  { name = "convert_table_header", type = "keyword", description = "" },
  { name = "copy", type = "keyword", description = "" },
  { name = "corr", type = "keyword", description = "" },
  { name = "corresponding", type = "keyword", description = "" },
  { name = "cos", type = "keyword", description = "" },
  { name = "cosh", type = "keyword", description = "" },
  { name = "count", type = "keyword", description = "" },
  { name = "covar_pop", type = "keyword", description = "" },
  { name = "covar_samp", type = "keyword", description = "" },
  { name = "create", type = "keyword", description = "" },
  { name = "cross", type = "keyword", description = "" },
  { name = "cs", type = "keyword", description = "" },
  { name = "csum", type = "keyword", description = "" },
  { name = "ct", type = "keyword", description = "" },
  { name = "cube", type = "keyword", description = "" },
  { name = "cume_dist", type = "keyword", description = "" },
  { name = "current", type = "keyword", description = "" },
  { name = "current_catalog", type = "keyword", description = "" },
  { name = "current_date", type = "keyword", description = "" },
  { name = "current_default_transform_group", type = "keyword", description = "" },
  { name = "current_lc_ctype", type = "keyword", description = "" },
  { name = "current_path", type = "keyword", description = "" },
  { name = "current_role", type = "keyword", description = "" },
  { name = "current_row", type = "keyword", description = "" },
  { name = "current_schema", type = "keyword", description = "" },
  { name = "current_server", type = "keyword", description = "" },
  { name = "current_time", type = "keyword", description = "" },
  { name = "current_timestamp", type = "keyword", description = "" },
  { name = "current_timezone", type = "keyword", description = "" },
  { name = "current_transform_group_for_type", type = "keyword", description = "" },
  { name = "current_user", type = "keyword", description = "" },
  { name = "currval", type = "keyword", description = "" },
  { name = "cursor", type = "keyword", description = "" },
  { name = "cv", type = "keyword", description = "" },
  { name = "cycle", type = "keyword", description = "" },
  { name = "data", type = "keyword", description = "" },
  { name = "database", type = "keyword", description = "" },
  { name = "databases", type = "keyword", description = "" },
  { name = "datablocksize", type = "keyword", description = "" },
  { name = "date", type = "keyword", description = "" },
  { name = "dateform", type = "keyword", description = "" },
  { name = "day", type = "keyword", description = "" },
  { name = "days", type = "keyword", description = "" },
  { name = "day_hour", type = "keyword", description = "" },
  { name = "day_microsecond", type = "keyword", description = "" },
  { name = "day_minute", type = "keyword", description = "" },
  { name = "day_second", type = "keyword", description = "" },
  { name = "dbcc", type = "keyword", description = "" },
  { name = "dbinfo", type = "keyword", description = "" },
  { name = "deallocate", type = "keyword", description = "" },
  { name = "dec", type = "keyword", description = "" },
  { name = "decfloat", type = "keyword", description = "" },
  { name = "decimal", type = "keyword", description = "" },
  { name = "declare", type = "keyword", description = "" },
  { name = "default", type = "keyword", description = "" },
  { name = "deferrable", type = "keyword", description = "" },
  { name = "deferred", type = "keyword", description = "" },
  { name = "define", type = "keyword", description = "" },
  { name = "degrees", type = "keyword", description = "" },
  { name = "del", type = "keyword", description = "" },
  { name = "delayed", type = "keyword", description = "" },
  { name = "delete", type = "keyword", description = "" },
  { name = "dense_rank", type = "keyword", description = "" },
  { name = "deny", type = "keyword", description = "" },
  { name = "depth", type = "keyword", description = "" },
  { name = "deref", type = "keyword", description = "" },
  { name = "desc", type = "keyword", description = "" },
  { name = "describe", type = "keyword", description = "" },
  { name = "descriptor", type = "keyword", description = "" },
  { name = "destroy", type = "keyword", description = "" },
  { name = "destructor", type = "keyword", description = "" },
  { name = "deterministic", type = "keyword", description = "" },
  { name = "diagnostic", type = "keyword", description = "" },
  { name = "diagnostics", type = "keyword", description = "" },
  { name = "dictionary", type = "keyword", description = "" },
  { name = "disable", type = "keyword", description = "" },
  { name = "disabled", type = "keyword", description = "" },
  { name = "disallow", type = "keyword", description = "" },
  { name = "disconnect", type = "keyword", description = "" },
  { name = "disk", type = "keyword", description = "" },
  { name = "distinct", type = "keyword", description = "" },
  { name = "distinctrow", type = "keyword", description = "" },
  { name = "distributed", type = "keyword", description = "" },
  { name = "div", type = "keyword", description = "" },
  { name = "do", type = "keyword", description = "" },
  { name = "document", type = "keyword", description = "" },
  { name = "domain", type = "keyword", description = "" },
  { name = "double", type = "keyword", description = "" },
  { name = "drop", type = "keyword", description = "" },
  { name = "dssize", type = "keyword", description = "" },
  { name = "dual", type = "keyword", description = "" },
  { name = "dump", type = "keyword", description = "" },
  { name = "dynamic", type = "keyword", description = "" },
  { name = "each", type = "keyword", description = "" },
  { name = "echo", type = "keyword", description = "" },
  { name = "editproc", type = "keyword", description = "" },
  { name = "element", type = "keyword", description = "" },
  { name = "else", type = "keyword", description = "" },
  { name = "elseif", type = "keyword", description = "" },
  { name = "empty", type = "keyword", description = "" },
  { name = "enabled", type = "keyword", description = "" },
  { name = "enclosed", type = "keyword", description = "" },
  { name = "encoding", type = "keyword", description = "" },
  { name = "encryption", type = "keyword", description = "" },
  { name = "end", type = "keyword", description = "" },
  { name = "end-exec", type = "keyword", description = "" },
  { name = "ending", type = "keyword", description = "" },
  { name = "end_frame", type = "keyword", description = "" },
  { name = "end_partition", type = "keyword", description = "" },
  { name = "eq", type = "keyword", description = "" },
  { name = "equals", type = "keyword", description = "" },
  { name = "erase", type = "keyword", description = "" },
  { name = "errlvl", type = "keyword", description = "" },
  { name = "error", type = "keyword", description = "" },
  { name = "errorfiles", type = "keyword", description = "" },
  { name = "errortables", type = "keyword", description = "" },
  { name = "escape", type = "keyword", description = "" },
  { name = "escaped", type = "keyword", description = "" },
  { name = "et", type = "keyword", description = "" },
  { name = "every", type = "keyword", description = "" },
  { name = "except", type = "keyword", description = "" },
  { name = "exception", type = "keyword", description = "" },
  { name = "exclusive", type = "keyword", description = "" },
  { name = "exec", type = "keyword", description = "" },
  { name = "execute", type = "keyword", description = "" },
  { name = "exists", type = "keyword", description = "" },
  { name = "exit", type = "keyword", description = "" },
  { name = "exp", type = "keyword", description = "" },
  { name = "explain", type = "keyword", description = "" },
  { name = "external", type = "keyword", description = "" },
  { name = "extract", type = "keyword", description = "" },
  { name = "fallback", type = "keyword", description = "" },
  { name = "false", type = "keyword", description = "" },
  { name = "fastexport", type = "keyword", description = "" },
  { name = "fenced", type = "keyword", description = "" },
  { name = "fetch", type = "keyword", description = "" },
  { name = "fieldproc", type = "keyword", description = "" },
  { name = "file", type = "keyword", description = "" },
  { name = "fillfactor", type = "keyword", description = "" },
  { name = "filter", type = "keyword", description = "" },
  { name = "final", type = "keyword", description = "" },
  { name = "first", type = "keyword", description = "" },
  { name = "first_value", type = "keyword", description = "" },
  { name = "float", type = "keyword", description = "" },
  { name = "float4", type = "keyword", description = "" },
  { name = "float8", type = "keyword", description = "" },
  { name = "floor", type = "keyword", description = "" },
  { name = "for", type = "keyword", description = "" },
  { name = "force", type = "keyword", description = "" },
  { name = "foreign", type = "keyword", description = "" },
  { name = "format", type = "keyword", description = "" },
  { name = "found", type = "keyword", description = "" },
  { name = "frame_row", type = "keyword", description = "" },
  { name = "free", type = "keyword", description = "" },
  { name = "freespace", type = "keyword", description = "" },
  { name = "freetext", type = "keyword", description = "" },
  { name = "freetexttable", type = "keyword", description = "" },
  { name = "freeze", type = "keyword", description = "" },
  { name = "from", type = "keyword", description = "" },
  { name = "full", type = "keyword", description = "" },
  { name = "fulltext", type = "keyword", description = "" },
  { name = "function", type = "keyword", description = "" },
  { name = "fusion", type = "keyword", description = "" },
  { name = "ge", type = "keyword", description = "" },
  { name = "general", type = "keyword", description = "" },
  { name = "generated", type = "keyword", description = "" },
  { name = "get", type = "keyword", description = "" },
  { name = "give", type = "keyword", description = "" },
  { name = "global", type = "keyword", description = "" },
  { name = "go", type = "keyword", description = "" },
  { name = "goto", type = "keyword", description = "" },
  { name = "grant", type = "keyword", description = "" },
  { name = "graphic", type = "keyword", description = "" },
  { name = "greatest", type = "keyword", description = "" },
  { name = "group", type = "keyword", description = "" },
  { name = "grouping", type = "keyword", description = "" },
  { name = "groups", type = "keyword", description = "" },
  { name = "gt", type = "keyword", description = "" },
  { name = "handler", type = "keyword", description = "" },
  { name = "hash", type = "keyword", description = "" },
  { name = "hashamp", type = "keyword", description = "" },
  { name = "hashbakamp", type = "keyword", description = "" },
  { name = "hashbucket", type = "keyword", description = "" },
  { name = "hashrow", type = "keyword", description = "" },
  { name = "having", type = "keyword", description = "" },
  { name = "help", type = "keyword", description = "" },
  { name = "high_priority", type = "keyword", description = "" },
  { name = "hold", type = "keyword", description = "" },
  { name = "holdlock", type = "keyword", description = "" },
  { name = "host", type = "keyword", description = "" },
  { name = "hour", type = "keyword", description = "" },
  { name = "hours", type = "keyword", description = "" },
  { name = "hour_microsecond", type = "keyword", description = "" },
  { name = "hour_minute", type = "keyword", description = "" },
  { name = "hour_second", type = "keyword", description = "" },
  { name = "identified", type = "keyword", description = "" },
  { name = "identity", type = "keyword", description = "" },
  { name = "identitycol", type = "keyword", description = "" },
  { name = "identity_insert", type = "keyword", description = "" },
  { name = "if", type = "keyword", description = "" },
  { name = "ignore", type = "keyword", description = "" },
  { name = "ilike", type = "keyword", description = "" },
  { name = "immediate", type = "keyword", description = "" },
  { name = "in", type = "keyword", description = "" },
  { name = "inclusive", type = "keyword", description = "" },
  { name = "inconsistent", type = "keyword", description = "" },
  { name = "increment", type = "keyword", description = "" },
  { name = "index", type = "keyword", description = "" },
  { name = "indicator", type = "keyword", description = "" },
  { name = "infile", type = "keyword", description = "" },
  { name = "inherit", type = "keyword", description = "" },
  { name = "initial", type = "keyword", description = "" },
  { name = "initialize", type = "keyword", description = "" },
  { name = "initially", type = "keyword", description = "" },
  { name = "initiate", type = "keyword", description = "" },
  { name = "inner", type = "keyword", description = "" },
  { name = "inout", type = "keyword", description = "" },
  { name = "input", type = "keyword", description = "" },
  { name = "ins", type = "keyword", description = "" },
  { name = "insensitive", type = "keyword", description = "" },
  { name = "insert", type = "keyword", description = "" },
  { name = "instead", type = "keyword", description = "" },
  { name = "int", type = "keyword", description = "" },
  { name = "int1", type = "keyword", description = "" },
  { name = "int2", type = "keyword", description = "" },
  { name = "int3", type = "keyword", description = "" },
  { name = "int4", type = "keyword", description = "" },
  { name = "int8", type = "keyword", description = "" },
  { name = "integer", type = "keyword", description = "" },
  { name = "integerdate", type = "keyword", description = "" },
  { name = "intersect", type = "keyword", description = "" },
  { name = "intersection", type = "keyword", description = "" },
  { name = "interval", type = "keyword", description = "" },
  { name = "into", type = "keyword", description = "" },
  { name = "io_after_gtids", type = "keyword", description = "" },
  { name = "io_before_gtids", type = "keyword", description = "" },
  { name = "is", type = "keyword", description = "" },
  { name = "isnull", type = "keyword", description = "" },
  { name = "isobid", type = "keyword", description = "" },
  { name = "isolation", type = "keyword", description = "" },
  { name = "iterate", type = "keyword", description = "" },
  { name = "jar", type = "keyword", description = "" },
  { name = "join", type = "keyword", description = "" },
  { name = "journal", type = "keyword", description = "" },
  { name = "json", type = "keyword", description = "" },
  { name = "json_array", type = "keyword", description = "" },
  { name = "json_arrayagg", type = "keyword", description = "" },
  { name = "json_exists", type = "keyword", description = "" },
  { name = "json_object", type = "keyword", description = "" },
  { name = "json_objectagg", type = "keyword", description = "" },
  { name = "json_query", type = "keyword", description = "" },
  { name = "json_scalar", type = "keyword", description = "" },
  { name = "json_serialize", type = "keyword", description = "" },
  { name = "json_table", type = "keyword", description = "" },
  { name = "json_table_primitive", type = "keyword", description = "" },
  { name = "json_value", type = "keyword", description = "" },
  { name = "keep", type = "keyword", description = "" },
  { name = "key", type = "keyword", description = "" },
  { name = "keys", type = "keyword", description = "" },
  { name = "kill", type = "keyword", description = "" },
  { name = "kurtosis", type = "keyword", description = "" },
  { name = "label", type = "keyword", description = "" },
  { name = "lag", type = "keyword", description = "" },
  { name = "language", type = "keyword", description = "" },
  { name = "large", type = "keyword", description = "" },
  { name = "last", type = "keyword", description = "" },
  { name = "last_value", type = "keyword", description = "" },
  { name = "lateral", type = "keyword", description = "" },
  { name = "lc_ctype", type = "keyword", description = "" },
  { name = "le", type = "keyword", description = "" },
  { name = "lead", type = "keyword", description = "" },
  { name = "leading", type = "keyword", description = "" },
  { name = "least", type = "keyword", description = "" },
  { name = "leave", type = "keyword", description = "" },
  { name = "left", type = "keyword", description = "" },
  { name = "less", type = "keyword", description = "" },
  { name = "level", type = "keyword", description = "" },
  { name = "like", type = "keyword", description = "" },
  { name = "like_regex", type = "keyword", description = "" },
  { name = "limit", type = "keyword", description = "" },
  { name = "linear", type = "keyword", description = "" },
  { name = "lineno", type = "keyword", description = "" },
  { name = "lines", type = "keyword", description = "" },
  { name = "listagg", type = "keyword", description = "" },
  { name = "ln", type = "keyword", description = "" },
  { name = "load", type = "keyword", description = "" },
  { name = "loading", type = "keyword", description = "" },
  { name = "local", type = "keyword", description = "" },
  { name = "locale", type = "keyword", description = "" },
  { name = "localtime", type = "keyword", description = "" },
  { name = "localtimestamp", type = "keyword", description = "" },
  { name = "locator", type = "keyword", description = "" },
  { name = "locators", type = "keyword", description = "" },
  { name = "lock", type = "keyword", description = "" },
  { name = "locking", type = "keyword", description = "" },
  { name = "lockmax", type = "keyword", description = "" },
  { name = "locksize", type = "keyword", description = "" },
  { name = "log", type = "keyword", description = "" },
  { name = "log10", type = "keyword", description = "" },
  { name = "logging", type = "keyword", description = "" },
  { name = "logon", type = "keyword", description = "" },
  { name = "long", type = "keyword", description = "" },
  { name = "longblob", type = "keyword", description = "" },
  { name = "longtext", type = "keyword", description = "" },
  { name = "loop", type = "keyword", description = "" },
  { name = "lower", type = "keyword", description = "" },
  { name = "low_priority", type = "keyword", description = "" },
  { name = "lpad", type = "keyword", description = "" },
  { name = "lt", type = "keyword", description = "" },
  { name = "ltrim", type = "keyword", description = "" },
  { name = "macro", type = "keyword", description = "" },
  { name = "maintained", type = "keyword", description = "" },
  { name = "map", type = "keyword", description = "" },
  { name = "master_bind", type = "keyword", description = "" },
  { name = "master_ssl_verify_server_cert", type = "keyword", description = "" },
  { name = "match", type = "keyword", description = "" },
  { name = "matches", type = "keyword", description = "" },
  { name = "match_number", type = "keyword", description = "" },
  { name = "match_recognize", type = "keyword", description = "" },
  { name = "materialized", type = "keyword", description = "" },
  { name = "mavg", type = "keyword", description = "" },
  { name = "max", type = "keyword", description = "" },
  { name = "maxextents", type = "keyword", description = "" },
  { name = "maximum", type = "keyword", description = "" },
  { name = "maxvalue", type = "keyword", description = "" },
  { name = "mcharacters", type = "keyword", description = "" },
  { name = "mdiff", type = "keyword", description = "" },
  { name = "mediumblob", type = "keyword", description = "" },
  { name = "mediumint", type = "keyword", description = "" },
  { name = "mediumtext", type = "keyword", description = "" },
  { name = "member", type = "keyword", description = "" },
  { name = "merge", type = "keyword", description = "" },
  { name = "method", type = "keyword", description = "" },
  { name = "microsecond", type = "keyword", description = "" },
  { name = "microseconds", type = "keyword", description = "" },
  { name = "middleint", type = "keyword", description = "" },
  { name = "min", type = "keyword", description = "" },
  { name = "mindex", type = "keyword", description = "" },
  { name = "minimum", type = "keyword", description = "" },
  { name = "minus", type = "keyword", description = "" },
  { name = "minute", type = "keyword", description = "" },
  { name = "minutes", type = "keyword", description = "" },
  { name = "minute_microsecond", type = "keyword", description = "" },
  { name = "minute_second", type = "keyword", description = "" },
  { name = "mlinreg", type = "keyword", description = "" },
  { name = "mload", type = "keyword", description = "" },
  { name = "mlslabel", type = "keyword", description = "" },
  { name = "mod", type = "keyword", description = "" },
  { name = "mode", type = "keyword", description = "" },
  { name = "modifies", type = "keyword", description = "" },
  { name = "modify", type = "keyword", description = "" },
  { name = "module", type = "keyword", description = "" },
  { name = "monitor", type = "keyword", description = "" },
  { name = "monresource", type = "keyword", description = "" },
  { name = "monsession", type = "keyword", description = "" },
  { name = "month", type = "keyword", description = "" },
  { name = "months", type = "keyword", description = "" },
  { name = "msubstr", type = "keyword", description = "" },
  { name = "msum", type = "keyword", description = "" },
  { name = "multiset", type = "keyword", description = "" },
  { name = "named", type = "keyword", description = "" },
  { name = "names", type = "keyword", description = "" },
  { name = "national", type = "keyword", description = "" },
  { name = "natural", type = "keyword", description = "" },
  { name = "nchar", type = "keyword", description = "" },
  { name = "nclob", type = "keyword", description = "" },
  { name = "ne", type = "keyword", description = "" },
  { name = "nested_table_id", type = "keyword", description = "" },
  { name = "new", type = "keyword", description = "" },
  { name = "new_table", type = "keyword", description = "" },
  { name = "next", type = "keyword", description = "" },
  { name = "nextval", type = "keyword", description = "" },
  { name = "no", type = "keyword", description = "" },
  { name = "noaudit", type = "keyword", description = "" },
  { name = "nocheck", type = "keyword", description = "" },
  { name = "nocompress", type = "keyword", description = "" },
  { name = "nonclustered", type = "keyword", description = "" },
  { name = "none", type = "keyword", description = "" },
  { name = "normalize", type = "keyword", description = "" },
  { name = "not", type = "keyword", description = "" },
  { name = "notnull", type = "keyword", description = "" },
  { name = "nowait", type = "keyword", description = "" },
  { name = "no_write_to_binlog", type = "keyword", description = "" },
  { name = "nth_value", type = "keyword", description = "" },
  { name = "ntile", type = "keyword", description = "" },
  { name = "nullif", type = "keyword", description = "" },
  { name = "nullifzero", type = "keyword", description = "" },
  { name = "nulls", type = "keyword", description = "" },
  { name = "number", type = "keyword", description = "" },
  { name = "numeric", type = "keyword", description = "" },
  { name = "numparts", type = "keyword", description = "" },
  { name = "obid", type = "keyword", description = "" },
  { name = "object", type = "keyword", description = "" },
  { name = "objects", type = "keyword", description = "" },
  { name = "occurrences_regex", type = "keyword", description = "" },
  { name = "octet_length", type = "keyword", description = "" },
  { name = "of", type = "keyword", description = "" },
  { name = "off", type = "keyword", description = "" },
  { name = "offline", type = "keyword", description = "" },
  { name = "offset", type = "keyword", description = "" },
  { name = "offsets", type = "keyword", description = "" },
  { name = "old", type = "keyword", description = "" },
  { name = "old_table", type = "keyword", description = "" },
  { name = "omit", type = "keyword", description = "" },
  { name = "on", type = "keyword", description = "" },
  { name = "one", type = "keyword", description = "" },
  { name = "online", type = "keyword", description = "" },
  { name = "only", type = "keyword", description = "" },
  { name = "open", type = "keyword", description = "" },
  { name = "opendatasource", type = "keyword", description = "" },
  { name = "openquery", type = "keyword", description = "" },
  { name = "openrowset", type = "keyword", description = "" },
  { name = "openxml", type = "keyword", description = "" },
  { name = "operation", type = "keyword", description = "" },
  { name = "optimization", type = "keyword", description = "" },
  { name = "optimize", type = "keyword", description = "" },
  { name = "optimizer_costs", type = "keyword", description = "" },
  { name = "option", type = "keyword", description = "" },
  { name = "optionally", type = "keyword", description = "" },
  { name = "or", type = "keyword", description = "" },
  { name = "order", type = "keyword", description = "" },
  { name = "ordinality", type = "keyword", description = "" },
  { name = "organization", type = "keyword", description = "" },
  { name = "out", type = "keyword", description = "" },
  { name = "outer", type = "keyword", description = "" },
  { name = "outfile", type = "keyword", description = "" },
  { name = "output", type = "keyword", description = "" },
  { name = "over", type = "keyword", description = "" },
  { name = "overlaps", type = "keyword", description = "" },
  { name = "overlay", type = "keyword", description = "" },
  { name = "override", type = "keyword", description = "" },
  { name = "package", type = "keyword", description = "" },
  { name = "pad", type = "keyword", description = "" },
  { name = "padded", type = "keyword", description = "" },
  { name = "parameter", type = "keyword", description = "" },
  { name = "parameters", type = "keyword", description = "" },
  { name = "part", type = "keyword", description = "" },
  { name = "partial", type = "keyword", description = "" },
  { name = "partition", type = "keyword", description = "" },
  { name = "partitioned", type = "keyword", description = "" },
  { name = "partitioning", type = "keyword", description = "" },
  { name = "password", type = "keyword", description = "" },
  { name = "path", type = "keyword", description = "" },
  { name = "pattern", type = "keyword", description = "" },
  { name = "pctfree", type = "keyword", description = "" },
  { name = "per", type = "keyword", description = "" },
  { name = "percent", type = "keyword", description = "" },
  { name = "percentile_cont", type = "keyword", description = "" },
  { name = "percentile_disc", type = "keyword", description = "" },
  { name = "percent_rank", type = "keyword", description = "" },
  { name = "period", type = "keyword", description = "" },
  { name = "perm", type = "keyword", description = "" },
  { name = "permanent", type = "keyword", description = "" },
  { name = "piecesize", type = "keyword", description = "" },
  { name = "pivot", type = "keyword", description = "" },
  { name = "placing", type = "keyword", description = "" },
  { name = "plan", type = "keyword", description = "" },
  { name = "portion", type = "keyword", description = "" },
  { name = "position", type = "keyword", description = "" },
  { name = "position_regex", type = "keyword", description = "" },
  { name = "postfix", type = "keyword", description = "" },
  { name = "power", type = "keyword", description = "" },
  { name = "precedes", type = "keyword", description = "" },
  { name = "precision", type = "keyword", description = "" },
  { name = "prefix", type = "keyword", description = "" },
  { name = "preorder", type = "keyword", description = "" },
  { name = "prepare", type = "keyword", description = "" },
  { name = "preserve", type = "keyword", description = "" },
  { name = "prevval", type = "keyword", description = "" },
  { name = "primary", type = "keyword", description = "" },
  { name = "print", type = "keyword", description = "" },
  { name = "prior", type = "keyword", description = "" },
  { name = "priqty", type = "keyword", description = "" },
  { name = "private", type = "keyword", description = "" },
  { name = "privileges", type = "keyword", description = "" },
  { name = "proc", type = "keyword", description = "" },
  { name = "procedure", type = "keyword", description = "" },
  { name = "profile", type = "keyword", description = "" },
  { name = "program", type = "keyword", description = "" },
  { name = "proportional", type = "keyword", description = "" },
  { name = "protection", type = "keyword", description = "" },
  { name = "psid", type = "keyword", description = "" },
  { name = "ptf", type = "keyword", description = "" },
  { name = "public", type = "keyword", description = "" },
  { name = "purge", type = "keyword", description = "" },
  { name = "qualified", type = "keyword", description = "" },
  { name = "qualify", type = "keyword", description = "" },
  { name = "quantile", type = "keyword", description = "" },
  { name = "query", type = "keyword", description = "" },
  { name = "queryno", type = "keyword", description = "" },
  { name = "radians", type = "keyword", description = "" },
  { name = "raiserror", type = "keyword", description = "" },
  { name = "random", type = "keyword", description = "" },
  { name = "range", type = "keyword", description = "" },
  { name = "range_n", type = "keyword", description = "" },
  { name = "rank", type = "keyword", description = "" },
  { name = "raw", type = "keyword", description = "" },
  { name = "read", type = "keyword", description = "" },
  { name = "reads", type = "keyword", description = "" },
  { name = "readtext", type = "keyword", description = "" },
  { name = "read_write", type = "keyword", description = "" },
  { name = "real", type = "keyword", description = "" },
  { name = "reconfigure", type = "keyword", description = "" },
  { name = "recursive", type = "keyword", description = "" },
  { name = "ref", type = "keyword", description = "" },
  { name = "references", type = "keyword", description = "" },
  { name = "referencing", type = "keyword", description = "" },
  { name = "refresh", type = "keyword", description = "" },
  { name = "regexp", type = "keyword", description = "" },
  { name = "regr_avgx", type = "keyword", description = "" },
  { name = "regr_avgy", type = "keyword", description = "" },
  { name = "regr_count", type = "keyword", description = "" },
  { name = "regr_intercept", type = "keyword", description = "" },
  { name = "regr_r2", type = "keyword", description = "" },
  { name = "regr_slope", type = "keyword", description = "" },
  { name = "regr_sxx", type = "keyword", description = "" },
  { name = "regr_sxy", type = "keyword", description = "" },
  { name = "regr_syy", type = "keyword", description = "" },
  { name = "relative", type = "keyword", description = "" },
  { name = "release", type = "keyword", description = "" },
  { name = "rename", type = "keyword", description = "" },
  { name = "repeat", type = "keyword", description = "" },
  { name = "replace", type = "keyword", description = "" },
  { name = "replication", type = "keyword", description = "" },
  { name = "repoverride", type = "keyword", description = "" },
  { name = "request", type = "keyword", description = "" },
  { name = "require", type = "keyword", description = "" },
  { name = "resignal", type = "keyword", description = "" },
  { name = "resource", type = "keyword", description = "" },
  { name = "restart", type = "keyword", description = "" },
  { name = "restore", type = "keyword", description = "" },
  { name = "restrict", type = "keyword", description = "" },
  { name = "result", type = "keyword", description = "" },
  { name = "result_set_locator", type = "keyword", description = "" },
  { name = "resume", type = "keyword", description = "" },
  { name = "ret", type = "keyword", description = "" },
  { name = "retrieve", type = "keyword", description = "" },
  { name = "return", type = "keyword", description = "" },
  { name = "returning", type = "keyword", description = "" },
  { name = "returns", type = "keyword", description = "" },
  { name = "revalidate", type = "keyword", description = "" },
  { name = "revert", type = "keyword", description = "" },
  { name = "revoke", type = "keyword", description = "" },
  { name = "right", type = "keyword", description = "" },
  { name = "rights", type = "keyword", description = "" },
  { name = "rlike", type = "keyword", description = "" },
  { name = "role", type = "keyword", description = "" },
  { name = "rollback", type = "keyword", description = "" },
  { name = "rollforward", type = "keyword", description = "" },
  { name = "rollup", type = "keyword", description = "" },
  { name = "round_ceiling", type = "keyword", description = "" },
  { name = "round_down", type = "keyword", description = "" },
  { name = "round_floor", type = "keyword", description = "" },
  { name = "round_half_down", type = "keyword", description = "" },
  { name = "round_half_even", type = "keyword", description = "" },
  { name = "round_half_up", type = "keyword", description = "" },
  { name = "round_up", type = "keyword", description = "" },
  { name = "routine", type = "keyword", description = "" },
  { name = "row", type = "keyword", description = "" },
  { name = "rowcount", type = "keyword", description = "" },
  { name = "rowguidcol", type = "keyword", description = "" },
  { name = "rowid", type = "keyword", description = "" },
  { name = "rownum", type = "keyword", description = "" },
  { name = "rows", type = "keyword", description = "" },
  { name = "rowset", type = "keyword", description = "" },
  { name = "row_number", type = "keyword", description = "" },
  { name = "rpad", type = "keyword", description = "" },
  { name = "rule", type = "keyword", description = "" },
  { name = "run", type = "keyword", description = "" },
  { name = "running", type = "keyword", description = "" },
  { name = "sample", type = "keyword", description = "" },
  { name = "sampleid", type = "keyword", description = "" },
  { name = "save", type = "keyword", description = "" },
  { name = "savepoint", type = "keyword", description = "" },
  { name = "schema", type = "keyword", description = "" },
  { name = "schemas", type = "keyword", description = "" },
  { name = "scope", type = "keyword", description = "" },
  { name = "scratchpad", type = "keyword", description = "" },
  { name = "scroll", type = "keyword", description = "" },
  { name = "search", type = "keyword", description = "" },
  { name = "second", type = "keyword", description = "" },
  { name = "seconds", type = "keyword", description = "" },
  { name = "second_microsecond", type = "keyword", description = "" },
  { name = "secqty", type = "keyword", description = "" },
  { name = "section", type = "keyword", description = "" },
  { name = "security", type = "keyword", description = "" },
  { name = "securityaudit", type = "keyword", description = "" },
  { name = "seek", type = "keyword", description = "" },
  { name = "sel", type = "keyword", description = "" },
  { name = "select", type = "keyword", description = "" },
  { name = "semantickeyphrasetable", type = "keyword", description = "" },
  { name = "semanticsimilaritydetailstable", type = "keyword", description = "" },
  { name = "semanticsimilaritytable", type = "keyword", description = "" },
  { name = "sensitive", type = "keyword", description = "" },
  { name = "separator", type = "keyword", description = "" },
  { name = "sequence", type = "keyword", description = "" },
  { name = "session", type = "keyword", description = "" },
  { name = "session_user", type = "keyword", description = "" },
  { name = "set", type = "keyword", description = "" },
  { name = "setresrate", type = "keyword", description = "" },
  { name = "sets", type = "keyword", description = "" },
  { name = "setsessrate", type = "keyword", description = "" },
  { name = "setuser", type = "keyword", description = "" },
  { name = "share", type = "keyword", description = "" },
  { name = "show", type = "keyword", description = "" },
  { name = "shutdown", type = "keyword", description = "" },
  { name = "signal", type = "keyword", description = "" },
  { name = "similar", type = "keyword", description = "" },
  { name = "simple", type = "keyword", description = "" },
  { name = "sin", type = "keyword", description = "" },
  { name = "sinh", type = "keyword", description = "" },
  { name = "size", type = "keyword", description = "" },
  { name = "skew", type = "keyword", description = "" },
  { name = "skip", type = "keyword", description = "" },
  { name = "smallint", type = "keyword", description = "" },
  { name = "some", type = "keyword", description = "" },
  { name = "soundex", type = "keyword", description = "" },
  { name = "source", type = "keyword", description = "" },
  { name = "space", type = "keyword", description = "" },
  { name = "spatial", type = "keyword", description = "" },
  { name = "specific", type = "keyword", description = "" },
  { name = "specifictype", type = "keyword", description = "" },
  { name = "spool", type = "keyword", description = "" },
  { name = "sql", type = "keyword", description = "" },
  { name = "sqlexception", type = "keyword", description = "" },
  { name = "sqlstate", type = "keyword", description = "" },
  { name = "sqltext", type = "keyword", description = "" },
  { name = "sqlwarning", type = "keyword", description = "" },
  { name = "sql_big_result", type = "keyword", description = "" },
  { name = "sql_calc_found_rows", type = "keyword", description = "" },
  { name = "sql_small_result", type = "keyword", description = "" },
  { name = "sqrt", type = "keyword", description = "" },
  { name = "ss", type = "keyword", description = "" },
  { name = "ssl", type = "keyword", description = "" },
  { name = "standard", type = "keyword", description = "" },
  { name = "start", type = "keyword", description = "" },
  { name = "starting", type = "keyword", description = "" },
  { name = "startup", type = "keyword", description = "" },
  { name = "state", type = "keyword", description = "" },
  { name = "statement", type = "keyword", description = "" },
  { name = "static", type = "keyword", description = "" },
  { name = "statistics", type = "keyword", description = "" },
  { name = "stay", type = "keyword", description = "" },
  { name = "stddev_pop", type = "keyword", description = "" },
  { name = "stddev_samp", type = "keyword", description = "" },
  { name = "stepinfo", type = "keyword", description = "" },
  { name = "stogroup", type = "keyword", description = "" },
  { name = "stored", type = "keyword", description = "" },
  { name = "stores", type = "keyword", description = "" },
  { name = "straight_join", type = "keyword", description = "" },
  { name = "string_cs", type = "keyword", description = "" },
  { name = "structure", type = "keyword", description = "" },
  { name = "style", type = "keyword", description = "" },
  { name = "submultiset", type = "keyword", description = "" },
  { name = "subscriber", type = "keyword", description = "" },
  { name = "subset", type = "keyword", description = "" },
  { name = "substr", type = "keyword", description = "" },
  { name = "substring", type = "keyword", description = "" },
  { name = "substring_regex", type = "keyword", description = "" },
  { name = "succeeds", type = "keyword", description = "" },
  { name = "successful", type = "keyword", description = "" },
  { name = "sum", type = "keyword", description = "" },
  { name = "summary", type = "keyword", description = "" },
  { name = "suspend", type = "keyword", description = "" },
  { name = "symmetric", type = "keyword", description = "" },
  { name = "synonym", type = "keyword", description = "" },
  { name = "sysdate", type = "keyword", description = "" },
  { name = "system", type = "keyword", description = "" },
  { name = "system_time", type = "keyword", description = "" },
  { name = "system_user", type = "keyword", description = "" },
  { name = "systimestamp", type = "keyword", description = "" },
  { name = "table", type = "keyword", description = "" },
  { name = "tablesample", type = "keyword", description = "" },
  { name = "tablespace", type = "keyword", description = "" },
  { name = "tan", type = "keyword", description = "" },
  { name = "tanh", type = "keyword", description = "" },
  { name = "tbl_cs", type = "keyword", description = "" },
  { name = "temporary", type = "keyword", description = "" },
  { name = "terminate", type = "keyword", description = "" },
  { name = "terminated", type = "keyword", description = "" },
  { name = "textsize", type = "keyword", description = "" },
  { name = "than", type = "keyword", description = "" },
  { name = "then", type = "keyword", description = "" },
  { name = "threshold", type = "keyword", description = "" },
  { name = "time", type = "keyword", description = "" },
  { name = "timestamp", type = "keyword", description = "" },
  { name = "timezone_hour", type = "keyword", description = "" },
  { name = "timezone_minute", type = "keyword", description = "" },
  { name = "tinyblob", type = "keyword", description = "" },
  { name = "tinyint", type = "keyword", description = "" },
  { name = "tinytext", type = "keyword", description = "" },
  { name = "title", type = "keyword", description = "" },
  { name = "to", type = "keyword", description = "" },
  { name = "top", type = "keyword", description = "" },
  { name = "trace", type = "keyword", description = "" },
  { name = "trailing", type = "keyword", description = "" },
  { name = "tran", type = "keyword", description = "" },
  { name = "transaction", type = "keyword", description = "" },
  { name = "translate", type = "keyword", description = "" },
  { name = "translate_chk", type = "keyword", description = "" },
  { name = "translate_regex", type = "keyword", description = "" },
  { name = "translation", type = "keyword", description = "" },
  { name = "treat", type = "keyword", description = "" },
  { name = "trigger", type = "keyword", description = "" },
  { name = "trim", type = "keyword", description = "" },
  { name = "trim_array", type = "keyword", description = "" },
  { name = "true", type = "keyword", description = "" },
  { name = "truncate", type = "keyword", description = "" },
  { name = "try_convert", type = "keyword", description = "" },
  { name = "tsequal", type = "keyword", description = "" },
  { name = "type", type = "keyword", description = "" },
  { name = "uc", type = "keyword", description = "" },
  { name = "uescape", type = "keyword", description = "" },
  { name = "uid", type = "keyword", description = "" },
  { name = "undefined", type = "keyword", description = "" },
  { name = "under", type = "keyword", description = "" },
  { name = "undo", type = "keyword", description = "" },
  { name = "union", type = "keyword", description = "" },
  { name = "unique", type = "keyword", description = "" },
  { name = "unknown", type = "keyword", description = "" },
  { name = "unlock", type = "keyword", description = "" },
  { name = "unnest", type = "keyword", description = "" },
  { name = "unpivot", type = "keyword", description = "" },
  { name = "unsigned", type = "keyword", description = "" },
  { name = "until", type = "keyword", description = "" },
  { name = "upd", type = "keyword", description = "" },
  { name = "update", type = "keyword", description = "" },
  { name = "updatetext", type = "keyword", description = "" },
  { name = "upper", type = "keyword", description = "" },
  { name = "uppercase", type = "keyword", description = "" },
  { name = "usage", type = "keyword", description = "" },
  { name = "use", type = "keyword", description = "" },
  { name = "user", type = "keyword", description = "" },
  { name = "using", type = "keyword", description = "" },
  { name = "utc_date", type = "keyword", description = "" },
  { name = "utc_time", type = "keyword", description = "" },
  { name = "utc_timestamp", type = "keyword", description = "" },
  { name = "validate", type = "keyword", description = "" },
  { name = "validproc", type = "keyword", description = "" },
  { name = "value", type = "keyword", description = "" },
  { name = "values", type = "keyword", description = "" },
  { name = "value_of", type = "keyword", description = "" },
  { name = "varbinary", type = "keyword", description = "" },
  { name = "varbyte", type = "keyword", description = "" },
  { name = "varchar", type = "keyword", description = "" },
  { name = "varchar2", type = "keyword", description = "" },
  { name = "varcharacter", type = "keyword", description = "" },
  { name = "vargraphic", type = "keyword", description = "" },
  { name = "variable", type = "keyword", description = "" },
  { name = "variadic", type = "keyword", description = "" },
  { name = "variant", type = "keyword", description = "" },
  { name = "varying", type = "keyword", description = "" },
  { name = "var_pop", type = "keyword", description = "" },
  { name = "var_samp", type = "keyword", description = "" },
  { name = "vcat", type = "keyword", description = "" },
  { name = "verbose", type = "keyword", description = "" },
  { name = "versioning", type = "keyword", description = "" },
  { name = "view", type = "keyword", description = "" },
  { name = "virtual", type = "keyword", description = "" },
  { name = "volatile", type = "keyword", description = "" },
  { name = "volumes", type = "keyword", description = "" },
  { name = "wait", type = "keyword", description = "" },
  { name = "waitfor", type = "keyword", description = "" },
  { name = "when", type = "keyword", description = "" },
  { name = "whenever", type = "keyword", description = "" },
  { name = "where", type = "keyword", description = "" },
  { name = "while", type = "keyword", description = "" },
  { name = "width_bucket", type = "keyword", description = "" },
  { name = "window", type = "keyword", description = "" },
  { name = "with", type = "keyword", description = "" },
  { name = "within", type = "keyword", description = "" },
  { name = "within_group", type = "keyword", description = "" },
  { name = "without", type = "keyword", description = "" },
  { name = "wlm", type = "keyword", description = "" },
  { name = "work", type = "keyword", description = "" },
  { name = "write", type = "keyword", description = "" },
  { name = "writetext", type = "keyword", description = "" },
  { name = "xmlcast", type = "keyword", description = "" },
  { name = "xmlexists", type = "keyword", description = "" },
  { name = "xmlnamespaces", type = "keyword", description = "" },
  { name = "xor", type = "keyword", description = "" },
  { name = "year", type = "keyword", description = "" },
  { name = "years", type = "keyword", description = "" },
  { name = "year_month", type = "keyword", description = "" },
  { name = "zerofill", type = "keyword", description = "" },
  { name = "zeroifnull", type = "keyword", description = "" },
  { name = "zone", type = "keyword", description = "" },
}

return M
