use crate::lexer::token::{Modifier, TokenKind};
pub fn lookup_keyword(word: &str) -> TokenKind {
match word.to_uppercase().as_str() {
"SELECT" => TokenKind::Select,
"FROM" => TokenKind::From,
"WHERE" => TokenKind::Where,
"INSERT" => TokenKind::Insert,
"INTO" => TokenKind::Into,
"VALUES" => TokenKind::Values,
"UPDATE" => TokenKind::Update,
"SET" => TokenKind::Set,
"DELETE" => TokenKind::Delete,
"RETURNING" => TokenKind::Returning,
"MERGE" => TokenKind::Merge,
"CREATE" => TokenKind::Create,
"DATABASE" => TokenKind::Database,
"CONNECTION" => TokenKind::Connection,
"ENCODING" => TokenKind::Encoding,
"LOCALE" => TokenKind::Locale,
"TABLE" => TokenKind::Table,
"TABLES" => TokenKind::Tables,
"SCHEMA" => TokenKind::Schema,
"AUTHORIZATION" => TokenKind::Authorization,
"DROP" => TokenKind::Drop,
"USE" => TokenKind::Use,
"TRUNCATE" => TokenKind::Truncate,
"ALTER" => TokenKind::Alter,
"RESET" => TokenKind::Reset,
"RESTART" => TokenKind::Restart,
"IDENTITY" => TokenKind::Identity,
"CONTINUE" => TokenKind::Continue,
"INDEX" => TokenKind::Index,
"VIEW" => TokenKind::View,
"ADD" => TokenKind::Add,
"ATTACH" => TokenKind::Attach,
"COLUMN" => TokenKind::Column,
"RENAME" => TokenKind::Rename,
"TO" => TokenKind::To,
"OWNER" => TokenKind::Owner,
"TYPE" => TokenKind::Type,
"STATISTICS" => TokenKind::Statistics,
"STORAGE" => TokenKind::Storage,
"OPTIONS" => TokenKind::Options,
"DATA" => TokenKind::Data,
"ROLE" => TokenKind::Role,
"USER" => TokenKind::User,
"LOGIN" => TokenKind::Login,
"NOLOGIN" => TokenKind::NoLogin,
"PASSWORD" => TokenKind::Password,
"SUPERUSER" => TokenKind::Superuser,
"NOSUPERUSER" => TokenKind::NoSuperuser,
"REPLICATION" => TokenKind::Replication,
"NOREPLICATION" => TokenKind::NoReplication,
"VALID" => TokenKind::Valid,
"UNTIL" => TokenKind::Until,
"CREATEDB" => TokenKind::CreateDb,
"NOCREATEDB" => TokenKind::NoCreateDb,
"CREATEROLE" => TokenKind::CreateRole,
"NOCREATEROLE" => TokenKind::NoCreateRole,
"NOINHERIT" => TokenKind::NoInherit,
"EXTENSION" => TokenKind::Extension,
"VERSION" => TokenKind::Version,
"CONSTRAINT" => TokenKind::Constraint,
"PRIMARY" => TokenKind::Primary,
"KEY" => TokenKind::Key,
"FOREIGN" => TokenKind::Foreign,
"REFERENCES" => TokenKind::References,
"UNIQUE" => TokenKind::Unique,
"CHECK" => TokenKind::Check,
"NOT" => TokenKind::Not,
"NULL" => TokenKind::Null,
"DEFAULT" => TokenKind::Default,
"CASCADE" => TokenKind::Cascade,
"RESTRICT" => TokenKind::Restrict,
"ACTION" => TokenKind::Action,
"AND" => TokenKind::And,
"OR" => TokenKind::Or,
"IN" => TokenKind::In,
"OUT" => TokenKind::Out,
"LIKE" => TokenKind::Like,
"ILIKE" => TokenKind::Ilike,
"SIMILAR" => TokenKind::Similar,
"BETWEEN" => TokenKind::Between,
"IS" => TokenKind::Is,
"EXISTS" => TokenKind::Exists,
"ANY" => TokenKind::Any,
"SOME" => TokenKind::Some,
"ESCAPE" => TokenKind::Escape,
"TRUE" => TokenKind::True,
"FALSE" => TokenKind::False,
"GROUP" => TokenKind::Group,
"ORDER" => TokenKind::Order,
"BY" => TokenKind::By,
"HAVING" => TokenKind::Having,
"LIMIT" => TokenKind::Limit,
"OFFSET" => TokenKind::Offset,
"ASC" => TokenKind::Asc,
"DESC" => TokenKind::Desc,
"DISTINCT" => TokenKind::Distinct,
"ALL" => TokenKind::All,
"NULLS" => TokenKind::Nulls,
"FIRST" => TokenKind::First,
"LAST" => TokenKind::Last,
"FETCH" => TokenKind::Fetch,
"NEXT" => TokenKind::Next,
"PERCENT" => TokenKind::PercentKw,
"TIE" => TokenKind::Tie,
"TIES" => TokenKind::Ties,
"UNION" => TokenKind::Union,
"INTERSECT" => TokenKind::Intersect,
"EXCEPT" => TokenKind::Except,
"BEGIN" => TokenKind::Begin,
"COMMIT" => TokenKind::Commit,
"ROLLBACK" => TokenKind::Rollback,
"TRANSACTION" => TokenKind::Transaction,
"SAVEPOINT" => TokenKind::Savepoint,
"RELEASE" => TokenKind::Release,
"WITH" => TokenKind::With,
"RECURSIVE" => TokenKind::Recursive,
"CASE" => TokenKind::Case,
"WHEN" => TokenKind::When,
"THEN" => TokenKind::Then,
"ELSE" => TokenKind::Else,
"END" => TokenKind::End,
"CAST" => TokenKind::Cast,
"IF" => TokenKind::If,
"JOIN" => TokenKind::Join,
"ON" => TokenKind::On,
"AS" => TokenKind::As,
"INNER" => TokenKind::Inner,
"LEFT" => TokenKind::Left,
"RIGHT" => TokenKind::Right,
"FULL" => TokenKind::Full,
"CROSS" => TokenKind::Cross,
"OUTER" => TokenKind::Outer,
"NATURAL" => TokenKind::Natural,
"USING" => TokenKind::Using,
"LATERAL" => TokenKind::Lateral,
"INHERITS" => TokenKind::Inherits,
"INHERIT" => TokenKind::Inherit,
"PARTITION" => TokenKind::Partition,
"RANGE" => TokenKind::Range,
"LIST" => TokenKind::List,
"HASH" => TokenKind::Hash,
"TABLESPACE" => TokenKind::Tablespace,
"LOCATION" => TokenKind::Location,
"COLLATE" => TokenKind::Collate,
"GENERATED" => TokenKind::Generated,
"ALWAYS" => TokenKind::Always,
"STORED" => TokenKind::Stored,
"AUTOINCREMENT" => TokenKind::AutoIncrement,
"DETACH" => TokenKind::Detach,
"MINVALUE" => TokenKind::Minvalue,
"MAXVALUE" => TokenKind::Maxvalue,
"PRESERVE" => TokenKind::Preserve,
"ROWS" => TokenKind::Rows,
"EXPLAIN" => TokenKind::Explain,
"ANALYZE" => TokenKind::Analyze,
"DESCRIBE" => TokenKind::Describe,
"SHOW" => TokenKind::Show,
"COPY" => TokenKind::Copy,
"VACUUM" => TokenKind::Vacuum,
"FOR" => TokenKind::For,
"SHARE" => TokenKind::Share,
"NO" => TokenKind::No,
"WAIT" => TokenKind::Wait,
"SKIP" => TokenKind::Skip,
"LOCKED" => TokenKind::Locked,
"ONLY" => TokenKind::Only,
"OVER" => TokenKind::Over,
"FILTER" => TokenKind::Filter,
"WINDOW" => TokenKind::Window,
"PRECEDING" => TokenKind::Preceding,
"FOLLOWING" => TokenKind::Following,
"CURRENT" => TokenKind::Current,
"ROW" => TokenKind::Row,
"UNBOUNDED" => TokenKind::Unbounded,
"CONFLICT" => TokenKind::Conflict,
"DO" => TokenKind::Do,
"NOTHING" => TokenKind::Nothing,
"EXCLUDED" => TokenKind::Excluded,
"SEQUENCE" => TokenKind::Sequence,
"START" => TokenKind::Start,
"INCREMENT" => TokenKind::Increment,
"CACHE" => TokenKind::Cache,
"CYCLE" => TokenKind::Cycle,
"OWNED" => TokenKind::Owned,
"VARYING" => TokenKind::Varying,
"PRECISION" => TokenKind::Precision,
"ZONE" => TokenKind::Zone,
"TIME" => TokenKind::Time,
"ENUM" => TokenKind::Enum,
"DOMAIN" => TokenKind::Domain,
"BASE" => TokenKind::Base,
"SUBTYPE" => TokenKind::Subtype,
"CANONICAL" => TokenKind::Canonical,
"PREFERRED" => TokenKind::Preferred,
"TRIGGER" => TokenKind::Trigger,
"BEFORE" => TokenKind::Before,
"AFTER" => TokenKind::After,
"INSTEAD" => TokenKind::Instead,
"EACH" => TokenKind::Each,
"EXECUTE" => TokenKind::Execute,
"PROCEDURE" => TokenKind::Procedure,
"TIMEOUT" => TokenKind::Timeout,
"IDEMPOTENT" => TokenKind::Idempotent,
"RETRIES" => TokenKind::Retries,
"CONTROL" => TokenKind::Control,
"DEFERRABLE" => TokenKind::Deferrable,
"INITIALLY" => TokenKind::Initially,
"DEFERRED" => TokenKind::Deferred,
"IMMEDIATE" => TokenKind::Immediate,
"REFERENCING" => TokenKind::Referencing,
"OLD" => TokenKind::Old,
"NEW" => TokenKind::New,
"OF" => TokenKind::Of,
"STATEMENT" => TokenKind::Statement,
"FUNCTION" => TokenKind::Function,
"RETURNS" => TokenKind::Returns,
"LANGUAGE" => TokenKind::Language,
"VOLATILE" => TokenKind::Volatile,
"STABLE" => TokenKind::Stable,
"IMMUTABLE" => TokenKind::Immutable,
"STRICT" => TokenKind::Strict,
"PARALLEL" => TokenKind::Parallel,
"SAFE" => TokenKind::Safe,
"UNSAFE" => TokenKind::Unsafe,
"RESTRICTED" => TokenKind::Restricted,
"VARIADIC" => TokenKind::Variadic,
"INOUT" => TokenKind::Inout,
"SETOF" => TokenKind::Setof,
"RAISES" => TokenKind::Raises,
"ACCESS" => TokenKind::Access,
"DEFINER" => TokenKind::Definer,
"INVOKER" => TokenKind::Invoker,
"COST" => TokenKind::Cost,
"CALLED" => TokenKind::Called,
"INPUT" => TokenKind::Input,
"SECURITY" => TokenKind::Security,
"PUBLIC" => TokenKind::Public,
"PRIVATE" => TokenKind::Private,
"VOID" => TokenKind::Void,
"INT" => TokenKind::Int,
"INTEGER" => TokenKind::Integer,
"INT2" => TokenKind::Int2,
"INT4" => TokenKind::Int4,
"INT8" => TokenKind::Int8,
"BIGINT" => TokenKind::Bigint,
"SMALLINT" => TokenKind::Smallint,
"BOOLEAN" => TokenKind::Boolean,
"BOOL" => TokenKind::Bool,
"TEXT" => TokenKind::Text,
"VARCHAR" => TokenKind::Varchar,
"CHAR" => TokenKind::Char,
"CHARACTER" => TokenKind::Character,
"REAL" => TokenKind::Real,
"DOUBLE" => TokenKind::Double,
"FLOAT" => TokenKind::Float,
"FLOAT4" => TokenKind::Float4,
"FLOAT8" => TokenKind::Float8,
"NUMERIC" => TokenKind::Numeric,
"DECIMAL" => TokenKind::Decimal,
"BINARY" => TokenKind::Binary,
"VARBINARY" => TokenKind::VarBinary,
"DATE" => TokenKind::Date,
"TIMESTAMP" => TokenKind::Timestamp,
"TIMESTAMPTZ" => TokenKind::Timestamptz,
"INTERVAL" => TokenKind::Interval,
"JSON" => TokenKind::Json,
"JSONB" => TokenKind::Jsonb,
"UUID" => TokenKind::Uuid,
"BYTEA" => TokenKind::Bytea,
"PRIORITY" => TokenKind::Priority,
"TAGS" => TokenKind::Tags,
"ENABLED" => TokenKind::Enabled,
"DISABLED" => TokenKind::Disabled,
"TEMPORARY" => TokenKind::Modifier(Modifier::Temporary),
"TEMP" => TokenKind::Modifier(Modifier::Temp),
"UNLOGGED" => TokenKind::Modifier(Modifier::Unlogged),
"GLOBAL" => TokenKind::Modifier(Modifier::Global),
"LOCAL" => TokenKind::Modifier(Modifier::Local),
"MATERIALIZED" => TokenKind::Modifier(Modifier::Materialized),
"REPLACE" => TokenKind::Modifier(Modifier::Replace),
_ => TokenKind::Ident,
}
}