mod keyword_gen {
include!(concat!(env!("OUT_DIR"), "/keyword_gen.rs"));
}
#[derive(Debug, Clone, Copy)]
pub(crate) struct Restrict(u16);
impl core::ops::BitOr for Restrict {
type Output = Self;
#[inline]
fn bitor(self, rhs: Self) -> Self::Output {
let mut result = self;
result.0 |= rhs.0;
result
}
}
impl Restrict {
#[inline]
fn check(self, rhs: Self) -> bool {
(self.0 & rhs.0) != 0
}
pub const EMPTY: Self = Restrict(0b0);
pub const MARIADB: Self = Restrict(0b1);
pub const POSTGRES: Self = Restrict(0b10);
pub const SQLITE: Self = Restrict(0b100);
pub const USING: Self = Restrict(0b1000);
pub const UPDATE_TABLE: Self = Restrict(0b10000);
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[allow(non_camel_case_types, clippy::upper_case_acronyms)]
#[derive(Default)]
#[repr(usize)]
pub(crate) enum Keyword {
ADD, ALL, ALTER, ANALYZE, AND, ANY, AS, ASC, ASENSITIVE, AUTHORIZATION, BEFORE, BETWEEN, BIGINT, BINARY, BLOB, BOTH, BY, CALL, CASCADE, CASE, CAST, CHANGE, CHAR, CHARACTER, CHECK, COLLATE, COLLATION, COLUMN, COMMENT, COMMIT, CONCURRENTLY, CONDITION, CONSTRAINT, CONTINUE, CONVERT, CREATE, CROSS, CURRENT_CATALOG, CURRENT_DATE, CURRENT_ROLE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, DATABASES, DAY_HOUR, DAY_MICROSECOND, DAY_MINUTE, DAY_SECOND, DEC, DECIMAL, DECLARE, DEFAULT, DEFERRABLE, DELAYED, DELETE, DELETE_DOMAIN_ID, DESC, DESCRIBE, DETERMINISTIC, DISTINCT, DISTINCTROW, DIV, DO, DOUBLE, DO_DOMAIN_IDS, DROP, DUAL, EACH, ELSE, ELSEIF, ENCLOSED, END, ESCAPE, ESCAPED, EXCEPT, EXISTS, EXIT, EXPLAIN, FALSE, FETCH, FLOAT, FLOAT4, FLOAT8, FOR, FORCE, FOREIGN, FROM, FULL, FULLTEXT, GRANT, GROUP, HAVING, HIGH_PRIORITY, HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IF, IGNORE, IGNORE_DOMAIN_IDS, IN, INDEX, INFILE, INITIALLY, INNER, INOUT, INSENSITIVE, INSERT, INT, INT1, INT2, INT3, INT4, INT8, INTEGER, INTERSECT, INTERVAL, INTO, IS, ITERATE, JOIN, KEY, KEYS, KILL, LEADING, LEAVE, LEFT, LIKE, LIMIT, LINEAR, LINES, LOAD, LOCALTIME, LOCALTIMESTAMP, LOCK, LONG, LONGBLOB, LONGTEXT, LOOP, LOW_PRIORITY, MATCH, MAXVALUE, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, MIDDLEINT, MINUTE_MICROSECOND, MINUTE_SECOND, MOD, MODIFIES, NATURAL, NOT, NOTHING, NO_WRITE_TO_BINLOG, NULL, NUMERIC, OFFSET, ON, ONLY, OPTIMIZE, OPTIONALLY, OR, ORDER, OUT, OUTER, OUTFILE, OVER, OVERLAPS, PAGE_CHECKSUM, PARSE_VCOL_EXPR, PARTITION, PORTION, PRECISION, PRIMARY, PROCEDURE, PURGE, RANGE, READ, READS, READ_WRITE, REAL, RECURSIVE, REFERENCES, REF_SYSTEM_ID, REGEXP, RENAME, REPEAT, REPLACE, REQUIRE, RESIGNAL, RESTRICT, RETURN, RETURNING, REVOKE, RIGHT, RLIKE, ROWS, SCHEMAS, SECOND_MICROSECOND, SELECT, SENSITIVE, SEPARATOR, SESSION_USER, SET, SHOW, SIGNAL, SMALLINT, SOME, SPATIAL, SPECIFIC, SQL, SQLEXCEPTION, SQLSTATE, SQLWARNING, SQL_BIG_RESULT, SQL_CALC_FOUND_ROWS, SQL_SMALL_RESULT, SSL, STARTING, STATS_AUTO_RECALC, STATS_PERSISTENT, STATS_SAMPLE_PAGES, STRAIGHT_JOIN, TABLE, TERMINATED, THEN, TINYBLOB, TINYINT, TINYTEXT, TO, TRAILING, TRANSACTION, TRIGGER, TRUE, UNDO, UNION, UNIQUE, UNLOCK, UNSIGNED, UPDATE, USAGE, USE, USING, UTC_DATE, UTC_TIME, UTC_TIMESTAMP, VALUES, VARBINARY, VARCHAR, VARCHARACTER, VARYING, WHEN, WHERE, WHILE, WINDOW, WITH, WRITE, XOR, YEAR_MONTH, ZEROFILL, #[default]
NOT_A_KEYWORD,
QUOTED_IDENTIFIER,
_LIST_,
ABS,
ACCESSIBLE,
ACCOUNT,
ACOS,
ACOSD,
ACOSH,
ACTION,
ADD_MONTHS,
ADDDATE,
ADDTIME,
ADMIN,
AES_DECRYPT,
AES_ENCRYPT,
AFTER,
AGAINST,
AGGREGATE,
ALGORITHM,
ALWAYS,
ANY_VALUE,
ARRAY_AGG,
ARRAY,
ARRAY_APPEND,
ARRAY_CAT,
ARRAY_DIMS,
ARRAY_FILL,
ARRAY_LENGTH,
ARRAY_LOWER,
ARRAY_NDIMS,
ARRAY_POSITION,
ARRAY_POSITIONS,
ARRAY_PREPEND,
ARRAY_REMOVE,
ARRAY_REPLACE,
ARRAY_REVERSE,
ARRAY_SAMPLE,
ARRAY_SHUFFLE,
ARRAY_SORT,
ARRAY_TO_JSON,
ARRAY_TO_STRING,
ARRAY_TO_TSVECTOR,
ARRAY_UPPER,
AREA,
ABBREV,
ASCII,
ASIN,
ASIND,
ASINH,
AT,
ATAN,
ATAN2,
ATAN2D,
ATAND,
ATANH,
ATOMIC,
ATTRIBUTE,
AUTHORS,
AUTO_INCREMENT,
AUTO,
AUTOEXTEND_SIZE,
AVG_ROW_LENGTH,
AVG,
BACKUP,
BEGIN,
BENCHMARK,
BIGSERIAL,
BIN_TO_UUID,
BIN,
BINLOG,
BIT_AND,
BIT_COUNT,
BIT_LENGTH,
BIT_OR,
BIT_XOR,
BIT,
BLOCK,
BLOOM,
BODY,
BOOL_AND,
BOOL_OR,
BOOL,
BOOLEAN,
BOUND_BOX,
BROADCAST,
BOX,
BOX2D,
BOX3D,
BPCHAR_PATTERN_OPS,
BPCHAR,
BRIN,
BTREE,
BTRIM,
BUFFERS,
BYPASSRLS,
BYTE,
BYTEA,
CBRT,
CACHE,
CALLED,
CASCADED,
CASEFOLD,
CATALOG_NAME,
CEIL,
CEILING,
CENTER,
CARDINALITY,
CHAIN,
CHANGED,
CHANNEL,
CHAR_LENGTH,
CHARACTER_LENGTH,
CHARSET,
CHECKPOINT,
CHECKSUM,
CHR,
CIDR,
CIPHER,
CIRCLE,
CLASS_ORIGIN,
CLASS,
CLIENT,
CLOB,
CLOSE,
COALESCE,
CODE,
COERCIBILITY,
COL_DESCRIPTION,
COLUMN_ADD,
COLUMN_CHECK,
COLUMN_CREATE,
COLUMN_DELETE,
COLUMN_GET,
COLUMN_NAME,
COLUMNS,
COMMITTED,
COMMUTATOR,
COMPACT,
COMPLETION,
COMPRESS,
COMPRESSED,
COMPRESSION,
CONCAT_WS,
CONCAT,
CONCURRENT,
CONFLICT,
CONNECT,
CONNECTION_ID,
CONNECTION,
CONSISTENT,
CONSTRAINT_CATALOG,
CONSTRAINT_NAME,
CONSTRAINT_SCHEMA,
CONTAINS,
CONTEXT,
CONTRIBUTORS,
CONV,
CONVERT_TZ,
COPY,
CORR,
COS,
COSD,
COSH,
COSTS,
COT,
COTD,
COUNT,
COVAR_POP,
COVAR_SAMP,
CPU,
CRC32,
CRC32C,
CREATEDB,
CREATEROLE,
CSV,
CUBE,
CUME_DIST,
CURDATE,
CURRENT_DATABASE,
CURRENT_POS,
CURRENT_QUERY,
CURRENT_SCHEMAS,
CURRENT,
CURSOR_NAME,
CURSOR_TO_XML,
CURSOR_TO_XMLSCHEMA,
CURTIME,
CYCLE,
DATA,
DATABASE,
DATABASE_TO_XML,
DATABASE_TO_XML_AND_XMLSCHEMA,
DATABASE_TO_XMLSCHEMA,
DATAFILE,
DATATYPE,
DATE_ADD,
DATE_FORMAT,
DATE_SUB,
DATE,
DATEDIFF,
DATEMULTIRANGE,
DATERANGE,
DATETIME,
DAY,
DAYNAME,
DAYOFMONTH,
DAYOFWEEK,
DAYOFYEAR,
DEALLOCATE,
DEBUG,
DEFERRED,
DEFINER,
DEGREES,
DETAIL,
DELAY_KEY_WRITE,
DELIMITER,
DENSE_RANK,
DES_KEY_FILE,
DIAGONAL,
DIAMETER,
DIAGNOSTICS,
DIRECTORY,
DISABLE,
DISCARD,
DISK,
DOMAIN,
DUMPFILE,
DUPLICATE,
DYNAMIC,
ELSIF,
ELT,
EMPTY,
ENABLE,
ENCODING,
ENCRYPTED,
ENCRYPTION,
ENDS,
ENGINE_ATTRIBUTE,
ENGINE,
ENGINES,
ENUM,
ENUM_FIRST,
ENUM_LAST,
ENUM_RANGE,
ERF,
ERFC,
ERRCODE,
ERROR,
ERRORS,
EVENT,
EVENTS,
EVERY,
EXAMINED,
EXCEPTION,
EXCHANGE,
EXCLUDE,
EXCLUSIVE,
EXECUTE,
EXP,
EXPANSION,
EXPIRE,
EXPORT_SET,
EXPORT,
EXTENDED,
EXTENSION,
EXTENT_SIZE,
EXTRACT,
EXTRACTVALUE,
FACTORIAL,
FAMILY,
FAST,
FAULTS,
FEDERATED,
FIELD,
FIELDS,
FILE,
FILTER,
FIND_IN_SET,
FIRST_VALUE,
FIRST,
FIXED,
FLOOR,
FLUSH,
FOLLOWING,
FOLLOWS,
FORCE_NOT_NULL,
FORCE_NULL,
FORCE_QUOTE,
FORMAT_BYTES,
FORMAT_PICO_TIME,
FORMAT_TYPE,
FORMAT,
FOUND_ROWS,
FOUND,
FREEZE,
FROM_BASE64,
FROM_DAYS,
FROM_UNIXTIME,
FUNCTION,
FUNCTIONS,
GENERAL,
GEN_RANDOM_UUID,
GENERATE_SERIES,
GENERATED,
GENERIC_PLAN,
GEOMETRYTYPE,
GET_BIT,
GET_CURRENT_TS_CONFIG,
GET_FORMAT,
GET_LOCK,
GET,
GAMMA,
GCD,
GIN,
GIST,
GLOBAL,
GOTO,
GRANTED,
GRANTS,
GREATEST,
GROUP_CONCAT,
GROUPING,
HAS_ANY_COLUMN_PRIVILEGE,
HAS_COLUMN_PRIVILEGE,
HAS_DATABASE_PRIVILEGE,
HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE,
HAS_FUNCTION_PRIVILEGE,
HAS_LANGUAGE_PRIVILEGE,
HAS_LARGEOBJECT_PRIVILEGE,
HAS_PARAMETER_PRIVILEGE,
HAS_SCHEMA_PRIVILEGE,
HAS_SEQUENCE_PRIVILEGE,
HAS_SERVER_PRIVILEGE,
HAS_TABLE_PRIVILEGE,
HAS_TABLESPACE_PRIVILEGE,
HAS_TYPE_PRIVILEGE,
HANDLER,
HARD,
HASH,
HINT,
HASHES,
HEADER,
HEIGHT,
HELP,
HEX,
HISTORY,
HNSW,
HOLD,
HOST,
HOSTMASK,
HOSTS,
HOUR,
ICU_UNICODE_VERSION,
ICU_VERSION,
ID,
IDENTIFIED,
IDENTITY,
IFNULL,
IGNORE_SERVER_IDS,
IGNORED,
IMMEDIATE,
IMMUTABLE,
IMPORT,
INCLUDE,
INCREMENT,
INDEXES,
INET_ATON,
INET_NTOA,
INET,
INET4,
INET6_ATON,
INET6_NTOA,
INET6,
INET_CLIENT_ADDR,
INET_CLIENT_PORT,
INET_SERVER_ADDR,
INET_SERVER_PORT,
INET_MERGE,
INET_SAME_FAMILY,
INFO,
INHERIT,
INHERITS,
INITIAL_SIZE,
INPLACE,
INPUT,
INSERT_METHOD,
INSTALL,
INITCAP,
INSTANT,
INSTEAD,
INSTR,
INT2_OPS,
INT4_OPS,
INT4MULTIRANGE,
INT4RANGE,
INT8_OPS,
INT8MULTIRANGE,
INT8RANGE,
INTERSECTA,
INVISIBLE,
INVOKER,
IO_THREAD,
IO,
IPC,
IS_FREE_LOCK,
IS_IPV4_COMPAT,
IS_IPV4_MAPPED,
IS_IPV4,
IS_IPV6,
IS_USED_LOCK,
IS_UUID,
ISOLATION,
ISCLOSED,
ISOPEN,
ISSUER,
JSON_AGG,
JSON_ARRAY_APPEND,
JSON_ARRAY_INSERT,
JSON_ARRAY_INTERSECT,
JSON_ARRAY,
JSON_ARRAY_ELEMENTS,
JSON_ARRAY_ELEMENTS_TEXT,
JSON_ARRAY_LENGTH,
JSON_ARRAYAGG,
JSON_BUILD_ARRAY,
JSON_BUILD_OBJECT,
JSON_COMPACT,
JSON_CONTAINS_PATH,
JSON_CONTAINS,
JSON_DEPTH,
JSON_EACH,
JSON_EACH_TEXT,
JSON_DETAILED,
JSON_EQUALS,
JSON_EXISTS,
JSON_EXTRACT,
JSON_EXTRACT_PATH,
JSON_EXTRACT_PATH_TEXT,
JSON_INSERT,
JSON_KEYS,
JSON_LENGTH,
JSON_LOOSE,
JSON_MERGE_PATCH,
JSON_MERGE_PRESERVE,
JSON_MERGE,
JSON_NORMALIZE,
JSON_OBJECT_FILTER_KEYS,
JSON_OBJECT_TO_ARRAY,
JSON_OBJECT,
JSON_OBJECT_KEYS,
JSON_OBJECTAGG,
JSON_OVERLAPS,
JSON_POPULATE_RECORD,
JSON_POPULATE_RECORDSET,
JSON_PRETTY,
JSON_QUERY,
JSON_QUOTE,
JSON_REMOVE,
JSON_REPLACE,
JSON_SCHEMA_VALID,
JSON_SEARCH,
JSON_SET,
JSON_SCALAR,
JSON_SERIALIZE,
JSON_STRIP_NULLS,
JSON_TABLE,
JSON_TO_TSVECTOR,
JSON_TO_RECORD,
JSON_TO_RECORDSET,
JSON_TYPE,
JSON_TYPEOF,
JSON_UNQUOTE,
JSON_VALID,
JSON_VALUE,
JSON,
JSONB_AGG,
JSONB_ARRAY_ELEMENTS,
JSONB_ARRAY_ELEMENTS_TEXT,
JSONB_ARRAY_LENGTH,
JSONB_BUILD_ARRAY,
JSONB_BUILD_OBJECT,
JSONB_EACH,
JSONB_EACH_TEXT,
JSONB_EXTRACT_PATH,
JSONB_EXTRACT_PATH_TEXT,
JSONB_INSERT,
JSONB_OBJECT,
JSONB_OBJECT_AGG,
JSONB_OBJECT_KEYS,
JSONB_PATH_EXISTS,
JSONB_PATH_EXISTS_TZ,
JSONB_PATH_MATCH,
JSONB_PATH_MATCH_TZ,
JSONB_PATH_QUERY,
JSONB_PATH_QUERY_ARRAY,
JSONB_PATH_QUERY_ARRAY_TZ,
JSONB_PATH_QUERY_FIRST,
JSONB_PATH_QUERY_FIRST_TZ,
JSONB_PATH_QUERY_TZ,
JSONB_POPULATE_RECORD,
JSONB_POPULATE_RECORD_VALID,
JSONB_POPULATE_RECORDSET,
JSONB_PRETTY,
JSONB_SET,
JSONB_SET_LAX,
JSONB_STRIP_NULLS,
JSONB_TO_RECORD,
JSONB_TO_RECORDSET,
JSONB_TO_TSVECTOR,
JSONB_TYPEOF,
JSONB,
KEY_BLOCK_SIZE,
LAG,
LANGUAGE,
LARGE,
LAST_DAY,
LAST_INSERT_ID,
LAST_VALUE,
LAST,
LASTVAL,
CURRVAL,
LATERAL,
LCASE,
LCM,
LEAD,
LEAST,
LEAVES,
LEFTARG,
LENGTH,
LENGTHB,
LESS,
LEVEL,
LGAMMA,
LINE,
LIST,
LN,
LOAD_FILE,
LOCAL,
LOCATE,
LOCKED,
LOCKS,
LOG_VERBOSITY,
LOG,
LOG10,
LOG2,
LOGFILE,
LOGIN,
LOGS,
LOWER,
LPAD,
LSEG,
LTRIM,
MACADDR,
MACADDR8,
MACADDR8_SET7BIT,
MAINTAIN,
MAKE_SET,
MAKEACLITEM,
MAKEDATE,
MAKETIME,
MASTER_CONNECT_RETRY,
MASTER_DELAY,
MASTER_GTID_POS,
MASTER_HEARTBEAT_PERIOD,
MASTER_HOST,
MASTER_LOG_FILE,
MASTER_LOG_POS,
MASTER_PASSWORD,
MASTER_PORT,
MASTER_SERVER_ID,
MASTER_SSL_CA,
MASTER_SSL_CAPATH,
MASTER_SSL_CERT,
MASTER_SSL_CIPHER,
MASTER_SSL_CRL,
MASTER_SSL_CRLPATH,
MASTER_SSL_KEY,
MASTER_SSL_VERIFY_SERVER_CERT,
MASTER_SSL,
MASTER_USE_GTID,
MASTER_USER,
MASTER,
MATERIALIZED,
MAX_CONNECTIONS_PER_HOUR,
MAX_QUERIES_PER_HOUR,
MAX_ROWS,
MAX_SIZE,
MAX_STATEMENT_TIME,
MAX_UPDATES_PER_HOUR,
MAX_USER_CONNECTIONS,
MAX,
MD5,
MEDIUM,
MEMBER,
MEMORY,
MERGE,
MERGES,
MESSAGE,
MESSAGE_TEXT,
MICROSECOND,
MID,
MIGRATE,
MIN_ROWS,
MIN_SCALE,
MIN,
MINUS,
MINUTE,
MINVALUE,
MODE,
MODIFY,
MODULUS,
MONEY,
MONITOR,
MONTH,
MONTHNAME,
MUTEX,
MXID_AGE,
MYSQL_ERRNO,
MYSQL,
NAME_CONST,
NAME,
NAMES,
NATIONAL,
NATURAL_SORT_KEY,
MASKLEN,
NCHAR,
NEGATOR,
NESTED,
NETMASK,
NETWORK,
NEVER,
NEW,
NEXT,
NEXTVAL,
NO_WAIT,
NO,
NOBYPASSRLS,
NOCACHE,
NOCREATEDB,
NOCREATEROLE,
NOCYCLE,
NODEGROUP,
NOINHERIT,
NOLOGIN,
NOMAXVALUE,
NOMINVALUE,
NONE,
NOREPLICATION,
NORMALIZE,
NOSUPERUSER,
NOTFOUND,
NOTICE,
NOW,
NOWAIT,
NPOINTS,
NTH_VALUE,
NTILE,
NULLIF,
NULLS,
NUMBER,
NUMMULTIRANGE,
NUMNODE,
NUMRANGE,
NVARCHAR,
NVL,
NVL2,
OBJ_DESCRIPTION,
OBJECT,
OCT,
OCTET_LENGTH,
OF,
OFF,
OLD_PASSWORD,
OLD,
ON_ERROR,
ONE,
ONLINE,
OPEN,
OPERATOR,
OPTIMIZER_COSTS,
OPTIMIZER,
OPTION,
OPTIONS,
ORD,
ORDINALITY,
OTHERS,
OWNED,
OWNER,
PACK_KEYS,
PACKAGE,
PAGE,
PARALLEL,
PARAMETER,
PARSE_IDENT,
PARSER,
PARTIAL,
PARTITIONING,
PARTITIONS,
PASSWORD,
PATH,
PCLOSE,
POPEN,
PERCENT_RANK,
PERCENTILE_CONT,
PERCENTILE_DISC,
PERIOD_ADD,
PERIOD_DIFF,
PERIOD,
PERFORM,
PERSISTENT,
PG_AVAILABLE_WAL_SUMMARIES,
PG_BACKEND_PID,
PG_BLOCKING_PIDS,
PG_CHAR_TO_ENCODING,
PG_CLIENT_ENCODING,
PG_COLLATION_IS_VISIBLE,
PG_CONF_LOAD_TIME,
PG_CONTROL_CHECKPOINT,
PG_CONTROL_INIT,
PG_CONTROL_RECOVERY,
PG_CONTROL_SYSTEM,
PG_CONVERSION_IS_VISIBLE,
PG_CURRENT_LOGFILE,
PG_CURRENT_SNAPSHOT,
PG_CURRENT_XACT_ID,
PG_CURRENT_XACT_ID_IF_ASSIGNED,
PG_DESCRIBE_OBJECT,
PG_ENCODING_TO_CHAR,
PG_FUNCTION_IS_VISIBLE,
PG_GET_ACL,
PG_GET_CONSTRAINTDEF,
PG_GET_EXPR,
PG_GET_FUNCTIONDEF,
PG_GET_FUNCTION_ARGUMENTS,
PG_GET_FUNCTION_IDENTITY_ARGUMENTS,
PG_GET_FUNCTION_RESULT,
PG_GET_INDEXDEF,
PG_GET_OBJECT_ADDRESS,
PG_GET_PARTITION_CONSTRAINTDEF,
PG_GET_PARTKEYDEF,
PG_GET_RULEDEF,
PG_GET_SERIAL_SEQUENCE,
PG_GET_STATISTICSOBJDEF,
PG_GET_TRIGGERDEF,
PG_GET_USERBYID,
PG_GET_VIEWDEF,
PG_GET_WAL_SUMMARIZER_STATE,
PG_HAS_ROLE,
PG_INDEX_COLUMN_HAS_PROPERTY,
PG_INDEX_HAS_PROPERTY,
PG_INDEXAM_HAS_PROPERTY,
PG_INPUT_ERROR_INFO,
PG_INPUT_IS_VALID,
PG_IS_OTHER_TEMP_SCHEMA,
PG_JIT_AVAILABLE,
PG_LAST_COMMITTED_XACT,
PG_LISTENING_CHANNELS,
PG_MY_TEMP_SCHEMA,
PG_NOTIFICATION_QUEUE_USAGE,
PG_OPCLASS_IS_VISIBLE,
PG_OPERATOR_IS_VISIBLE,
PG_OPFAMILY_IS_VISIBLE,
PG_POSTMASTER_START_TIME,
PG_SAFE_SNAPSHOT_BLOCKING_PIDS,
PG_SETTINGS_GET_FLAGS,
PG_SNAPSHOT_XIP,
PG_SNAPSHOT_XMAX,
PG_SNAPSHOT_XMIN,
PG_STATISTICS_OBJ_IS_VISIBLE,
PG_TABLE_IS_VISIBLE,
PG_TABLESPACE_LOCATION,
PG_TRIGGER_DEPTH,
PG_TS_CONFIG_IS_VISIBLE,
PG_TS_DICT_IS_VISIBLE,
PG_TS_PARSER_IS_VISIBLE,
PG_TS_TEMPLATE_IS_VISIBLE,
PG_TYPE_IS_VISIBLE,
PG_TYPEOF,
PG_VISIBLE_IN_SNAPSHOT,
PG_XACT_COMMIT_TIMESTAMP,
PG_XACT_STATUS,
PHASE,
PI,
PHRASETO_TSQUERY,
PLAINTO_TSQUERY,
PLPGSQL,
PLUGIN,
PLUGINS,
POINT,
POLYGON,
PORT,
POSITION,
POSTGIS_FULL_VERSION,
POW,
POWER,
PRECEDES,
PRECEDING,
PREPARE,
PRESERVE,
PREV,
PREVIOUS,
PRIVILEGES,
PROCEDURES,
PROCESS,
PROCESSLIST,
PROFILE,
PROFILES,
PROGRAM,
PROXY,
PS_CURRENT_THREAD_ID,
PS_THREAD_ID,
PUBLIC,
QUARTER,
QUERY,
QUERYTREE,
QUERY_TO_XML,
QUERY_TO_XML_AND_XMLSCHEMA,
QUERY_TO_XMLSCHEMA,
QUICK,
QUOTE,
QUOTE_IDENT,
QUOTE_LITERAL,
QUOTE_NULLABLE,
RADIANS,
RADIUS,
RAISE,
RAND,
RANDOM_BYTES,
RANDOM_NORMAL,
RANK,
RAW,
READ_ONLY,
REBUILD,
RECOVER,
REDO_BUFFER_SIZE,
REDOFILE,
REDUNDANT,
REFERENCING,
REFRESH,
REGEXP_COUNT,
REGEXP_INSTR,
REGEXP_LIKE,
REGEXP_MATCH,
REGEXP_MATCHES,
REGEXP_REPLACE,
REGEXP_SPLIT_TO_ARRAY,
REGEXP_SPLIT_TO_TABLE,
REGEXP_SUBSTR,
REGR_AVGX,
REGR_AVGY,
REGR_COUNT,
REGR_INTERCEPT,
REGR_R2,
REGR_SLOPE,
REGR_SXX,
REGR_SXY,
REGR_SYY,
REJECT_LIMIT,
RELAY_LOG_FILE,
RELAY_LOG_POS,
RELAY_THREAD,
RELAY,
RELAYLOG,
RELEASE_ALL_LOCKS,
RELEASE_LOCK,
RELEASE,
RELOAD,
REMAINDER,
REMOVE,
REORGANIZE,
REPAIR,
REPEATABLE,
REPLAY,
REPLICA_POS,
REPLICA,
REPLICAS,
REPLICATION,
RESET,
RESTART,
RESTORE,
RESUME,
RETURNED_SQLSTATE,
RETURNS,
REUSE,
REVERSE,
RIGHTARG,
ROLE,
ROLES_GRAPHML,
ROLLBACK,
ROLLUP,
ROUND,
ROUTINE,
ROUTINES,
ROW_COUNT,
ROW_FORMAT,
ROW_NUMBER,
ROW_SECURITY_ACTIVE,
ROW,
ROW_TO_JSON,
ROWCOUNT,
ROWNUM,
ROWS_FROM,
ROWTYPE,
RPAD,
RTREE,
RTRIM,
RULE,
SAVEPOINT,
SCALE,
SCHEDULE,
SCHEMA_NAME,
SCHEMA,
SCHEMA_TO_XML,
SCHEMA_TO_XML_AND_XMLSCHEMA,
SCHEMA_TO_XMLSCHEMA,
SCROLL,
SEARCH,
SEC_TO_TIME,
SECOND,
SECONDARY_ENGINE_ATTRIBUTE,
SECONDARY_ENGINE,
SECONDARY,
SECURITY,
SEQUENCE,
SEQUENCES,
SERIAL,
SERIALIZABLE,
SERVER,
SESSION,
SETSEED,
SETTINGS,
SETVAL,
SET_BIT,
SET_MASKLEN,
SETWEIGHT,
SFORMAT,
SHA,
SHA1,
SHA2,
SHARE,
SHARED,
SHOBJ_DESCRIPTION,
SHUTDOWN,
SIGN,
SIGNED,
SIMILAR,
SIMPLE,
SIN,
SIND,
SINH,
SKIP,
SLAVE_POS,
SLAVE,
SLAVES,
SLEEP,
SLOPE,
SLOW,
SMALLSERIAL,
SNAPSHOT,
SOCKET,
SOFT,
SONAME,
SOUNDEX,
SOUNDS,
SOURCE,
SPACE,
SPLIT_PART,
SQL_BUFFER_RESULT,
SQL_CACHE,
SQL_NO_CACHE,
SQL_THREAD,
SQL_TSI_DAY,
SQL_TSI_HOUR,
SQL_TSI_MINUTE,
SQL_TSI_MONTH,
SQL_TSI_QUARTER,
SQL_TSI_SECOND,
SQL_TSI_WEEK,
SQL_TSI_YEAR,
SQRT,
STABLE,
STAGE,
START,
STARTS_WITH,
STARTS,
STATEMENT_DIGEST_TEXT,
STATEMENT_DIGEST,
STATEMENT,
STATUS,
STD,
STDDEV_POP,
STDDEV_SAMP,
STDDEV,
STDIN,
STDOUT,
STOP,
STORAGE,
STORED,
ST_ADDMEASURE,
ST_ADDPOINT,
ST_AFFINE,
ST_AREA,
ST_ASBINARY,
ST_ASEWKB,
ST_ASEWKT,
ST_ASGEOJSON,
ST_ASGML,
ST_ASHEXEWKB,
ST_ASKML,
ST_ASSVG,
ST_ASTEXT,
ST_AZIMUTH,
ST_BOUNDARY,
ST_BUFFER,
ST_BUILDAREA,
ST_CENTROID,
ST_CLOSESTPOINT,
ST_COLLECT,
ST_COLLECTIONEXTRACT,
ST_CONTAINS,
ST_CONTAINSPROPERLY,
ST_CONVEXHULL,
ST_COORDDIM,
ST_COVEREDBY,
ST_COVERS,
ST_CROSSES,
ST_CURVETOLINE,
ST_DFULLWITHIN,
ST_DIFFERENCE,
ST_DIMENSION,
ST_DISJOINT,
ST_DISTANCE,
ST_DISTANCE_SPHERE,
ST_DISTANCE_SPHEROID,
ST_DWITHIN,
ST_ENDPOINT,
ST_ENVELOPE,
ST_EQUALS,
ST_EXTERIORRING,
ST_FORCE_2D,
ST_FORCE_3D,
ST_FORCE_3DM,
ST_FORCE_3DZ,
ST_FORCE_4D,
ST_FORCE_COLLECTION,
ST_FORCERHR,
ST_GEOHASH,
ST_GEOMCOLLFROMTEXT,
ST_GEOMFROMEWKB,
ST_GEOMFROMEWKT,
ST_GEOMFROMGEOJSON,
ST_GEOMFROMGML,
ST_GEOMFROMKML,
ST_GEOMFROMTEXT,
ST_GEOMFROMWKB,
ST_GEOMETRYFROMTEXT,
ST_GEOMETRYN,
ST_GEOMETRYTYPE,
ST_GMLTOSQL,
ST_HASARC,
ST_HAUSDORFFDISTANCE,
ST_INTERIORRINGN,
ST_INTERSECTION,
ST_INTERSECTS,
ST_ISCLOSED,
ST_ISEMPTY,
ST_ISRING,
ST_ISSIMPLE,
ST_ISVALID,
ST_ISVALIDREASON,
ST_LENGTH,
ST_LENGTH2D,
ST_LENGTH3D,
ST_LINECROSSINGDIRECTION,
ST_LINEFROMMULTIPOINT,
ST_LINEFROMTEXT,
ST_LINEFROMWKB,
ST_LINEMERGE,
ST_LINESTRINGFROMWKB,
ST_LINETOCURVE,
ST_LINE_INTERPOLATE_POINT,
ST_LINE_LOCATE_POINT,
ST_LINE_SUBSTRING,
ST_LONGESTLINE,
ST_M,
ST_MAKEENVELOPE,
ST_MAKELINE,
ST_MAKEPOINT,
ST_MAKEPOINTM,
ST_MAKEPOLYGON,
ST_MAXDISTANCE,
ST_MEM_SIZE,
ST_MINIMUMBOUNDINGCIRCLE,
ST_MULTI,
ST_NDIMS,
ST_NPOINTS,
ST_NRINGS,
ST_NUMGEOMETRIES,
ST_NUMINTERIORRING,
ST_NUMINTERIORRINGS,
ST_NUMPOINTS,
ST_ORDERINGEQUALS,
ST_OVERLAPS,
ST_PERIMETER,
ST_PERIMETER2D,
ST_PERIMETER3D,
ST_POINT,
ST_POINTFROMTEXT,
ST_POINTFROMWKB,
ST_POINTN,
ST_POINTONSURFACE,
ST_POINT_INSIDE_CIRCLE,
ST_POLYGON,
ST_POLYGONFROMTEXT,
ST_POLYGONIZE,
ST_RELATE,
ST_REMOVEPOINT,
ST_REVERSE,
ST_ROTATE,
ST_ROTATEX,
ST_ROTATEY,
ST_ROTATEZ,
ST_SCALE,
ST_SEGMENTIZE,
ST_SETPOINT,
ST_SETSRID,
ST_SHIFT_LONGITUDE,
ST_SHORTESTLINE,
ST_SIMPLIFY,
ST_SIMPLIFYPRESERVETOPOLOGY,
ST_SNAPTOGRID,
ST_SRID,
ST_STARTPOINT,
ST_SUMMARY,
ST_SYMDIFFERENCE,
ST_TOUCHES,
ST_TRANSFORM,
ST_TRANSLATE,
ST_TRANSSCALE,
ST_UNION,
ST_WITHIN,
ST_WKBTOSQL,
ST_WKTTOSQL,
ST_X,
ST_XMAX,
ST_XMIN,
ST_Y,
ST_YMAX,
ST_YMIN,
ST_Z,
ST_ZMAX,
ST_ZMIN,
ST_ZMFLAG,
ST_3DDISTANCE,
ST_3DMAXDISTANCE,
ST_3DINTERSECTS,
ST_3DEXTENT,
ST_EXTENT,
ST_MAKEVALID,
ST_ISVALIDDETAIL,
ST_DUMP,
ST_DUMPPOINTS,
ST_DUMPRINGS,
ST_DUMPSEGMENTS,
ST_SNAP,
ST_NODE,
ST_SPLIT,
ST_SHAREDPATHS,
ST_EXPAND,
ST_ESTIMATEDEXTENT,
ST_FLIPCOORDINATES,
ST_FORCECW,
ST_FORCECCW,
ST_FORCEPOLYGONCW,
ST_FORCEPOLYGONCCW,
ST_CONCAVEHULL,
ST_VORONOIPOLYGONS,
ST_VORONOILINES,
ST_DELAUNAYTRIANGLES,
ST_SUBDIVIDE,
ST_GENERATEPOINTS,
ST_BOUNDINGDIAGONAL,
ST_MAXIMUMINSCRIBEDCIRCLE,
ST_CHAIKINSMOOTHING,
ST_FRECHETDISTANCE,
ST_PROJECT,
ST_LOCATEALONG,
ST_LOCATEBETWEEN,
ST_INTERPOLATEPOINT,
ST_MAKEBOX2D,
ST_3DMAKEBOX,
STR_TO_DATE,
STRCMP,
STRFTIME,
STRPOS,
STRICT,
STRING_AGG,
STRING_TO_ARRAY,
STRING_TO_TABLE,
STRING,
STRIP,
SUBCLASS_ORIGIN,
SUBDATE,
SUBJECT,
SUBPARTITION,
SUBPARTITIONS,
SUBSTR,
SUBSTRING_INDEX,
SUBSTRING,
SUBTIME,
SUM,
SUMMARY,
SUPER,
SUPERUSER,
SUSPEND,
SWAPS,
SWITCHES,
SYSDATE,
SYSID,
SYSTEM_TIME,
SYSTEM_USER,
SYSTEM,
TABLE_CHECKSUM,
TABLE_NAME,
TABLE_TO_XML,
TABLE_TO_XML_AND_XMLSCHEMA,
TABLE_TO_XMLSCHEMA,
TABLES,
TABLESPACE,
TAN,
TAND,
TANH,
TEMP,
TEMPORARY,
TEMPTABLE,
TEXT_PATTERN_OPS,
TEXT,
THAN,
THREADS,
TIES,
TIME_FORMAT,
TIME_TO_SEC,
TIME_ZONE,
TIME,
TIMEDIFF,
TIMESTAMP,
TIMESTAMPADD,
TIMESTAMPDIFF,
TIMESTAMPTZ,
TIMETZ,
TIMING,
TO_ASCII,
TO_BASE64,
TO_BIN,
TO_CHAR,
TO_DATE,
TO_DAYS,
TO_HEX,
TO_JSON,
TO_JSONB,
TO_NUMBER,
TO_OCT,
TO_REGCLASS,
TO_REGCOLLATION,
TO_REGNAMESPACE,
TO_REGOPER,
TO_REGOPERATOR,
TO_REGPROC,
TO_REGPROCEDURE,
TO_REGROLE,
TO_REGTYPE,
TO_REGTYPEMOD,
TO_SECONDS,
TO_TIMESTAMP,
TO_TSQUERY,
TO_TSVECTOR,
TRANSACTIONAL,
TRANSLATE,
TRIGGERS,
TRIM,
TRIM_ARRAY,
TRIM_SCALE,
TRUNCATE,
TSMULTIRANGE,
TSQUERY,
TSQUERY_PHRASE,
TSRANGE,
TSTZMULTIRANGE,
TSTZRANGE,
TSVECTOR,
TSVECTOR_TO_ARRAY,
TS_DEBUG,
TS_DELETE,
TS_FILTER,
TS_HEADLINE,
TS_LEXIZE,
TS_PARSE,
TS_RANK,
TS_RANK_CD,
TS_REWRITE,
TS_STAT,
TS_TOKEN_TYPE,
TYPE,
TYPES,
UCASE,
UNBOUNDED,
UNCOMMITTED,
UNCOMPRESS,
UNCOMPRESSED_LENGTH,
UNDEFINED,
UNDO_BUFFER_SIZE,
UNDOFILE,
UNHEX,
UNICODE,
UNICODE_ASSIGNED,
UNICODE_VERSION,
UNISTR,
UNINSTALL,
UNIX_TIMESTAMP,
UNKNOWN,
UNNEST,
UNTIL,
UPDATEXML,
UPGRADE,
UPPER,
USE_FRM,
USER_RESOURCES,
USER,
UUID_EXTRACT_TIMESTAMP,
UUID_EXTRACT_VERSION,
UUID_SHORT,
UUID_TO_BIN,
UUID,
UUIDV4,
UUIDV7,
VALID,
VALIDATE_PASSWORD_STRENGTH,
VALIDATE,
VALUE,
VAR_POP,
VAR_SAMP,
VARBIT,
VARCHAR_PATTERN_OPS,
VARCHAR2,
VARIABLES,
VARIANCE,
VERBOSE,
VERSION,
VERSIONING,
VIA,
VIEW,
VIRTUAL,
VISIBLE,
VOLATILE,
WAIT,
WAL,
WARNING,
WARNINGS,
WEBSEARCH_TO_TSQUERY,
WEEK,
WEEKDAY,
WEEKOFYEAR,
WEIGHT_STRING,
WIDTH,
WIDTH_BUCKET,
WITHIN,
WITHOUT,
WORK,
WRAPPER,
X509,
XA,
XML,
XML_IS_WELL_FORMED,
XML_IS_WELL_FORMED_CONTENT,
XML_IS_WELL_FORMED_DOCUMENT,
XMLAGG,
XMLCOMMENT,
XMLCONCAT,
XMLTABLE,
XMLTEXT,
XPATH,
XPATH_EXISTS,
YAML,
YEAR,
YEARWEEK,
ZONE,
}
impl Keyword {
pub fn name(&self) -> &'static str {
keyword_gen::keyword_name(*self)
}
pub fn restricted(&self, restrict: Restrict) -> bool {
keyword_gen::KEYWORDS_RESTRICT
.get(*self as usize)
.is_some_and(|r| r.check(restrict))
}
pub const fn expr_ident(&self) -> bool {
keyword_gen::keyword_expr_ident(*self)
}
}
impl From<&str> for Keyword {
fn from(s: &str) -> Self {
keyword_gen::keyword_from_str(s)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_keyword_from_str() {
assert_eq!(Keyword::from("SELECT"), Keyword::SELECT);
assert_eq!(Keyword::from("select"), Keyword::SELECT);
assert_eq!(Keyword::from("SeLeCt"), Keyword::SELECT);
assert_eq!(Keyword::from("not_a_keyword"), Keyword::NOT_A_KEYWORD);
}
#[test]
fn test_keyword_name() {
assert_eq!(Keyword::SELECT.name(), "SELECT");
assert_eq!(Keyword::CREATE.name(), "CREATE");
assert_eq!(Keyword::NOT_A_KEYWORD.name(), "NOT_A_KEYWORD");
}
#[test]
fn test_restrict_check() {
assert!(Keyword::SELECT.restricted(Restrict::MARIADB));
assert!(Keyword::SELECT.restricted(Restrict::POSTGRES));
}
}