Skip to content

Commit

Permalink
fix: [search query view] edit link is broken (apache#10128)
Browse files Browse the repository at this point in the history
* fix: [search query view] edit link is broken

* eslint + mypy

* rever app.py changes

* addressing comments

* use api/v1/query

* fix test
  • Loading branch information
mistercrunch authored Jun 25, 2020
1 parent 0017b61 commit 1781ebb
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 20 deletions.
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ combine_as_imports = true
include_trailing_comma = true
line_length = 88
known_first_party = superset
known_third_party =alembic,apispec,backoff,bleach,cachelib,celery,click,colorama,contextlib2,croniter,cryptography,dateutil,flask,flask_appbuilder,flask_babel,flask_caching,flask_compress,flask_login,flask_migrate,flask_sqlalchemy,flask_talisman,flask_testing,flask_wtf,geohash,geopy,humanize,isodate,jinja2,markdown,markupsafe,marshmallow,msgpack,numpy,pandas,parsedatetime,pathlib2,polyline,prison,pyarrow,pyhive,pytz,retry,selenium,setuptools,simplejson,slack,sphinx_rtd_theme,sqlalchemy,sqlalchemy_utils,sqlparse,werkzeug,wtforms,wtforms_json,yaml
known_third_party =alembic,apispec,backoff,bleach,cachelib,celery,click,colorama,contextlib2,croniter,cryptography,dateutil,flask,flask_appbuilder,flask_babel,flask_caching,flask_compress,flask_login,flask_migrate,flask_sqlalchemy,flask_talisman,flask_testing,flask_wtf,geohash,geopy,humanize,isodate,jinja2,markdown,markupsafe,marshmallow,msgpack,numpy,pandas,parameterized,parsedatetime,pathlib2,polyline,prison,pyarrow,pyhive,pytz,retry,selenium,setuptools,simplejson,slack,sphinx_rtd_theme,sqlalchemy,sqlalchemy_utils,sqlparse,werkzeug,wtforms,wtforms_json,yaml
multi_line_output = 3
order_by_type = false

Expand Down
24 changes: 22 additions & 2 deletions superset-frontend/src/SqlLab/actions/sqlLab.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ export const CtasEnum = {
TABLE: 'TABLE',
VIEW: 'VIEW',
};
const ERR_MSG_CANT_LOAD_QUERY = t("The query couldn't be loaded");

// a map of SavedQuery field names to the different names used client-side,
// because for now making the names consistent is too complicated
Expand Down Expand Up @@ -1182,7 +1183,7 @@ export function popStoredQuery(urlId) {
}),
),
)
.catch(() => dispatch(addDangerToast(t("The query couldn't be loaded"))));
.catch(() => dispatch(addDangerToast(ERR_MSG_CANT_LOAD_QUERY)));
};
}
export function popSavedQuery(saveQueryId) {
Expand All @@ -1197,7 +1198,26 @@ export function popSavedQuery(saveQueryId) {
};
return dispatch(addQueryEditor(queryEditorProps));
})
.catch(() => dispatch(addDangerToast(t("The query couldn't be loaded"))));
.catch(() => dispatch(addDangerToast(ERR_MSG_CANT_LOAD_QUERY)));
};
}
export function popQuery(queryId) {
return function (dispatch) {
return SupersetClient.get({
endpoint: `/api/v1/query/${queryId}`,
})
.then(({ json }) => {
const queryData = json.result;
const queryEditorProps = {
dbId: queryData.database.id,
schema: queryData.schema,
sql: queryData.sql,
title: `Copy of ${queryData.tab_name}`,
autorun: false,
};
return dispatch(addQueryEditor(queryEditorProps));
})
.catch(() => dispatch(addDangerToast(ERR_MSG_CANT_LOAD_QUERY)));
};
}
export function popDatasourceQuery(datasourceKey, sql) {
Expand Down
19 changes: 5 additions & 14 deletions superset-frontend/src/SqlLab/components/QueryTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import ResultSet from './ResultSet';
import ModalTrigger from '../../components/ModalTrigger';
import HighlightedSql from './HighlightedSql';
import { fDuration } from '../../modules/dates';
import { storeQuery } from '../../utils/common';
import QueryStateLabel from './QueryStateLabel';

const propTypes = {
Expand Down Expand Up @@ -57,18 +56,10 @@ class QueryTable extends React.PureComponent {
activeQuery: null,
};
}
callback(url) {
openQuery(id) {
const url = `/superset/sqllab?queryId=${id}`;
window.open(url);
}
openQuery(dbId, schema, sql) {
const newQuery = {
dbId,
title: t('Untitled Query'),
schema,
sql,
};
storeQuery(newQuery).then(url => this.callback(url));
}
hideVisualizeModal() {
this.setState({ showVisualizeModal: false });
}
Expand Down Expand Up @@ -127,10 +118,10 @@ class QueryTable extends React.PureComponent {
<div style={{ width: '100px' }}>
<button
className="btn btn-link btn-xs"
onClick={this.openQuery.bind(this, q.dbId, q.schema, q.sql)}
onClick={this.openQuery.bind(this, q.queryId)}
>
<i className="fa fa-external-link" />
{t('Open in SQL Editor')}
<i className="fa fa-external-link m-r-3" />
{t('Edit')}
</button>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const RunQueryActionButton = ({
runQuery = NO_OP,
selectedText,
stopQuery = NO_OP,
sql,
sql = '',
}: Props) => {
const runBtnText = selectedText ? t('Run Selected Query') : t('Run');
const btnStyle = selectedText ? 'warning' : 'primary';
Expand Down
10 changes: 9 additions & 1 deletion superset-frontend/src/SqlLab/components/TabbedSqlEditors.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,19 @@ class TabbedSqlEditors extends React.PureComponent {
};

// Popping a new tab based on the querystring
if (query.id || query.sql || query.savedQueryId || query.datasourceKey) {
if (
query.id ||
query.sql ||
query.savedQueryId ||
query.datasourceKey ||
query.queryId
) {
if (query.id) {
this.props.actions.popStoredQuery(query.id);
} else if (query.savedQueryId) {
this.props.actions.popSavedQuery(query.savedQueryId);
} else if (query.queryId) {
this.props.actions.popQuery(query.queryId);
} else if (query.datasourceKey) {
this.props.actions.popDatasourceQuery(query.datasourceKey, query.sql);
} else if (query.sql) {
Expand Down
1 change: 1 addition & 0 deletions superset/models/sql_lab.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ def to_dict(self) -> Dict[str, Any]:
"errorMessage": self.error_message,
"executedSql": self.executed_sql,
"id": self.client_id,
"queryId": self.id,
"limit": self.limit,
"progress": self.progress,
"rows": self.rows,
Expand Down
1 change: 1 addition & 0 deletions superset/queries/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class QueryRestApi(BaseSupersetModelRestApi):
"status",
"tab_name",
"sql_editor_id",
"database.id",
"schema",
"sql",
"select_sql",
Expand Down
4 changes: 3 additions & 1 deletion tests/queries/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ def test_get_query(self):
"""
admin = self.get_user("admin")
client_id = self.get_random_string()
example_db = get_example_database()
query = self.insert_query(
get_example_database().id,
example_db.id,
admin.id,
client_id,
sql="SELECT col1, col2 from table1",
Expand All @@ -92,6 +93,7 @@ def test_get_query(self):
self.assertEqual(rv.status_code, 200)

expected_result = {
"database": {"id": example_db.id},
"client_id": client_id,
"end_result_backend_time": None,
"error_message": None,
Expand Down

0 comments on commit 1781ebb

Please sign in to comment.