From 2685ab4f1f16100ce0bf365c10a63ced258d37a7 Mon Sep 17 00:00:00 2001
From: John Bodley <4567245+john-bodley@users.noreply.github.com>
Date: Mon, 13 Aug 2018 13:54:55 -0700
Subject: [PATCH] [fix] Enforcing main dttm column (#5584)
---
superset/assets/src/explore/controls.jsx | 19 ++++++++++---------
superset/connectors/sqla/models.py | 1 +
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/superset/assets/src/explore/controls.jsx b/superset/assets/src/explore/controls.jsx
index ddf0775974..50fe3bfa07 100644
--- a/superset/assets/src/explore/controls.jsx
+++ b/superset/assets/src/explore/controls.jsx
@@ -832,22 +832,23 @@ export const controls = {
'column in the table. Also note that the ' +
'filter below is applied against this column or ' +
'expression'),
- default: (c) => {
- if (c.options && c.options.length > 0) {
- return c.options[0].column_name;
- }
- return null;
- },
+ default: control => control.default,
clearable: false,
optionRenderer: c => ,
valueRenderer: c => ,
valueKey: 'column_name',
mapStateToProps: (state) => {
- const newState = {};
+ const props = {};
if (state.datasource) {
- newState.options = state.datasource.columns.filter(c => c.is_dttm);
+ props.options = state.datasource.columns.filter(c => c.is_dttm);
+ props.default = null;
+ if (state.datasource.main_dttm_col) {
+ props.default = state.datasource.main_dttm_col;
+ } else if (props.options && props.options.length > 0) {
+ props.default = props.options[0].column_name;
+ }
}
- return newState;
+ return props;
},
},
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index e6549260d0..61483cc349 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -410,6 +410,7 @@ class SqlaTable(Model, BaseDatasource):
grains = [(g.duration, g.name) for g in grains]
d['granularity_sqla'] = utils.choicify(self.dttm_cols)
d['time_grain_sqla'] = grains
+ d['main_dttm_col'] = self.main_dttm_col
return d
def values_for_column(self, column_name, limit=10000):