From 584545a31928ff61626c5a5b91712a14055a1892 Mon Sep 17 00:00:00 2001 From: "Hugh A. Miles II" Date: Tue, 2 Aug 2022 17:28:19 +0000 Subject: [PATCH 1/5] fix --- superset/models/helpers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 81dc53cfaee44..45de467d7b092 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -1203,7 +1203,6 @@ def _get_top_groups( def dttm_sql_literal(self, dttm: sa.DateTime, col_type: Optional[str]) -> str: """Convert datetime object to a SQL expression string""" - sql = ( self.db_engine_spec.convert_dttm(col_type, dttm, db_extra=None) if col_type From be65cf6816010387daee695b084616b4fba50208 Mon Sep 17 00:00:00 2001 From: "Hugh A. Miles II" Date: Tue, 2 Aug 2022 22:46:45 +0000 Subject: [PATCH 2/5] save --- superset/models/helpers.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 45de467d7b092..f8a4665aa73ad 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -1203,14 +1203,14 @@ def _get_top_groups( def dttm_sql_literal(self, dttm: sa.DateTime, col_type: Optional[str]) -> str: """Convert datetime object to a SQL expression string""" - sql = ( - self.db_engine_spec.convert_dttm(col_type, dttm, db_extra=None) - if col_type - else None - ) - - if sql: - return sql + # sql = ( + # self.db_engine_spec.convert_dttm(col_type, dttm, db_extra=None) + # if col_type + # else None + # ) + + # if sql: + # return sql return f'{dttm.strftime("%Y-%m-%d %H:%M:%S.%f")}' From 6b08cb099cb32075021e7e2741982730d876c0fc Mon Sep 17 00:00:00 2001 From: "Hugh A. Miles II" Date: Tue, 2 Aug 2022 23:33:34 +0000 Subject: [PATCH 3/5] integrate type casting for engiines --- superset/models/helpers.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/superset/models/helpers.py b/superset/models/helpers.py index f8a4665aa73ad..81dc53cfaee44 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -1203,14 +1203,15 @@ def _get_top_groups( def dttm_sql_literal(self, dttm: sa.DateTime, col_type: Optional[str]) -> str: """Convert datetime object to a SQL expression string""" - # sql = ( - # self.db_engine_spec.convert_dttm(col_type, dttm, db_extra=None) - # if col_type - # else None - # ) - - # if sql: - # return sql + + sql = ( + self.db_engine_spec.convert_dttm(col_type, dttm, db_extra=None) + if col_type + else None + ) + + if sql: + return sql return f'{dttm.strftime("%Y-%m-%d %H:%M:%S.%f")}' From 74af5f58b1b9eb26802599644be44d86e6b538f9 Mon Sep 17 00:00:00 2001 From: "Hugh A. Miles II" Date: Wed, 3 Aug 2022 23:03:03 +0000 Subject: [PATCH 4/5] fix orderby on column types --- superset/models/sql_lab.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/superset/models/sql_lab.py b/superset/models/sql_lab.py index d0e0470d4b1f4..ae2b9e9da5218 100644 --- a/superset/models/sql_lab.py +++ b/superset/models/sql_lab.py @@ -219,8 +219,13 @@ def columns(self) -> List[ResultSetColumnType]: @property def data(self) -> Dict[str, Any]: order_by_choices = [] +<<<<<<< HEAD for col in self.columns: column_name = str(col.get("column_name") or "") +======= + for c in self.columns: + column_name = str(c.get("column_name") or "") +>>>>>>> f3e68482a (fix orderby on column types) order_by_choices.append( (json.dumps([column_name, True]), column_name + " [asc]") ) From c89a9169dc1378ac6d3e6fda6c4fe60ae312bd09 Mon Sep 17 00:00:00 2001 From: AAfghahi Date: Thu, 4 Aug 2022 13:46:42 -0400 Subject: [PATCH 5/5] fixes --- superset/models/helpers.py | 49 +++++++++++++++++++++++++++----------- superset/models/sql_lab.py | 5 ---- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 81dc53cfaee44..e3111166ae5c2 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -888,14 +888,26 @@ def _normalize_prequery_result_type( column_ = columns_by_name[dimension] db_extra: Dict[str, Any] = self.database.get_extra() # type: ignore - if column_.type and column_.is_temporal and isinstance(value, str): - sql = self.db_engine_spec.convert_dttm( - column_.type, dateutil.parser.parse(value), db_extra=db_extra - ) + if isinstance(column_, dict): + if ( + column_.get("type") + and column_.get("is_temporal") + and isinstance(value, str) + ): + sql = self.db_engine_spec.convert_dttm( + column_.get("type"), dateutil.parser.parse(value), db_extra=None + ) - if sql: - value = self.text(sql) + if sql: + value = self.db_engine_spec.get_text_clause(sql) + else: + if column_.type and column_.is_temporal and isinstance(value, str): + sql = self.db_engine_spec.convert_dttm( + column_.type, dateutil.parser.parse(value), db_extra=db_extra + ) + if sql: + value = self.text(sql) return value def make_orderby_compatible( @@ -1827,12 +1839,22 @@ def get_sqla_query( # pylint: disable=too-many-arguments,too-many-locals,too-ma inner_time_filter = [] if dttm_col and not db_engine_spec.time_groupby_inline: - inner_time_filter = [ - dttm_col.get_time_filter( - inner_from_dttm or from_dttm, - inner_to_dttm or to_dttm, - ) - ] + if isinstance(dttm_col, dict): + inner_time_filter = [ + self.get_time_filter( + dttm_col, + inner_from_dttm or from_dttm, + inner_to_dttm or to_dttm, + ) + ] + else: + inner_time_filter = [ + dttm_col.get_time_filter( + inner_from_dttm or from_dttm, + inner_to_dttm or to_dttm, + ) + ] + subq = subq.where(and_(*(where_clause_and + inner_time_filter))) subq = subq.group_by(*inner_groupby_exprs) @@ -1866,8 +1888,7 @@ def get_sqla_query( # pylint: disable=too-many-arguments,too-many-locals,too-ma "columns": columns, "order_desc": True, } - - result = self.query(prequery_obj) # type: ignore + result = self.exc_query(prequery_obj) prequeries.append(result.query) dimensions = [ c diff --git a/superset/models/sql_lab.py b/superset/models/sql_lab.py index ae2b9e9da5218..d0e0470d4b1f4 100644 --- a/superset/models/sql_lab.py +++ b/superset/models/sql_lab.py @@ -219,13 +219,8 @@ def columns(self) -> List[ResultSetColumnType]: @property def data(self) -> Dict[str, Any]: order_by_choices = [] -<<<<<<< HEAD for col in self.columns: column_name = str(col.get("column_name") or "") -======= - for c in self.columns: - column_name = str(c.get("column_name") or "") ->>>>>>> f3e68482a (fix orderby on column types) order_by_choices.append( (json.dumps([column_name, True]), column_name + " [asc]") )