Skip to content

Commit

Permalink
[BugFix]: Creating a PostgresBaseEngineSpec so changes to the Postgre… (
Browse files Browse the repository at this point in the history
#4224)

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

* Empty engine for abstract Engine
  • Loading branch information
fabianmenges authored and mistercrunch committed Feb 4, 2018
1 parent d41418e commit a9e1e68
Showing 1 changed file with 37 additions and 38 deletions.
75 changes: 37 additions & 38 deletions superset/db_engine_specs.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,8 +280,10 @@ def get_configuration_for_impersonation(cls, uri, impersonate_user, username):
return {}


class PostgresEngineSpec(BaseEngineSpec):
engine = 'postgresql'
class PostgresBaseEngineSpec(BaseEngineSpec):
""" Abstract class for Postgres 'like' databases """

engine = ''

time_grains = (
Grain('Time Column', _('Time Column'), '{col}'),
Expand Down Expand Up @@ -311,6 +313,10 @@ def epoch_to_dttm(cls):
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"""
Expand All @@ -319,6 +325,35 @@ def get_table_names(cls, schema, inspector):
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 = (
Expand Down Expand Up @@ -1046,42 +1081,6 @@ def convert_dttm(cls, target_type, dttm):
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'

Expand Down

0 comments on commit a9e1e68

Please sign in to comment.