From fd100e71a8dc57a974fe02710bb61ace41282152 Mon Sep 17 00:00:00 2001 From: justin-park Date: Fri, 3 Feb 2023 14:23:21 -0800 Subject: [PATCH 1/3] chore(sqllab): Remove schemaOptions from redux store --- .../src/SqlLab/actions/sqlLab.js | 6 ---- .../src/SqlLab/actions/sqlLab.test.js | 1 - .../components/AceEditorWrapper/index.tsx | 32 ++++++++++++------- .../src/SqlLab/components/SaveQuery/index.tsx | 1 - .../components/SqlEditorLeftBar/index.tsx | 11 ------- superset-frontend/src/SqlLab/fixtures.ts | 7 ---- .../src/SqlLab/reducers/sqlLab.js | 12 ------- superset-frontend/src/SqlLab/types.ts | 1 - .../SqlLab/utils/emptyQueryResults.test.js | 4 +-- .../DatabaseSelector.test.tsx | 1 - .../src/components/DatabaseSelector/index.tsx | 4 --- .../src/components/TableSelector/index.tsx | 3 -- 12 files changed, 22 insertions(+), 61 deletions(-) diff --git a/superset-frontend/src/SqlLab/actions/sqlLab.js b/superset-frontend/src/SqlLab/actions/sqlLab.js index ab8abe0edca21..b99cd883b3ee2 100644 --- a/superset-frontend/src/SqlLab/actions/sqlLab.js +++ b/superset-frontend/src/SqlLab/actions/sqlLab.js @@ -48,8 +48,6 @@ export const EXPAND_TABLE = 'EXPAND_TABLE'; export const COLLAPSE_TABLE = 'COLLAPSE_TABLE'; export const QUERY_EDITOR_SETDB = 'QUERY_EDITOR_SETDB'; export const QUERY_EDITOR_SET_SCHEMA = 'QUERY_EDITOR_SET_SCHEMA'; -export const QUERY_EDITOR_SET_SCHEMA_OPTIONS = - 'QUERY_EDITOR_SET_SCHEMA_OPTIONS'; export const QUERY_EDITOR_SET_TABLE_OPTIONS = 'QUERY_EDITOR_SET_TABLE_OPTIONS'; export const QUERY_EDITOR_SET_TITLE = 'QUERY_EDITOR_SET_TITLE'; export const QUERY_EDITOR_SET_AUTORUN = 'QUERY_EDITOR_SET_AUTORUN'; @@ -922,10 +920,6 @@ export function queryEditorSetSchema(queryEditor, schema) { }; } -export function queryEditorSetSchemaOptions(queryEditor, options) { - return { type: QUERY_EDITOR_SET_SCHEMA_OPTIONS, queryEditor, options }; -} - export function queryEditorSetTableOptions(queryEditor, options) { return { type: QUERY_EDITOR_SET_TABLE_OPTIONS, queryEditor, options }; } diff --git a/superset-frontend/src/SqlLab/actions/sqlLab.test.js b/superset-frontend/src/SqlLab/actions/sqlLab.test.js index 63711550b2485..5d181b3f3fe1d 100644 --- a/superset-frontend/src/SqlLab/actions/sqlLab.test.js +++ b/superset-frontend/src/SqlLab/actions/sqlLab.test.js @@ -44,7 +44,6 @@ describe('async actions', () => { latestQueryId: null, sql: 'SELECT *\nFROM\nWHERE', name: 'Untitled Query 1', - schemaOptions: [{ value: 'main', label: 'main', title: 'main' }], }; let dispatch; diff --git a/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx b/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx index 0dd3385ea57e6..6b00763f19d7e 100644 --- a/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx +++ b/superset-frontend/src/SqlLab/components/AceEditorWrapper/index.tsx @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import React, { useState, useEffect, useRef } from 'react'; +import React, { useState, useEffect, useRef, useMemo } from 'react'; import { useDispatch } from 'react-redux'; import { css, styled } from '@superset-ui/core'; @@ -40,6 +40,7 @@ import { FullSQLEditor as AceEditor, } from 'src/components/AsyncAceEditor'; import useQueryEditor from 'src/SqlLab/hooks/useQueryEditor'; +import { useSchemas } from 'src/hooks/apiResources'; type HotKey = { key: string; @@ -81,6 +82,7 @@ const StyledAceEditor = styled(AceEditor)` } `} `; + const AceEditorWrapper = ({ autocomplete, onBlur = () => {}, @@ -98,14 +100,27 @@ const AceEditorWrapper = ({ 'dbId', 'sql', 'functionNames', - 'schemaOptions', 'tableOptions', 'validationResult', 'schema', ]); + const { data: schemaOptions } = useSchemas({ dbId: queryEditor.dbId }); const currentSql = queryEditor.sql ?? ''; const functionNames = queryEditor.functionNames ?? []; - const schemas = queryEditor.schemaOptions ?? []; + + // Loading schema, table and column names as auto-completable words + const { schemas, schemaWords } = useMemo( + () => ({ + schemas: schemaOptions ?? [], + schemaWords: (schemaOptions ?? []).map(s => ({ + name: s.label, + value: s.value, + score: SCHEMA_AUTOCOMPLETE_SCORE, + meta: 'schema', + })), + }), + [schemaOptions], + ); const tables = queryEditor.tableOptions ?? []; const [sql, setSql] = useState(currentSql); @@ -193,14 +208,7 @@ const AceEditorWrapper = ({ onChange(text); }; - const setAutoCompleter = () => { - // Loading schema, table and column names as auto-completable words - const schemaWords = schemas.map(s => ({ - name: s.label, - value: s.value, - score: SCHEMA_AUTOCOMPLETE_SCORE, - meta: 'schema', - })); + function setAutoCompleter() { const columns = {}; const tableWords = tables.map(t => { @@ -264,7 +272,7 @@ const AceEditorWrapper = ({ })); setWords(words); - }; + } const getAceAnnotations = () => { const { validationResult } = queryEditor; diff --git a/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx b/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx index 684c4ed39c425..b513637b27385 100644 --- a/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx +++ b/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx @@ -78,7 +78,6 @@ const SaveQuery = ({ 'latestQueryId', 'queryLimit', 'schema', - 'schemaOptions', 'selectedText', 'sql', 'tableOptions', diff --git a/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx b/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx index e241e3c2e2c92..0cacdb86caf0c 100644 --- a/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx +++ b/superset-frontend/src/SqlLab/components/SqlEditorLeftBar/index.tsx @@ -36,7 +36,6 @@ import { expandTable, queryEditorSetSchema, queryEditorSetTableOptions, - queryEditorSetSchemaOptions, setDatabases, addDangerToast, resetState, @@ -228,15 +227,6 @@ const SqlEditorLeftBar = ({ [dispatch, queryEditor], ); - const handleSchemasLoad = useCallback( - (options: Array) => { - if (queryEditor) { - dispatch(queryEditorSetSchemaOptions(queryEditor, options)); - } - }, - [dispatch, queryEditor], - ); - const handleDbList = useCallback( (result: DatabaseObject) => { dispatch(setDatabases(result)); @@ -265,7 +255,6 @@ const SqlEditorLeftBar = ({ handleError={handleError} onDbChange={onDbChange} onSchemaChange={handleSchemaChange} - onSchemasLoad={handleSchemasLoad} onTableSelectChange={onTablesChange} onTablesLoad={handleTablesLoad} schema={schema} diff --git a/superset-frontend/src/SqlLab/fixtures.ts b/superset-frontend/src/SqlLab/fixtures.ts index 456a83a3faf1e..fcb0fff8e3d70 100644 --- a/superset-frontend/src/SqlLab/fixtures.ts +++ b/superset-frontend/src/SqlLab/fixtures.ts @@ -188,13 +188,6 @@ export const defaultQueryEditor = { tableOptions: [], functionNames: [], hideLeftBar: false, - schemaOptions: [ - { - value: 'main', - label: 'main', - title: 'main', - }, - ], templateParams: '{}', }; diff --git a/superset-frontend/src/SqlLab/reducers/sqlLab.js b/superset-frontend/src/SqlLab/reducers/sqlLab.js index e3bb196fbcef0..660609a5c3bc3 100644 --- a/superset-frontend/src/SqlLab/reducers/sqlLab.js +++ b/superset-frontend/src/SqlLab/reducers/sqlLab.js @@ -587,18 +587,6 @@ export default function sqlLabReducer(state = {}, action) { ), }; }, - [actions.QUERY_EDITOR_SET_SCHEMA_OPTIONS]() { - return { - ...state, - ...alterUnsavedQueryEditorState( - state, - { - schemaOptions: action.options, - }, - action.queryEditor.id, - ), - }; - }, [actions.QUERY_EDITOR_SET_TABLE_OPTIONS]() { return { ...state, diff --git a/superset-frontend/src/SqlLab/types.ts b/superset-frontend/src/SqlLab/types.ts index 7317ef0789d5a..ab63e1c76080a 100644 --- a/superset-frontend/src/SqlLab/types.ts +++ b/superset-frontend/src/SqlLab/types.ts @@ -40,7 +40,6 @@ export interface QueryEditor { sql: string; remoteId: number | null; tableOptions: any[]; - schemaOptions?: SchemaOption[]; functionNames: string[]; validationResult?: { completed: boolean; diff --git a/superset-frontend/src/SqlLab/utils/emptyQueryResults.test.js b/superset-frontend/src/SqlLab/utils/emptyQueryResults.test.js index 6a441062bea6f..0fcce986819df 100644 --- a/superset-frontend/src/SqlLab/utils/emptyQueryResults.test.js +++ b/superset-frontend/src/SqlLab/utils/emptyQueryResults.test.js @@ -47,9 +47,9 @@ describe('reduxStateToLocalStorageHelper', () => { it('should only return selected keys for query editor', () => { const queryEditors = [defaultQueryEditor]; - expect(Object.keys(queryEditors[0])).toContain('schemaOptions'); + expect(Object.keys(queryEditors[0])).toContain('schema'); const clearedQueryEditors = clearQueryEditors(queryEditors); - expect(Object.keys(clearedQueryEditors)[0]).not.toContain('schemaOptions'); + expect(Object.keys(clearedQueryEditors)[0]).not.toContain('schema'); }); }); diff --git a/superset-frontend/src/components/DatabaseSelector/DatabaseSelector.test.tsx b/superset-frontend/src/components/DatabaseSelector/DatabaseSelector.test.tsx index 57b6a539ae188..5cc552e9b53a1 100644 --- a/superset-frontend/src/components/DatabaseSelector/DatabaseSelector.test.tsx +++ b/superset-frontend/src/components/DatabaseSelector/DatabaseSelector.test.tsx @@ -40,7 +40,6 @@ const createProps = (): DatabaseSelectorProps => ({ handleError: jest.fn(), onDbChange: jest.fn(), onSchemaChange: jest.fn(), - onSchemasLoad: jest.fn(), }); const fakeDatabaseApiResult = { diff --git a/superset-frontend/src/components/DatabaseSelector/index.tsx b/superset-frontend/src/components/DatabaseSelector/index.tsx index d78a94bde60fc..69f0dfdccb331 100644 --- a/superset-frontend/src/components/DatabaseSelector/index.tsx +++ b/superset-frontend/src/components/DatabaseSelector/index.tsx @@ -93,7 +93,6 @@ export interface DatabaseSelectorProps { onDbChange?: (db: DatabaseObject) => void; onEmptyResults?: (searchText?: string) => void; onSchemaChange?: (schema?: string) => void; - onSchemasLoad?: (schemas: Array) => void; readOnly?: boolean; schema?: string; sqlLabMode?: boolean; @@ -126,7 +125,6 @@ export default function DatabaseSelector({ onDbChange, onEmptyResults, onSchemaChange, - onSchemasLoad, readOnly = false, schema, sqlLabMode = false, @@ -230,8 +228,6 @@ export default function DatabaseSelector({ } = useSchemas({ dbId: currentDb?.value, onSuccess: data => { - onSchemasLoad?.(data); - if (data.length === 1) { changeSchema(data[0]); } else if (!data.find(schemaOption => schema === schemaOption.value)) { diff --git a/superset-frontend/src/components/TableSelector/index.tsx b/superset-frontend/src/components/TableSelector/index.tsx index ffb45cc8fed9f..7e243fb33f7df 100644 --- a/superset-frontend/src/components/TableSelector/index.tsx +++ b/superset-frontend/src/components/TableSelector/index.tsx @@ -98,7 +98,6 @@ interface TableSelectorProps { isDatabaseSelectEnabled?: boolean; onDbChange?: (db: DatabaseObject) => void; onSchemaChange?: (schema?: string) => void; - onSchemasLoad?: (schemaOptions: SchemaOption[]) => void; onTablesLoad?: (options: Array) => void; readOnly?: boolean; schema?: string; @@ -160,7 +159,6 @@ const TableSelector: FunctionComponent = ({ isDatabaseSelectEnabled = true, onDbChange, onSchemaChange, - onSchemasLoad, onTablesLoad, readOnly = false, onEmptyResults, @@ -335,7 +333,6 @@ const TableSelector: FunctionComponent = ({ onDbChange={readOnly ? undefined : internalDbChange} onEmptyResults={onEmptyResults} onSchemaChange={readOnly ? undefined : internalSchemaChange} - onSchemasLoad={onSchemasLoad} schema={currentSchema} sqlLabMode={sqlLabMode} isDatabaseSelectEnabled={isDatabaseSelectEnabled && !readOnly} From 3adc8441aa542738181f21fd112e221ca4f31325 Mon Sep 17 00:00:00 2001 From: justin-park Date: Wed, 1 Mar 2023 13:35:58 -0800 Subject: [PATCH 2/3] remove unused schemaOptions --- .../SqlLab/hooks/useQueryEditor/useQueryEditor.test.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/superset-frontend/src/SqlLab/hooks/useQueryEditor/useQueryEditor.test.ts b/superset-frontend/src/SqlLab/hooks/useQueryEditor/useQueryEditor.test.ts index 23de4d68226cf..9e2d57f3a24a0 100644 --- a/superset-frontend/src/SqlLab/hooks/useQueryEditor/useQueryEditor.test.ts +++ b/superset-frontend/src/SqlLab/hooks/useQueryEditor/useQueryEditor.test.ts @@ -30,12 +30,7 @@ const mockStore = configureStore(middlewares); test('returns selected queryEditor values', () => { const { result } = renderHook( () => - useQueryEditor(defaultQueryEditor.id, [ - 'id', - 'name', - 'dbId', - 'schemaOptions', - ]), + useQueryEditor(defaultQueryEditor.id, ['id', 'name', 'dbId', 'schema']), { wrapper: createWrapper({ useRedux: true, @@ -47,7 +42,7 @@ test('returns selected queryEditor values', () => { id: defaultQueryEditor.id, name: defaultQueryEditor.name, dbId: defaultQueryEditor.dbId, - schemaOptions: defaultQueryEditor.schemaOptions, + schema: defaultQueryEditor.schema, }); }); From 4d0f3d7d4f0773bf794ef8d33c45d2c35c625b3a Mon Sep 17 00:00:00 2001 From: justin-park Date: Wed, 1 Mar 2023 13:46:58 -0800 Subject: [PATCH 3/3] remove unused ref --- superset-frontend/src/components/TableSelector/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/superset-frontend/src/components/TableSelector/index.tsx b/superset-frontend/src/components/TableSelector/index.tsx index 7e243fb33f7df..2eef0e404aad7 100644 --- a/superset-frontend/src/components/TableSelector/index.tsx +++ b/superset-frontend/src/components/TableSelector/index.tsx @@ -36,7 +36,6 @@ import RefreshLabel from 'src/components/RefreshLabel'; import CertifiedBadge from 'src/components/CertifiedBadge'; import WarningIconWithTooltip from 'src/components/WarningIconWithTooltip'; import { useToasts } from 'src/components/MessageToasts/withToasts'; -import { SchemaOption } from 'src/SqlLab/types'; import { useTables, Table } from 'src/hooks/apiResources'; import { getClientErrorMessage,