From 77239f46bedd1dac48a7f0a60ac20cb4f9784330 Mon Sep 17 00:00:00 2001 From: fabianmenges Date: Sat, 3 Feb 2018 23:03:02 -0500 Subject: [PATCH] =?UTF-8?q?[BugFix]:=20Creating=20a=20PostgresBaseEngineSp?= =?UTF-8?q?ec=20so=20changes=20to=20the=20Postgre=E2=80=A6=20(#4224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [BugFix]: Creating a PostgresBaseEngineSpec so changes to the PostgresEngineSpec don't affect every subclass * Empty engine for abstract Engine --- superset/db_engine_specs.py | 75 ++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/superset/db_engine_specs.py b/superset/db_engine_specs.py index d26f633bbd266..efd37babfc7e9 100644 --- a/superset/db_engine_specs.py +++ b/superset/db_engine_specs.py @@ -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}'), @@ -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""" @@ -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 = ( @@ -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'