in superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.tsx [81:170]
componentDidMount() {
// merge post form data with GET search params
// Hack: this data should be coming from getInitialState
// but for some reason this data isn't being passed properly through
// the reducer.
const bootstrapData = getBootstrapData();
const queryParameters = URI(window.location).search(true);
const path = URI(window.location).path();
const {
id,
name,
sql,
savedQueryId,
datasourceKey,
queryId,
dbid,
dbname,
catalog,
schema,
autorun,
new: isNewQuery,
...urlParams
} = {
...this.context.requestedQuery,
...bootstrapData.requested_query,
...queryParameters,
} as Record<string, string>;
const permalink = path.match(/\/p\/\w+/)?.[0].slice(3);
// Popping a new tab based on the querystring
if (permalink || id || sql || savedQueryId || datasourceKey || queryId) {
if (permalink) {
this.props.actions.popPermalink(permalink);
} else if (id) {
this.props.actions.popStoredQuery(id);
} else if (savedQueryId) {
this.props.actions.popSavedQuery(savedQueryId);
} else if (queryId) {
this.props.actions.popQuery(queryId);
} else if (datasourceKey) {
this.props.actions.popDatasourceQuery(datasourceKey, sql);
} else if (sql) {
let databaseId: string | number = dbid;
if (databaseId) {
databaseId = parseInt(databaseId, 10);
} else {
const { databases } = this.props;
const databaseName = dbname;
if (databaseName) {
Object.keys(databases).forEach(db => {
if (databases[db].database_name === databaseName) {
databaseId = databases[db].id;
}
});
}
}
const newQueryEditor = {
name,
dbId: databaseId,
catalog,
schema,
autorun,
sql,
};
this.props.actions.addQueryEditor(newQueryEditor);
}
this.popNewTab(pick(urlParams, Object.keys(queryParameters ?? {})));
} else if (isNewQuery || this.props.queryEditors.length === 0) {
this.newQueryEditor();
if (isNewQuery) {
navigateWithState(SQL_LAB_URL, {}, { replace: true });
}
} else {
const qe = this.activeQueryEditor();
const latestQuery = this.props.queries[qe?.latestQueryId || ''];
if (
isFeatureEnabled(FeatureFlag.SqllabBackendPersistence) &&
latestQuery &&
latestQuery.resultsKey
) {
// when results are not stored in localStorage they need to be
// fetched from the results backend (if configured)
this.props.actions.fetchQueryResults(
latestQuery,
this.props.displayLimit,
);
}
}
}