From 1d0c9d2e83de3c563e3621aed5d8c7c0e552e563 Mon Sep 17 00:00:00 2001 From: Vera Liu Date: Sun, 6 Nov 2016 16:06:16 -0800 Subject: [PATCH 1/3] Added cache prop to ResultSet for distiguishing query result and datapreview results --- caravel/assets/javascripts/SqlLab/components/ResultSet.jsx | 7 +++++-- caravel/assets/javascripts/SqlLab/components/SouthPane.jsx | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx b/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx index 24b8e5fa19ec1..2b77a27b80443 100644 --- a/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx +++ b/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx @@ -14,6 +14,7 @@ const propTypes = { searchText: React.PropTypes.string, showSql: React.PropTypes.bool, visualize: React.PropTypes.bool, + cache: React.PropTypes.bool, }; const defaultProps = { search: true, @@ -22,6 +23,7 @@ const defaultProps = { csv: true, searchText: '', actions: {}, + cache: false, }; @@ -36,7 +38,7 @@ class ResultSet extends React.PureComponent { } componentWillReceiveProps(nextProps) { // when new results comes in, save them locally and clear in store - if ((!nextProps.query.cached) + if (this.props.cache && (!nextProps.query.cached) && nextProps.query.results && nextProps.query.results.data.length > 0) { this.setState( @@ -125,7 +127,8 @@ class ResultSet extends React.PureComponent { } render() { const query = this.props.query; - const results = (this.props.query.cached) ? this.state.results : query.results; + const results = + (this.props.cache && this.props.query.cached) ? this.state.results : query.results; let sql; if (this.props.showSql) { diff --git a/caravel/assets/javascripts/SqlLab/components/SouthPane.jsx b/caravel/assets/javascripts/SqlLab/components/SouthPane.jsx index 6f57bc8df5093..ed312eebb060d 100644 --- a/caravel/assets/javascripts/SqlLab/components/SouthPane.jsx +++ b/caravel/assets/javascripts/SqlLab/components/SouthPane.jsx @@ -54,7 +54,7 @@ class SouthPane extends React.PureComponent { eventKey={query.id} key={query.id} > - + )); From 562b646e0f2d8381fe6c0f9e65bfe89c59ed61f0 Mon Sep 17 00:00:00 2001 From: Vera Liu Date: Sun, 6 Nov 2016 20:13:55 -0800 Subject: [PATCH 2/3] small nit --- caravel/assets/javascripts/SqlLab/components/ResultSet.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx b/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx index 2b77a27b80443..8e4af4db5d68f 100644 --- a/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx +++ b/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx @@ -128,7 +128,7 @@ class ResultSet extends React.PureComponent { render() { const query = this.props.query; const results = - (this.props.cache && this.props.query.cached) ? this.state.results : query.results; + (this.props.cache && query.cached) ? this.state.results : query.results; let sql; if (this.props.showSql) { From a164873a2bd073ca45264726cad606cd6ca3ee93 Mon Sep 17 00:00:00 2001 From: Vera Liu Date: Mon, 7 Nov 2016 15:14:34 -0800 Subject: [PATCH 3/3] Only cache results.data locally --- .../SqlLab/components/ResultSet.jsx | 18 ++++++++++++------ caravel/assets/javascripts/SqlLab/reducers.js | 4 +++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx b/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx index 8e4af4db5d68f..38650cc1416d9 100644 --- a/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx +++ b/caravel/assets/javascripts/SqlLab/components/ResultSet.jsx @@ -33,7 +33,7 @@ class ResultSet extends React.PureComponent { this.state = { searchText: '', showModal: false, - results: null, + data: [], }; } componentWillReceiveProps(nextProps) { @@ -42,7 +42,7 @@ class ResultSet extends React.PureComponent { && nextProps.query.results && nextProps.query.results.data.length > 0) { this.setState( - { results: nextProps.query.results }, + { data: nextProps.query.results.data }, this.clearQueryResults(nextProps.query) ); } @@ -127,8 +127,14 @@ class ResultSet extends React.PureComponent { } render() { const query = this.props.query; - const results = - (this.props.cache && query.cached) ? this.state.results : query.results; + const results = query.results; + let data; + if (this.props.cache && query.cached) { + data = this.state.data; + } else { + data = results ? results.data : []; + } + let sql; if (this.props.showSql) { @@ -168,7 +174,7 @@ class ResultSet extends React.PureComponent { ); } else if (query.state === 'success') { - if (results && results.data && results.data.length > 0) { + if (results && data && data.length > 0) { return (
col.name)} sortable className="table table-condensed table-bordered" diff --git a/caravel/assets/javascripts/SqlLab/reducers.js b/caravel/assets/javascripts/SqlLab/reducers.js index 4d0c97fb9197e..87626f199953a 100644 --- a/caravel/assets/javascripts/SqlLab/reducers.js +++ b/caravel/assets/javascripts/SqlLab/reducers.js @@ -150,7 +150,9 @@ export const sqlLabReducer = function (state, action) { return alterInObject(state, 'queries', action.query, { state: 'stopped' }); }, [actions.CLEAR_QUERY_RESULTS]() { - return alterInObject(state, 'queries', action.query, { results: [], cached: true }); + const newResults = Object.assign({}, action.query.results); + newResults.data = []; + return alterInObject(state, 'queries', action.query, { results: newResults, cached: true }); }, [actions.REQUEST_QUERY_RESULTS]() { return alterInObject(state, 'queries', action.query, { state: 'fetching' });