# coding: utf-8
from enum import Enum
__author__ = "Timothy Heys"
__email__ = "theys@kayak.com"
[docs]class Arithmetic(Enum):
add = '+'
sub = '-'
mul = '*'
div = '/'
[docs]class Comparator(Enum):
pass
[docs]class Equality(Comparator):
eq = '='
ne = '<>'
gt = '>'
gte = '>='
lt = '<'
lte = '<='
[docs]class Matching(Comparator):
not_like = ' NOT LIKE '
like = ' LIKE '
not_ilike = ' NOT ILIKE '
ilike = ' ILIKE '
regex = ' REGEX '
bin_regex = ' REGEX BINARY '
[docs]class Boolean(Comparator):
and_ = 'AND'
or_ = 'OR'
xor_ = 'XOR'
true = 'TRUE'
false = 'FALSE'
[docs]class Order(Enum):
asc = 'ASC'
desc = 'DESC'
[docs]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'
[docs]class UnionType(Enum):
distinct = ''
all = ' ALL'
[docs]class DatePart(Enum):
year = 'YEAR'
quarter = 'QUARTER'
month = 'MONTH'
week = 'WEEK'
day = 'DAY'
hour = 'HOUR'
minute = 'MINUTE'
second = 'SECOND'
microsecond = 'MICROSECOND'
[docs]class SqlType:
def __init__(self, name):
self.name = name
def __call__(self, length):
return SqlTypeLength(self.name, length)
[docs] def get_sql(self, **kwargs):
return '{name}'.format(name=self.name)
[docs]class SqlTypeLength:
def __init__(self, name, length):
self.name = name
self.length = length
[docs] def get_sql(self, **kwargs):
return '{name}({length})'.format(name=self.name,
length=self.length)
[docs]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')
[docs]class Dialects(Enum):
VERTICA = 'vertica'
CLICKHOUSE = 'clickhouse'
ORACLE = 'oracle'
MSSQL = 'mssql'
MYSQL = 'mysql'
POSTGRESQL = 'postgressql'
REDSHIFT = 'redshift'
SQLLITE = 'sqllite'
SNOWFLAKE = 'snowflake'
[docs]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 = '#>>'