from enum import Enum
from typing import Any
__author__ = "Timothy Heys"
__email__ = "theys@kayak.com"
class Arithmetic(Enum):
add = "+"
sub = "-"
mul = "*"
div = "/"
lshift = "<<"
rshift = ">>"
class Comparator(Enum):
pass
class Equality(Comparator):
eq = "="
ne = "<>"
gt = ">"
gte = ">="
lt = "<"
lte = "<="
class Matching(Comparator):
not_like = " NOT LIKE "
like = " LIKE "
not_ilike = " NOT ILIKE "
ilike = " ILIKE "
rlike = " RLIKE "
regex = " REGEX "
regexp = " REGEXP "
bin_regex = " REGEX BINARY "
as_of = " AS OF "
glob = " GLOB "
class Boolean(Comparator):
and_ = "AND"
or_ = "OR"
xor_ = "XOR"
true = "TRUE"
false = "FALSE"
class Order(Enum):
asc = "ASC"
desc = "DESC"
class JoinType(Enum):
inner = ""
left = "LEFT"
right = "RIGHT"
outer = "FULL OUTER"
left_outer = "LEFT OUTER"
right_outer = "RIGHT OUTER"
full_outer = "FULL OUTER"
cross = "CROSS"
hash = "HASH"
class ReferenceOption(Enum):
cascade = "CASCADE"
no_action = "NO ACTION"
restrict = "RESTRICT"
set_null = "SET NULL"
set_default = "SET DEFAULT"
class SetOperation(Enum):
union = "UNION"
union_all = "UNION ALL"
intersect = "INTERSECT"
except_of = "EXCEPT"
minus = "MINUS"
class DatePart(Enum):
year = "YEAR"
quarter = "QUARTER"
month = "MONTH"
week = "WEEK"
day = "DAY"
hour = "HOUR"
minute = "MINUTE"
second = "SECOND"
microsecond = "MICROSECOND"
class SqlType:
def __init__(self, name: str) -> None:
self.name = name
def __call__(self, length: int) -> "SqlTypeLength":
return SqlTypeLength(self.name, length)
def get_sql(self, **kwargs: Any) -> str:
return "{name}".format(name=self.name)
class SqlTypeLength:
def __init__(self, name: str, length: int) -> None:
self.name = name
self.length = length
def get_sql(self, **kwargs: Any) -> str:
return "{name}({length})".format(name=self.name, length=self.length)
class SqlTypes:
BOOLEAN = "BOOLEAN"
INTEGER = "INTEGER"
FLOAT = "FLOAT"
NUMERIC = "NUMERIC"
SIGNED = "SIGNED"
UNSIGNED = "UNSIGNED"
DATE = "DATE"
TIME = "TIME"
TIMESTAMP = "TIMESTAMP"
CHAR = SqlType("CHAR")
VARCHAR = SqlType("VARCHAR")
LONG_VARCHAR = SqlType("LONG VARCHAR")
BINARY = SqlType("BINARY")
VARBINARY = SqlType("VARBINARY")
LONG_VARBINARY = SqlType("LONG VARBINARY")
class Dialects(Enum):
VERTICA = "vertica"
CLICKHOUSE = "clickhouse"
ORACLE = "oracle"
MSSQL = "mssql"
MYSQL = "mysql"
POSTGRESQL = "postgressql"
REDSHIFT = "redshift"
SQLLITE = "sqllite"
SNOWFLAKE = "snowflake"
class JSONOperators(Enum):
HAS_KEY = "?"
CONTAINS = "@>"
CONTAINED_BY = "<@"
HAS_KEYS = "?&"
HAS_ANY_KEYS = "?|"
GET_JSON_VALUE = "->"
GET_TEXT_VALUE = "->>"
GET_PATH_JSON_VALUE = "#>"
GET_PATH_TEXT_VALUE = "#>>"