mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-03 13:58:15 +00:00

Some checks are pending
license / Release Audit Tool (RAT) (push) Waiting to run
Rust / codestyle (push) Waiting to run
Rust / lint (push) Waiting to run
Rust / benchmark-lint (push) Waiting to run
Rust / compile (push) Waiting to run
Rust / docs (push) Waiting to run
Rust / compile-no-std (push) Waiting to run
Rust / test (beta) (push) Waiting to run
Rust / test (nightly) (push) Waiting to run
Rust / test (stable) (push) Waiting to run
1154 lines
18 KiB
Rust
1154 lines
18 KiB
Rust
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
//! This module defines
|
|
//! 1) a list of constants for every keyword
|
|
//! 2) an `ALL_KEYWORDS` array with every keyword in it
|
|
//! This is not a list of *reserved* keywords: some of these can be
|
|
//! parsed as identifiers if the parser decides so. This means that
|
|
//! new keywords can be added here without affecting the parse result.
|
|
//!
|
|
//! As a matter of fact, most of these keywords are not used at all
|
|
//! and could be removed.
|
|
//! 3) a `RESERVED_FOR_TABLE_ALIAS` array with keywords reserved in a
|
|
//! "table alias" context.
|
|
|
|
#[cfg(feature = "serde")]
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[cfg(feature = "visitor")]
|
|
use sqlparser_derive::{Visit, VisitMut};
|
|
|
|
/// Defines a string constant for a single keyword: `kw_def!(SELECT);`
|
|
/// expands to `pub const SELECT = "SELECT";`
|
|
macro_rules! kw_def {
|
|
($ident:ident = $string_keyword:expr) => {
|
|
pub const $ident: &'static str = $string_keyword;
|
|
};
|
|
($ident:ident) => {
|
|
kw_def!($ident = stringify!($ident));
|
|
};
|
|
}
|
|
|
|
/// Expands to a list of `kw_def!()` invocations for each keyword
|
|
/// and defines an ALL_KEYWORDS array of the defined constants.
|
|
macro_rules! define_keywords {
|
|
($(
|
|
$ident:ident $(= $string_keyword:expr)?
|
|
),*) => {
|
|
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
|
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
|
|
#[allow(non_camel_case_types)]
|
|
pub enum Keyword {
|
|
NoKeyword,
|
|
$($ident),*
|
|
}
|
|
|
|
pub const ALL_KEYWORDS_INDEX: &[Keyword] = &[
|
|
$(Keyword::$ident),*
|
|
];
|
|
|
|
$(kw_def!($ident $(= $string_keyword)?);)*
|
|
pub const ALL_KEYWORDS: &[&str] = &[
|
|
$($ident),*
|
|
];
|
|
};
|
|
}
|
|
|
|
// The following keywords should be sorted to be able to match using binary search
|
|
define_keywords!(
|
|
ABORT,
|
|
ABS,
|
|
ABSENT,
|
|
ABSOLUTE,
|
|
ACCESS,
|
|
ACCOUNT,
|
|
ACTION,
|
|
ADD,
|
|
ADMIN,
|
|
AFTER,
|
|
AGAINST,
|
|
AGGREGATE,
|
|
AGGREGATION,
|
|
ALERT,
|
|
ALGORITHM,
|
|
ALIAS,
|
|
ALL,
|
|
ALLOCATE,
|
|
ALTER,
|
|
ALWAYS,
|
|
ANALYZE,
|
|
AND,
|
|
ANTI,
|
|
ANY,
|
|
APPLICATION,
|
|
APPLY,
|
|
APPLYBUDGET,
|
|
ARCHIVE,
|
|
ARE,
|
|
ARRAY,
|
|
ARRAY_MAX_CARDINALITY,
|
|
AS,
|
|
ASC,
|
|
ASENSITIVE,
|
|
ASOF,
|
|
ASSERT,
|
|
ASYMMETRIC,
|
|
AT,
|
|
ATOMIC,
|
|
ATTACH,
|
|
AUDIT,
|
|
AUTHENTICATION,
|
|
AUTHORIZATION,
|
|
AUTO,
|
|
AUTOEXTEND_SIZE,
|
|
AUTOINCREMENT,
|
|
AUTO_INCREMENT,
|
|
AVG,
|
|
AVG_ROW_LENGTH,
|
|
AVRO,
|
|
BACKWARD,
|
|
BASE64,
|
|
BASE_LOCATION,
|
|
BEFORE,
|
|
BEGIN,
|
|
BEGIN_FRAME,
|
|
BEGIN_PARTITION,
|
|
BERNOULLI,
|
|
BETWEEN,
|
|
BIGDECIMAL,
|
|
BIGINT,
|
|
BIGNUMERIC,
|
|
BINARY,
|
|
BIND,
|
|
BINDING,
|
|
BIT,
|
|
BLOB,
|
|
BLOCK,
|
|
BLOOM,
|
|
BLOOMFILTER,
|
|
BOOL,
|
|
BOOLEAN,
|
|
BOTH,
|
|
BOX,
|
|
BRIN,
|
|
BROWSE,
|
|
BTREE,
|
|
BUCKET,
|
|
BUCKETS,
|
|
BY,
|
|
BYPASSRLS,
|
|
BYTEA,
|
|
BYTES,
|
|
CACHE,
|
|
CALL,
|
|
CALLED,
|
|
CARDINALITY,
|
|
CASCADE,
|
|
CASCADED,
|
|
CASE,
|
|
CASES,
|
|
CAST,
|
|
CATALOG,
|
|
CATALOG_SYNC,
|
|
CATCH,
|
|
CEIL,
|
|
CEILING,
|
|
CENTURY,
|
|
CHAIN,
|
|
CHANGE,
|
|
CHANGE_TRACKING,
|
|
CHANNEL,
|
|
CHAR,
|
|
CHARACTER,
|
|
CHARACTERISTICS,
|
|
CHARACTERS,
|
|
CHARACTER_LENGTH,
|
|
CHARSET,
|
|
CHAR_LENGTH,
|
|
CHECK,
|
|
CHECKSUM,
|
|
CIRCLE,
|
|
CLEAR,
|
|
CLOB,
|
|
CLONE,
|
|
CLOSE,
|
|
CLUSTER,
|
|
CLUSTERED,
|
|
CLUSTERING,
|
|
COALESCE,
|
|
COLLATE,
|
|
COLLATION,
|
|
COLLECT,
|
|
COLLECTION,
|
|
COLUMN,
|
|
COLUMNS,
|
|
COLUMNSTORE,
|
|
COMMENT,
|
|
COMMIT,
|
|
COMMITTED,
|
|
COMPATIBLE,
|
|
COMPRESSION,
|
|
COMPUTE,
|
|
CONCURRENTLY,
|
|
CONDITION,
|
|
CONFLICT,
|
|
CONNECT,
|
|
CONNECTION,
|
|
CONNECTOR,
|
|
CONNECT_BY_ROOT,
|
|
CONSTRAINT,
|
|
CONTAINS,
|
|
CONTINUE,
|
|
CONVERT,
|
|
COPY,
|
|
COPY_OPTIONS,
|
|
CORR,
|
|
CORRESPONDING,
|
|
COUNT,
|
|
COVAR_POP,
|
|
COVAR_SAMP,
|
|
CREATE,
|
|
CREATEDB,
|
|
CREATEROLE,
|
|
CREDENTIALS,
|
|
CROSS,
|
|
CSV,
|
|
CUBE,
|
|
CUME_DIST,
|
|
CURRENT,
|
|
CURRENT_CATALOG,
|
|
CURRENT_DATE,
|
|
CURRENT_DEFAULT_TRANSFORM_GROUP,
|
|
CURRENT_PATH,
|
|
CURRENT_ROLE,
|
|
CURRENT_ROW,
|
|
CURRENT_SCHEMA,
|
|
CURRENT_TIME,
|
|
CURRENT_TIMESTAMP,
|
|
CURRENT_TRANSFORM_GROUP_FOR_TYPE,
|
|
CURRENT_USER,
|
|
CURSOR,
|
|
CYCLE,
|
|
DATA,
|
|
DATABASE,
|
|
DATABASES,
|
|
DATA_RETENTION_TIME_IN_DAYS,
|
|
DATE,
|
|
DATE32,
|
|
DATETIME,
|
|
DATETIME64,
|
|
DAY,
|
|
DAYOFWEEK,
|
|
DAYOFYEAR,
|
|
DAYS,
|
|
DCPROPERTIES,
|
|
DEALLOCATE,
|
|
DEC,
|
|
DECADE,
|
|
DECIMAL,
|
|
DECLARE,
|
|
DEDUPLICATE,
|
|
DEFAULT,
|
|
DEFAULT_DDL_COLLATION,
|
|
DEFERRABLE,
|
|
DEFERRED,
|
|
DEFINE,
|
|
DEFINED,
|
|
DEFINER,
|
|
DELAYED,
|
|
DELAY_KEY_WRITE,
|
|
DELETE,
|
|
DELIMITED,
|
|
DELIMITER,
|
|
DELTA,
|
|
DENSE_RANK,
|
|
DENY,
|
|
DEREF,
|
|
DESC,
|
|
DESCRIBE,
|
|
DETACH,
|
|
DETAIL,
|
|
DETERMINISTIC,
|
|
DIRECTORY,
|
|
DISABLE,
|
|
DISCARD,
|
|
DISCONNECT,
|
|
DISTINCT,
|
|
DISTRIBUTE,
|
|
DIV,
|
|
DO,
|
|
DOMAIN,
|
|
DOUBLE,
|
|
DOW,
|
|
DOY,
|
|
DROP,
|
|
DRY,
|
|
DUPLICATE,
|
|
DYNAMIC,
|
|
EACH,
|
|
ELEMENT,
|
|
ELEMENTS,
|
|
ELSE,
|
|
ELSEIF,
|
|
EMPTY,
|
|
ENABLE,
|
|
ENABLE_SCHEMA_EVOLUTION,
|
|
ENCODING,
|
|
ENCRYPTION,
|
|
END,
|
|
END_EXEC = "END-EXEC",
|
|
ENDPOINT,
|
|
END_FRAME,
|
|
END_PARTITION,
|
|
ENFORCED,
|
|
ENGINE,
|
|
ENGINE_ATTRIBUTE,
|
|
ENUM,
|
|
ENUM16,
|
|
ENUM8,
|
|
EPHEMERAL,
|
|
EPOCH,
|
|
EQUALS,
|
|
ERROR,
|
|
ESCAPE,
|
|
ESCAPED,
|
|
ESTIMATE,
|
|
EVENT,
|
|
EVERY,
|
|
EVOLVE,
|
|
EXCEPT,
|
|
EXCEPTION,
|
|
EXCHANGE,
|
|
EXCLUDE,
|
|
EXCLUSIVE,
|
|
EXEC,
|
|
EXECUTE,
|
|
EXECUTION,
|
|
EXISTS,
|
|
EXP,
|
|
EXPANSION,
|
|
EXPLAIN,
|
|
EXPLICIT,
|
|
EXPORT,
|
|
EXTEND,
|
|
EXTENDED,
|
|
EXTENSION,
|
|
EXTERNAL,
|
|
EXTERNAL_VOLUME,
|
|
EXTRACT,
|
|
FAIL,
|
|
FAILOVER,
|
|
FALSE,
|
|
FETCH,
|
|
FIELDS,
|
|
FILE,
|
|
FILES,
|
|
FILE_FORMAT,
|
|
FILL,
|
|
FILTER,
|
|
FINAL,
|
|
FIRST,
|
|
FIRST_VALUE,
|
|
FIXEDSTRING,
|
|
FLOAT,
|
|
FLOAT32,
|
|
FLOAT4,
|
|
FLOAT64,
|
|
FLOAT8,
|
|
FLOOR,
|
|
FLUSH,
|
|
FN,
|
|
FOLLOWING,
|
|
FOR,
|
|
FORCE,
|
|
FORCE_NOT_NULL,
|
|
FORCE_NULL,
|
|
FORCE_QUOTE,
|
|
FOREIGN,
|
|
FORMAT,
|
|
FORMATTED,
|
|
FORWARD,
|
|
FRAME_ROW,
|
|
FREE,
|
|
FREEZE,
|
|
FROM,
|
|
FSCK,
|
|
FULFILLMENT,
|
|
FULL,
|
|
FULLTEXT,
|
|
FUNCTION,
|
|
FUNCTIONS,
|
|
FUSION,
|
|
FUTURE,
|
|
GENERAL,
|
|
GENERATE,
|
|
GENERATED,
|
|
GEOGRAPHY,
|
|
GET,
|
|
GIN,
|
|
GIST,
|
|
GLOBAL,
|
|
GRANT,
|
|
GRANTED,
|
|
GRANTS,
|
|
GRAPHVIZ,
|
|
GROUP,
|
|
GROUPING,
|
|
GROUPS,
|
|
HASH,
|
|
HAVING,
|
|
HEADER,
|
|
HEAP,
|
|
HIGH_PRIORITY,
|
|
HISTORY,
|
|
HIVEVAR,
|
|
HOLD,
|
|
HOSTS,
|
|
HOUR,
|
|
HOURS,
|
|
HUGEINT,
|
|
ICEBERG,
|
|
ID,
|
|
IDENTITY,
|
|
IDENTITY_INSERT,
|
|
IF,
|
|
IGNORE,
|
|
ILIKE,
|
|
IMMEDIATE,
|
|
IMMUTABLE,
|
|
IMPORT,
|
|
IMPORTED,
|
|
IN,
|
|
INCLUDE,
|
|
INCLUDE_NULL_VALUES,
|
|
INCREMENT,
|
|
INDEX,
|
|
INDICATOR,
|
|
INHERIT,
|
|
INHERITS,
|
|
INITIALLY,
|
|
INNER,
|
|
INOUT,
|
|
INPATH,
|
|
INPLACE,
|
|
INPUT,
|
|
INPUTFORMAT,
|
|
INSENSITIVE,
|
|
INSERT,
|
|
INSERT_METHOD,
|
|
INSTALL,
|
|
INSTANT,
|
|
INSTEAD,
|
|
INT,
|
|
INT128,
|
|
INT16,
|
|
INT2,
|
|
INT256,
|
|
INT32,
|
|
INT4,
|
|
INT64,
|
|
INT8,
|
|
INTEGER,
|
|
INTEGRATION,
|
|
INTERPOLATE,
|
|
INTERSECT,
|
|
INTERSECTION,
|
|
INTERVAL,
|
|
INTO,
|
|
INVOKER,
|
|
IO,
|
|
IS,
|
|
ISODOW,
|
|
ISOLATION,
|
|
ISOWEEK,
|
|
ISOYEAR,
|
|
ITEMS,
|
|
JAR,
|
|
JOIN,
|
|
JSON,
|
|
JSONB,
|
|
JSONFILE,
|
|
JSON_TABLE,
|
|
JULIAN,
|
|
KEY,
|
|
KEYS,
|
|
KEY_BLOCK_SIZE,
|
|
KILL,
|
|
LAG,
|
|
LANGUAGE,
|
|
LARGE,
|
|
LAST,
|
|
LAST_VALUE,
|
|
LATERAL,
|
|
LEAD,
|
|
LEADING,
|
|
LEFT,
|
|
LEVEL,
|
|
LIKE,
|
|
LIKE_REGEX,
|
|
LIMIT,
|
|
LINE,
|
|
LINES,
|
|
LIST,
|
|
LISTEN,
|
|
LISTING,
|
|
LN,
|
|
LOAD,
|
|
LOCAL,
|
|
LOCALTIME,
|
|
LOCALTIMESTAMP,
|
|
LOCATION,
|
|
LOCK,
|
|
LOCKED,
|
|
LOG,
|
|
LOGIN,
|
|
LOGS,
|
|
LONGBLOB,
|
|
LONGTEXT,
|
|
LOWCARDINALITY,
|
|
LOWER,
|
|
LOW_PRIORITY,
|
|
LS,
|
|
LSEG,
|
|
MACRO,
|
|
MANAGE,
|
|
MANAGED,
|
|
MANAGEDLOCATION,
|
|
MAP,
|
|
MASKING,
|
|
MATCH,
|
|
MATCHED,
|
|
MATCHES,
|
|
MATCH_CONDITION,
|
|
MATCH_RECOGNIZE,
|
|
MATERIALIZE,
|
|
MATERIALIZED,
|
|
MAX,
|
|
MAXVALUE,
|
|
MAX_DATA_EXTENSION_TIME_IN_DAYS,
|
|
MAX_ROWS,
|
|
MEASURES,
|
|
MEDIUMBLOB,
|
|
MEDIUMINT,
|
|
MEDIUMTEXT,
|
|
MEMBER,
|
|
MERGE,
|
|
MESSAGE,
|
|
METADATA,
|
|
METHOD,
|
|
METRIC,
|
|
MICROSECOND,
|
|
MICROSECONDS,
|
|
MILLENIUM,
|
|
MILLENNIUM,
|
|
MILLISECOND,
|
|
MILLISECONDS,
|
|
MIN,
|
|
MINUS,
|
|
MINUTE,
|
|
MINUTES,
|
|
MINVALUE,
|
|
MIN_ROWS,
|
|
MOD,
|
|
MODE,
|
|
MODIFIES,
|
|
MODIFY,
|
|
MODULE,
|
|
MONITOR,
|
|
MONTH,
|
|
MONTHS,
|
|
MSCK,
|
|
MULTISET,
|
|
MUTATION,
|
|
NAME,
|
|
NAMES,
|
|
NANOSECOND,
|
|
NANOSECONDS,
|
|
NATIONAL,
|
|
NATURAL,
|
|
NCHAR,
|
|
NCLOB,
|
|
NESTED,
|
|
NETWORK,
|
|
NEW,
|
|
NEXT,
|
|
NFC,
|
|
NFD,
|
|
NFKC,
|
|
NFKD,
|
|
NO,
|
|
NOBYPASSRLS,
|
|
NOCREATEDB,
|
|
NOCREATEROLE,
|
|
NOINHERIT,
|
|
NOLOGIN,
|
|
NONE,
|
|
NOORDER,
|
|
NOREPLICATION,
|
|
NORMALIZE,
|
|
NORMALIZED,
|
|
NOSCAN,
|
|
NOSUPERUSER,
|
|
NOT,
|
|
NOTHING,
|
|
NOTIFY,
|
|
NOTNULL,
|
|
NOWAIT,
|
|
NO_WRITE_TO_BINLOG,
|
|
NTH_VALUE,
|
|
NTILE,
|
|
NULL,
|
|
NULLABLE,
|
|
NULLIF,
|
|
NULLS,
|
|
NUMERIC,
|
|
NVARCHAR,
|
|
OBJECT,
|
|
OBJECTS,
|
|
OCCURRENCES_REGEX,
|
|
OCTETS,
|
|
OCTET_LENGTH,
|
|
OF,
|
|
OFF,
|
|
OFFSET,
|
|
OFFSETS,
|
|
OLD,
|
|
OMIT,
|
|
ON,
|
|
ONE,
|
|
ONLY,
|
|
OPEN,
|
|
OPENJSON,
|
|
OPERATE,
|
|
OPERATOR,
|
|
OPTIMIZATION,
|
|
OPTIMIZE,
|
|
OPTIMIZED,
|
|
OPTIMIZER_COSTS,
|
|
OPTION,
|
|
OPTIONS,
|
|
OR,
|
|
ORC,
|
|
ORDER,
|
|
ORDINALITY,
|
|
ORGANIZATION,
|
|
OTHER,
|
|
OUT,
|
|
OUTER,
|
|
OUTPUT,
|
|
OUTPUTFORMAT,
|
|
OVER,
|
|
OVERFLOW,
|
|
OVERLAPS,
|
|
OVERLAY,
|
|
OVERRIDE,
|
|
OVERWRITE,
|
|
OWNED,
|
|
OWNER,
|
|
OWNERSHIP,
|
|
PACKAGE,
|
|
PACKAGES,
|
|
PACK_KEYS,
|
|
PARALLEL,
|
|
PARAMETER,
|
|
PARQUET,
|
|
PART,
|
|
PARTITION,
|
|
PARTITIONED,
|
|
PARTITIONS,
|
|
PASSING,
|
|
PASSWORD,
|
|
PAST,
|
|
PATH,
|
|
PATTERN,
|
|
PER,
|
|
PERCENT,
|
|
PERCENTILE_CONT,
|
|
PERCENTILE_DISC,
|
|
PERCENT_RANK,
|
|
PERIOD,
|
|
PERMISSIVE,
|
|
PERSISTENT,
|
|
PIVOT,
|
|
PLACING,
|
|
PLAN,
|
|
PLANS,
|
|
POINT,
|
|
POLICY,
|
|
POLYGON,
|
|
POOL,
|
|
PORTION,
|
|
POSITION,
|
|
POSITION_REGEX,
|
|
POWER,
|
|
PRAGMA,
|
|
PRECEDES,
|
|
PRECEDING,
|
|
PRECISION,
|
|
PREPARE,
|
|
PRESERVE,
|
|
PREWHERE,
|
|
PRIMARY,
|
|
PRINT,
|
|
PRIOR,
|
|
PRIVILEGES,
|
|
PROCEDURE,
|
|
PROFILE,
|
|
PROGRAM,
|
|
PROJECTION,
|
|
PUBLIC,
|
|
PURCHASE,
|
|
PURGE,
|
|
QUALIFY,
|
|
QUARTER,
|
|
QUERY,
|
|
QUOTE,
|
|
RAISE,
|
|
RAISERROR,
|
|
RANGE,
|
|
RANK,
|
|
RAW,
|
|
RCFILE,
|
|
READ,
|
|
READS,
|
|
READ_ONLY,
|
|
REAL,
|
|
RECLUSTER,
|
|
RECURSIVE,
|
|
REF,
|
|
REFERENCES,
|
|
REFERENCING,
|
|
REGCLASS,
|
|
REGEXP,
|
|
REGR_AVGX,
|
|
REGR_AVGY,
|
|
REGR_COUNT,
|
|
REGR_INTERCEPT,
|
|
REGR_R2,
|
|
REGR_SLOPE,
|
|
REGR_SXX,
|
|
REGR_SXY,
|
|
REGR_SYY,
|
|
RELATIVE,
|
|
RELAY,
|
|
RELEASE,
|
|
RELEASES,
|
|
REMOTE,
|
|
REMOVE,
|
|
RENAME,
|
|
REORG,
|
|
REPAIR,
|
|
REPEATABLE,
|
|
REPLACE,
|
|
REPLICA,
|
|
REPLICATE,
|
|
REPLICATION,
|
|
RESET,
|
|
RESOLVE,
|
|
RESOURCE,
|
|
RESPECT,
|
|
RESTART,
|
|
RESTRICT,
|
|
RESTRICTED,
|
|
RESTRICTIONS,
|
|
RESTRICTIVE,
|
|
RESULT,
|
|
RESULTSET,
|
|
RESUME,
|
|
RETAIN,
|
|
RETURN,
|
|
RETURNING,
|
|
RETURNS,
|
|
REVOKE,
|
|
RIGHT,
|
|
RLIKE,
|
|
RM,
|
|
ROLE,
|
|
ROLES,
|
|
ROLLBACK,
|
|
ROLLUP,
|
|
ROOT,
|
|
ROW,
|
|
ROWID,
|
|
ROWS,
|
|
ROW_FORMAT,
|
|
ROW_NUMBER,
|
|
RULE,
|
|
RUN,
|
|
SAFE,
|
|
SAFE_CAST,
|
|
SAMPLE,
|
|
SAVEPOINT,
|
|
SCHEMA,
|
|
SCHEMAS,
|
|
SCOPE,
|
|
SCROLL,
|
|
SEARCH,
|
|
SECOND,
|
|
SECONDARY,
|
|
SECONDARY_ENGINE_ATTRIBUTE,
|
|
SECONDS,
|
|
SECRET,
|
|
SECURITY,
|
|
SEED,
|
|
SELECT,
|
|
SEMI,
|
|
SENSITIVE,
|
|
SEPARATOR,
|
|
SEQUENCE,
|
|
SEQUENCEFILE,
|
|
SEQUENCES,
|
|
SERDE,
|
|
SERDEPROPERTIES,
|
|
SERIALIZABLE,
|
|
SERVER,
|
|
SERVICE,
|
|
SESSION,
|
|
SESSION_USER,
|
|
SET,
|
|
SETERROR,
|
|
SETS,
|
|
SETTINGS,
|
|
SHARE,
|
|
SHARED,
|
|
SHARING,
|
|
SHOW,
|
|
SIGNED,
|
|
SIMILAR,
|
|
SKIP,
|
|
SLOW,
|
|
SMALLINT,
|
|
SNAPSHOT,
|
|
SOME,
|
|
SORT,
|
|
SORTED,
|
|
SOURCE,
|
|
SPATIAL,
|
|
SPECIFIC,
|
|
SPECIFICTYPE,
|
|
SPGIST,
|
|
SQL,
|
|
SQLEXCEPTION,
|
|
SQLSTATE,
|
|
SQLWARNING,
|
|
SQRT,
|
|
SRID,
|
|
STABLE,
|
|
STAGE,
|
|
START,
|
|
STARTS,
|
|
STATEMENT,
|
|
STATIC,
|
|
STATISTICS,
|
|
STATS_AUTO_RECALC,
|
|
STATS_PERSISTENT,
|
|
STATS_SAMPLE_PAGES,
|
|
STATUS,
|
|
STDDEV_POP,
|
|
STDDEV_SAMP,
|
|
STDIN,
|
|
STDOUT,
|
|
STEP,
|
|
STORAGE,
|
|
STORAGE_INTEGRATION,
|
|
STORAGE_SERIALIZATION_POLICY,
|
|
STORED,
|
|
STRAIGHT_JOIN,
|
|
STREAM,
|
|
STRICT,
|
|
STRING,
|
|
STRUCT,
|
|
SUBMULTISET,
|
|
SUBSTR,
|
|
SUBSTRING,
|
|
SUBSTRING_REGEX,
|
|
SUCCEEDS,
|
|
SUM,
|
|
SUPER,
|
|
SUPERUSER,
|
|
SUPPORT,
|
|
SUSPEND,
|
|
SWAP,
|
|
SYMMETRIC,
|
|
SYNC,
|
|
SYSTEM,
|
|
SYSTEM_TIME,
|
|
SYSTEM_USER,
|
|
TABLE,
|
|
TABLES,
|
|
TABLESAMPLE,
|
|
TABLESPACE,
|
|
TAG,
|
|
TARGET,
|
|
TASK,
|
|
TBLPROPERTIES,
|
|
TEMP,
|
|
TEMPORARY,
|
|
TEMPTABLE,
|
|
TERMINATED,
|
|
TERSE,
|
|
TEXT,
|
|
TEXTFILE,
|
|
THEN,
|
|
TIES,
|
|
TIME,
|
|
TIMESTAMP,
|
|
TIMESTAMPTZ,
|
|
TIMESTAMP_NTZ,
|
|
TIMETZ,
|
|
TIMEZONE,
|
|
TIMEZONE_ABBR,
|
|
TIMEZONE_HOUR,
|
|
TIMEZONE_MINUTE,
|
|
TIMEZONE_REGION,
|
|
TINYBLOB,
|
|
TINYINT,
|
|
TINYTEXT,
|
|
TO,
|
|
TOP,
|
|
TOTALS,
|
|
TRACE,
|
|
TRAILING,
|
|
TRANSACTION,
|
|
TRANSIENT,
|
|
TRANSLATE,
|
|
TRANSLATE_REGEX,
|
|
TRANSLATION,
|
|
TREAT,
|
|
TRIGGER,
|
|
TRIM,
|
|
TRIM_ARRAY,
|
|
TRUE,
|
|
TRUNCATE,
|
|
TRY,
|
|
TRY_CAST,
|
|
TRY_CONVERT,
|
|
TSQUERY,
|
|
TSVECTOR,
|
|
TUPLE,
|
|
TYPE,
|
|
UBIGINT,
|
|
UESCAPE,
|
|
UHUGEINT,
|
|
UINT128,
|
|
UINT16,
|
|
UINT256,
|
|
UINT32,
|
|
UINT64,
|
|
UINT8,
|
|
UNBOUNDED,
|
|
UNCACHE,
|
|
UNCOMMITTED,
|
|
UNDEFINED,
|
|
UNFREEZE,
|
|
UNION,
|
|
UNIQUE,
|
|
UNKNOWN,
|
|
UNLISTEN,
|
|
UNLOAD,
|
|
UNLOCK,
|
|
UNLOGGED,
|
|
UNMATCHED,
|
|
UNNEST,
|
|
UNPIVOT,
|
|
UNSAFE,
|
|
UNSET,
|
|
UNSIGNED,
|
|
UNTIL,
|
|
UPDATE,
|
|
UPPER,
|
|
URL,
|
|
USAGE,
|
|
USE,
|
|
USER,
|
|
USER_RESOURCES,
|
|
USING,
|
|
USMALLINT,
|
|
UTINYINT,
|
|
UUID,
|
|
VACUUM,
|
|
VALID,
|
|
VALIDATE,
|
|
VALIDATION_MODE,
|
|
VALUE,
|
|
VALUES,
|
|
VALUE_OF,
|
|
VARBINARY,
|
|
VARBIT,
|
|
VARCHAR,
|
|
VARIABLES,
|
|
VARYING,
|
|
VAR_POP,
|
|
VAR_SAMP,
|
|
VERBOSE,
|
|
VERSION,
|
|
VERSIONING,
|
|
VERSIONS,
|
|
VIEW,
|
|
VIEWS,
|
|
VIRTUAL,
|
|
VOLATILE,
|
|
VOLUME,
|
|
WAREHOUSE,
|
|
WAREHOUSES,
|
|
WEEK,
|
|
WEEKS,
|
|
WHEN,
|
|
WHENEVER,
|
|
WHERE,
|
|
WHILE,
|
|
WIDTH_BUCKET,
|
|
WINDOW,
|
|
WITH,
|
|
WITHIN,
|
|
WITHOUT,
|
|
WITHOUT_ARRAY_WRAPPER,
|
|
WORK,
|
|
WRAPPER,
|
|
WRITE,
|
|
XML,
|
|
XMLNAMESPACES,
|
|
XMLTABLE,
|
|
XOR,
|
|
YEAR,
|
|
YEARS,
|
|
ZONE,
|
|
ZORDER
|
|
);
|
|
|
|
/// These keywords can't be used as a table alias, so that `FROM table_name alias`
|
|
/// can be parsed unambiguously without looking ahead.
|
|
pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
|
|
// Reserved as both a table and a column alias:
|
|
Keyword::WITH,
|
|
Keyword::EXPLAIN,
|
|
Keyword::ANALYZE,
|
|
Keyword::SELECT,
|
|
Keyword::WHERE,
|
|
Keyword::GROUP,
|
|
Keyword::SORT,
|
|
Keyword::HAVING,
|
|
Keyword::ORDER,
|
|
Keyword::PIVOT,
|
|
Keyword::UNPIVOT,
|
|
Keyword::TOP,
|
|
Keyword::LATERAL,
|
|
Keyword::VIEW,
|
|
Keyword::LIMIT,
|
|
Keyword::OFFSET,
|
|
Keyword::FETCH,
|
|
Keyword::UNION,
|
|
Keyword::EXCEPT,
|
|
Keyword::INTERSECT,
|
|
Keyword::MINUS,
|
|
// Reserved only as a table alias in the `FROM`/`JOIN` clauses:
|
|
Keyword::ON,
|
|
Keyword::JOIN,
|
|
Keyword::INNER,
|
|
Keyword::CROSS,
|
|
Keyword::FULL,
|
|
Keyword::LEFT,
|
|
Keyword::RIGHT,
|
|
Keyword::NATURAL,
|
|
Keyword::USING,
|
|
Keyword::CLUSTER,
|
|
Keyword::DISTRIBUTE,
|
|
Keyword::GLOBAL,
|
|
Keyword::ANTI,
|
|
Keyword::SEMI,
|
|
Keyword::RETURNING,
|
|
Keyword::ASOF,
|
|
Keyword::MATCH_CONDITION,
|
|
// for MSSQL-specific OUTER APPLY (seems reserved in most dialects)
|
|
Keyword::OUTER,
|
|
Keyword::SET,
|
|
Keyword::QUALIFY,
|
|
Keyword::WINDOW,
|
|
Keyword::END,
|
|
Keyword::FOR,
|
|
// for MYSQL PARTITION SELECTION
|
|
Keyword::PARTITION,
|
|
// for Clickhouse PREWHERE
|
|
Keyword::PREWHERE,
|
|
Keyword::SETTINGS,
|
|
Keyword::FORMAT,
|
|
// for Snowflake START WITH .. CONNECT BY
|
|
Keyword::START,
|
|
Keyword::CONNECT,
|
|
// Reserved for snowflake MATCH_RECOGNIZE
|
|
Keyword::MATCH_RECOGNIZE,
|
|
// Reserved for Snowflake table sample
|
|
Keyword::SAMPLE,
|
|
Keyword::TABLESAMPLE,
|
|
Keyword::FROM,
|
|
Keyword::OPEN,
|
|
];
|
|
|
|
/// Can't be used as a column alias, so that `SELECT <expr> alias`
|
|
/// can be parsed unambiguously without looking ahead.
|
|
pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
|
|
// Reserved as both a table and a column alias:
|
|
Keyword::WITH,
|
|
Keyword::EXPLAIN,
|
|
Keyword::ANALYZE,
|
|
Keyword::SELECT,
|
|
Keyword::WHERE,
|
|
Keyword::GROUP,
|
|
Keyword::SORT,
|
|
Keyword::HAVING,
|
|
Keyword::ORDER,
|
|
Keyword::TOP,
|
|
Keyword::LATERAL,
|
|
Keyword::VIEW,
|
|
Keyword::LIMIT,
|
|
Keyword::OFFSET,
|
|
Keyword::FETCH,
|
|
Keyword::UNION,
|
|
Keyword::EXCEPT,
|
|
Keyword::EXCLUDE,
|
|
Keyword::INTERSECT,
|
|
Keyword::MINUS,
|
|
Keyword::CLUSTER,
|
|
Keyword::DISTRIBUTE,
|
|
Keyword::RETURNING,
|
|
// Reserved only as a column alias in the `SELECT` clause
|
|
Keyword::FROM,
|
|
Keyword::INTO,
|
|
Keyword::END,
|
|
];
|
|
|
|
// Global list of reserved keywords allowed after FROM.
|
|
// Parser should call Dialect::get_reserved_keyword_after_from
|
|
// to allow for each dialect to customize the list.
|
|
pub const RESERVED_FOR_TABLE_FACTOR: &[Keyword] = &[
|
|
Keyword::INTO,
|
|
Keyword::LIMIT,
|
|
Keyword::HAVING,
|
|
Keyword::WHERE,
|
|
];
|
|
|
|
/// Global list of reserved keywords that cannot be parsed as identifiers
|
|
/// without special handling like quoting. Parser should call `Dialect::is_reserved_for_identifier`
|
|
/// to allow for each dialect to customize the list.
|
|
pub const RESERVED_FOR_IDENTIFIER: &[Keyword] = &[
|
|
Keyword::EXISTS,
|
|
Keyword::INTERVAL,
|
|
Keyword::STRUCT,
|
|
Keyword::TRIM,
|
|
];
|