[BugFix]: Creating a PostgresBaseEngineSpec so changes to the Postgre… (#4224)

* [BugFix]: Creating a PostgresBaseEngineSpec so changes to the PostgresEngineSpec don't affect every subclass

* Empty engine for abstract Engine
This commit is contained in:
fabianmenges 2018-02-03 23:03:02 -05:00 committed by Maxime Beauchemin
parent d41418eaa0
commit a9e1e685ba
1 changed files with 37 additions and 38 deletions

View File

@ -280,8 +280,10 @@ class BaseEngineSpec(object):
return {}
class PostgresEngineSpec(BaseEngineSpec):
engine = 'postgresql'
class PostgresBaseEngineSpec(BaseEngineSpec):
""" Abstract class for Postgres 'like' databases """
engine = ''
time_grains = (
Grain('Time Column', _('Time Column'), '{col}'),
@ -311,6 +313,10 @@ class PostgresEngineSpec(BaseEngineSpec):
def convert_dttm(cls, target_type, dttm):
return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S'))
class PostgresEngineSpec(PostgresBaseEngineSpec):
engine = 'postgresql'
@classmethod
def get_table_names(cls, schema, inspector):
"""Need to consider foreign tables for PostgreSQL"""
@ -319,6 +325,35 @@ class PostgresEngineSpec(BaseEngineSpec):
return sorted(tables)
class VerticaEngineSpec(PostgresBaseEngineSpec):
engine = 'vertica'
class RedshiftEngineSpec(PostgresBaseEngineSpec):
engine = 'redshift'
class OracleEngineSpec(PostgresBaseEngineSpec):
engine = 'oracle'
time_grains = (
Grain('Time Column', _('Time Column'), '{col}'),
Grain('minute', _('minute'), "TRUNC(TO_DATE({col}), 'MI')"),
Grain('hour', _('hour'), "TRUNC(TO_DATE({col}), 'HH')"),
Grain('day', _('day'), "TRUNC(TO_DATE({col}), 'DDD')"),
Grain('week', _('week'), "TRUNC(TO_DATE({col}), 'WW')"),
Grain('month', _('month'), "TRUNC(TO_DATE({col}), 'MONTH')"),
Grain('quarter', _('quarter'), "TRUNC(TO_DATE({col}), 'Q')"),
Grain('year', _('year'), "TRUNC(TO_DATE({col}), 'YEAR')"),
)
@classmethod
def convert_dttm(cls, target_type, dttm):
return (
"""TO_TIMESTAMP('{}', 'YYYY-MM-DD"T"HH24:MI:SS.ff6')"""
).format(dttm.isoformat())
class Db2EngineSpec(BaseEngineSpec):
engine = 'ibm_db_sa'
time_grains = (
@ -1046,42 +1081,6 @@ class MssqlEngineSpec(BaseEngineSpec):
return "CONVERT(DATETIME, '{}', 126)".format(dttm.isoformat())
class RedshiftEngineSpec(PostgresEngineSpec):
engine = 'redshift'
class OracleEngineSpec(PostgresEngineSpec):
engine = 'oracle'
time_grains = (
Grain('Time Column', _('Time Column'), '{col}'),
Grain('minute', _('minute'),
"TRUNC(TO_DATE({col}), 'MI')"),
Grain('hour', _('hour'),
"TRUNC(TO_DATE({col}), 'HH')"),
Grain('day', _('day'),
"TRUNC(TO_DATE({col}), 'DDD')"),
Grain('week', _('week'),
"TRUNC(TO_DATE({col}), 'WW')"),
Grain('month', _('month'),
"TRUNC(TO_DATE({col}), 'MONTH')"),
Grain('quarter', _('quarter'),
"TRUNC(TO_DATE({col}), 'Q')"),
Grain('year', _('year'),
"TRUNC(TO_DATE({col}), 'YEAR')"),
)
@classmethod
def convert_dttm(cls, target_type, dttm):
return (
"""TO_TIMESTAMP('{}', 'YYYY-MM-DD"T"HH24:MI:SS.ff6')"""
).format(dttm.isoformat())
class VerticaEngineSpec(PostgresEngineSpec):
engine = 'vertica'
class AthenaEngineSpec(BaseEngineSpec):
engine = 'awsathena'