Skip to content

Commit

Permalink
Sort searched queries by recency (#1735)
Browse files Browse the repository at this point in the history
* Sort searched queries by recency

* Fixed sqllab tests

* Add one more tr to QueryTable spec for pagination

* Change desc to asc as we reverse queries in component
  • Loading branch information
vera-liu authored Dec 14, 2016
1 parent 2fb94a8 commit e1e20b8
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 22 deletions.
2 changes: 1 addition & 1 deletion superset/assets/javascripts/SqlLab/components/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class App extends React.PureComponent {
<div className="container-fluid">
<div className="row">
<div className="col-md-12">
<QuerySearch height={this.state.contentHeight} />
<QuerySearch height={this.state.contentHeight} actions={this.props.actions} />
</div>
</div>
</div>
Expand Down
9 changes: 3 additions & 6 deletions superset/assets/javascripts/SqlLab/components/QuerySearch.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,7 @@ class QuerySearch extends React.PureComponent {
const url = this.insertParams('/superset/search_queries', params);
$.getJSON(url, (data, status) => {
if (status === 'success') {
const newQueriesArray = [];
for (const id in data) {
newQueriesArray.push(data[id]);
}
this.setState({ queriesArray: newQueriesArray, queriesLoading: false });
this.setState({ queriesArray: data, queriesLoading: false });
}
});
}
Expand All @@ -143,6 +139,7 @@ class QuerySearch extends React.PureComponent {
<DatabaseSelect
onChange={this.onChange.bind(this)}
databaseId={this.state.databaseId}
actions={this.props.actions}
/>
</div>
<div className="col-sm-4">
Expand Down Expand Up @@ -200,7 +197,7 @@ class QuerySearch extends React.PureComponent {
<div className="scrollbar-content">
<QueryTable
columns={[
'state', 'db', 'user', 'date',
'state', 'db', 'user', 'time',
'progress', 'rows', 'sql', 'querylink',
]}
onUserClicked={this.onUserClicked.bind(this)}
Expand Down
11 changes: 9 additions & 2 deletions superset/assets/javascripts/SqlLab/components/QueryTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,20 @@ class QueryTable extends React.PureComponent {
removeQuery(query) {
this.props.actions.removeQuery(query);
}

render() {
const data = this.props.queries.map((query) => {
const q = Object.assign({}, query);
if (q.endDttm) {
q.duration = fDuration(q.startDttm, q.endDttm);
}
q.date = moment(q.startDttm).format('MMM Do YYYY');
const time = moment(q.startDttm).format().split('T');
q.time = (
<div>
<span>
{time[0]} <br /> {time[1]}
</span>
</div>
);
q.user = (
<button
className="btn btn-link btn-xs"
Expand Down Expand Up @@ -188,6 +194,7 @@ class QueryTable extends React.PureComponent {
columns={this.props.columns}
className="table table-condensed"
data={data}
itemsPerPage={50}
/>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ describe('QueryTable', () => {
it('renders a proper table', () => {
const wrapper = mount(<QueryTable {...mockedProps} />);
expect(wrapper.find('table')).to.have.length(1);
expect(wrapper.find('tr')).to.have.length(3);
expect(wrapper.find('tr')).to.have.length(4);
});
});
11 changes: 8 additions & 3 deletions superset/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2593,9 +2593,14 @@ def search_queries(self):
if to_time:
query = query.filter(models.Query.start_time < int(to_time))

query_limit = config.get('QUERY_SEARCH_LIMIT', 5000)
sql_queries = query.limit(query_limit).all()
dict_queries = {q.client_id: q.to_dict() for q in sql_queries}
query_limit = config.get('QUERY_SEARCH_LIMIT', 1000)
sql_queries = (
query.order_by(models.Query.start_time.asc())
.limit(query_limit)
.all()
)

dict_queries = [q.to_dict() for q in sql_queries]

return Response(
json.dumps(dict_queries, default=utils.json_int_dttm_ser),
Expand Down
18 changes: 9 additions & 9 deletions tests/sqllab_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def test_search_query_on_db_id(self):
# Test search queries on database Id
data = self.get_json_resp('/superset/search_queries?database_id=1')
self.assertEquals(3, len(data))
db_ids = [data[k]['dbId'] for k in data]
db_ids = [k['dbId'] for k in data]
self.assertEquals([1, 1, 1], db_ids)

resp = self.get_resp('/superset/search_queries?database_id=-1')
Expand All @@ -138,15 +138,15 @@ def test_search_query_on_user(self):
data = self.get_json_resp(
'/superset/search_queries?user_id={}'.format(user.id))
self.assertEquals(2, len(data))
user_ids = {data[k]['userId'] for k in data}
user_ids = {k['userId'] for k in data}
self.assertEquals(set([user.id]), user_ids)

user = appbuilder.sm.find_user('gamma_sqllab')
resp = self.get_resp(
'/superset/search_queries?user_id={}'.format(user.id))
data = json.loads(resp)
self.assertEquals(1, len(data))
self.assertEquals(list(data.values())[0]['userId'] , user.id)
self.assertEquals(data[0]['userId'] , user.id)

def test_search_query_on_status(self):
self.run_some_queries()
Expand All @@ -155,21 +155,21 @@ def test_search_query_on_status(self):
resp = self.get_resp('/superset/search_queries?status=success')
data = json.loads(resp)
self.assertEquals(2, len(data))
states = [data[k]['state'] for k in data]
states = [k['state'] for k in data]
self.assertEquals(['success', 'success'], states)

resp = self.get_resp('/superset/search_queries?status=failed')
data = json.loads(resp)
self.assertEquals(1, len(data))
self.assertEquals(list(data.values())[0]['state'], 'failed')
self.assertEquals(data[0]['state'], 'failed')

def test_search_query_on_text(self):
self.run_some_queries()
self.login('admin')
url = '/superset/search_queries?search_text=permission'
data = self.get_json_resp(url)
self.assertEquals(1, len(data))
self.assertIn('permission', list(data.values())[0]['sql'])
self.assertIn('permission', data[0]['sql'])

def test_search_query_on_time(self):
self.run_some_queries()
Expand All @@ -189,9 +189,9 @@ def test_search_query_on_time(self):
resp = self.get_resp('/superset/search_queries?'+'&'.join(params))
data = json.loads(resp)
self.assertEquals(2, len(data))
for _, v in data.items():
self.assertLess(int(first_query_time), v['startDttm'])
self.assertLess(v['startDttm'], int(second_query_time))
for k in data:
self.assertLess(int(first_query_time), k['startDttm'])
self.assertLess(k['startDttm'], int(second_query_time))

def test_alias_duplicate(self):
self.run_sql(
Expand Down

0 comments on commit e1e20b8

Please sign in to comment.