Skip to content

Commit 5597db8

Browse files
committed
[fix]: Provide default SQL when SQL formatting is not supported
1 parent 39d512a commit 5597db8

File tree

6 files changed

+175
-13
lines changed

6 files changed

+175
-13
lines changed

packages/base/src/page/DataExportManagement/Create/hooks/__tests__/useCreateExportTaskForm.test.tsx

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,52 @@ describe('test base/DataExport/Create/hooks/useCreateExportTaskForm', () => {
218218
);
219219
});
220220

221+
it('should use sql when language is not supported and originSql is empty in auditAction', async () => {
222+
(isSupportLanguage as jest.Mock).mockImplementation(() => false);
223+
const addDataExportTaskSpy = dataExport.AddDataExportTask();
224+
const updateAuditLoadingSpy = jest.fn();
225+
const updateFormValuesSpy = jest.fn();
226+
const updateTaskIDsSpy = jest.fn();
227+
228+
mockUseCreateDataExportReduxManage({
229+
auditLoading: false,
230+
updateAuditLoading: updateAuditLoadingSpy,
231+
updateFormValues: updateFormValuesSpy,
232+
updateTaskIDs: updateTaskIDsSpy
233+
});
234+
235+
const { result } = renderHook(() => useCreateExportTaskForm());
236+
237+
render(<CustomCom {...result.current} dbType="unsupported_db" />);
238+
fireEvent.change(screen.getByLabelText('name'), {
239+
target: { value: 'name' }
240+
});
241+
fireEvent.change(screen.getByLabelText('dbService'), {
242+
target: { value: '100' }
243+
});
244+
fireEvent.change(screen.getByLabelText('schema'), {
245+
target: { value: 'schema' }
246+
});
247+
fireEvent.change(screen.getByLabelText('sql'), {
248+
target: { value: 'select 1;' }
249+
});
250+
251+
fireEvent.click(screen.getByText('auditAction'));
252+
await act(async () => jest.advanceTimersByTime(0));
253+
254+
expect(addDataExportTaskSpy).toHaveBeenCalledWith({
255+
project_uid: mockProjectInfo.projectID,
256+
data_export_tasks: [
257+
{
258+
database_name: 'schema',
259+
db_service_uid: '100',
260+
export_sql: 'select 1;'
261+
}
262+
]
263+
});
264+
await act(async () => jest.advanceTimersByTime(3000));
265+
});
266+
221267
it('should rest all forms when executed "resetAllForm"', async () => {
222268
const { result } = renderHook(() => useCreateExportTaskForm());
223269

packages/base/src/page/DataExportManagement/Create/hooks/useCreateExportTaskForm.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,19 @@ const useCreateExportTaskForm = () => {
5959

6060
updateAuditLoading(true);
6161

62-
const sql = isSupportLanguage(sourceValues.dbType)
63-
? methodValues.sql
64-
: methodValues.originSql;
62+
const getSql = () => {
63+
if (isSupportLanguage(sourceValues.dbType)) {
64+
return methodValues.sql;
65+
}
66+
return methodValues.originSql || methodValues.sql;
67+
};
6568
return DataExportTask.AddDataExportTask({
6669
project_uid: projectID,
6770
data_export_tasks: [
6871
{
6972
database_name: sourceValues.schema,
7073
db_service_uid: sourceValues.dbService,
71-
export_sql: sql
74+
export_sql: getSql()
7275
}
7376
]
7477
})

packages/sqle/src/page/SqlAudit/Create/index.test.tsx

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,56 @@ describe('sqle/SqlAudit/Create', () => {
562562
expect(navigateSpy).toHaveBeenCalledTimes(1);
563563
});
564564

565+
it('should use sql when language is not supported and originSql is empty', async () => {
566+
getInstanceSpy.mockImplementation(() =>
567+
createSpySuccessResponse({
568+
data: {
569+
db_type: 'TiDB'
570+
}
571+
})
572+
);
573+
const { baseElement } = sqleSuperRender(customRender());
574+
await act(async () => jest.advanceTimersByTime(3000));
575+
576+
fireEvent.mouseDown(getBySelector('#instanceName', baseElement));
577+
await act(async () => jest.advanceTimersByTime(300));
578+
fireEvent.click(
579+
getBySelector('div[title="tidb-1(10.186.62.17:4000)"]', baseElement)
580+
);
581+
await act(async () => jest.advanceTimersByTime(3000));
582+
583+
fireEvent.mouseDown(getBySelector('#instanceSchema', baseElement));
584+
await act(async () => jest.advanceTimersByTime(0));
585+
fireEvent.click(getBySelector('div[title="testSchema"]', baseElement));
586+
await act(async () => jest.advanceTimersByTime(0));
587+
588+
const sqlEditor = queryBySelector('.custom-monaco-editor', baseElement)!;
589+
const sqlValue = 'SELECT * FROM test;';
590+
await act(async () => {
591+
fireEvent.input(sqlEditor, {
592+
target: { value: sqlValue }
593+
});
594+
await jest.advanceTimersByTime(100);
595+
});
596+
597+
fireEvent.click(screen.getByText('审 核'));
598+
await act(async () => jest.advanceTimersByTime(3000));
599+
600+
expect(createSQLAuditRecordSpy).toHaveBeenCalledWith({
601+
db_type: undefined,
602+
git_http_url: undefined,
603+
git_user_name: undefined,
604+
git_user_password: undefined,
605+
input_mybatis_xml_file: undefined,
606+
input_sql_file: undefined,
607+
input_zip_file: undefined,
608+
instance_name: 'tidb-1',
609+
instance_schema: 'testSchema',
610+
project_name: 'default',
611+
sqls: sqlValue
612+
});
613+
});
614+
565615
it('create business tags', async () => {
566616
const { baseElement } = sqleSuperRender(customRender());
567617
await act(async () => jest.advanceTimersByTime(3000));

packages/sqle/src/page/SqlAudit/Create/index.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ const SqlAuditCreate = () => {
2929
const [auditLoading, setAuditLoading] = useState(false);
3030
const auditSQL: SQLInfoFormProps['submit'] = async (values) => {
3131
const baseValues = await baseForm.validateFields();
32-
const sql = isSupportLanguage(values.dbType)
33-
? values.sql
34-
: values.originSql;
35-
32+
const getSql = () => {
33+
if (isSupportLanguage(values.dbType)) {
34+
return values.sql;
35+
}
36+
return values.originSql || values.sql;
37+
};
3638
const params: ICreateSQLAuditRecordV1Params = {
3739
project_name: projectName,
38-
sqls: sql,
40+
sqls: getSql(),
3941
input_sql_file: values.sqlFile?.[0],
4042
input_mybatis_xml_file: values.mybatisFile?.[0],
4143
input_zip_file: values.zipFile?.[0],

packages/sqle/src/page/SqlOptimization/Create/index.test.tsx

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,63 @@ describe('sqle/SqlOptimization/Create', () => {
547547
).toBeInTheDocument();
548548
});
549549

550+
it('should use sql when language is not supported and originSql is empty', async () => {
551+
const { baseElement } = sqleSuperRender(customRender());
552+
await act(async () => jest.advanceTimersByTime(3000));
553+
554+
fireEvent.mouseDown(getBySelector('#instanceName', baseElement));
555+
await act(async () => jest.advanceTimersByTime(300));
556+
fireEvent.click(
557+
getBySelector('div[title="tidb-1(10.186.62.17:4000)"]', baseElement)
558+
);
559+
await act(async () => jest.advanceTimersByTime(3000));
560+
561+
fireEvent.mouseDown(getBySelector('#instanceSchema', baseElement));
562+
await act(async () => jest.advanceTimersByTime(300));
563+
fireEvent.click(getBySelector('div[title="testSchema"]', baseElement));
564+
await act(async () => jest.advanceTimersByTime(300));
565+
566+
const sqlEditor = queryBySelector('.custom-monaco-editor', baseElement)!;
567+
const sqlValue = 'SELECT * FROM test;';
568+
await act(async () => {
569+
fireEvent.input(sqlEditor, {
570+
target: { value: sqlValue }
571+
});
572+
await jest.advanceTimersByTime(100);
573+
});
574+
575+
fireEvent.click(getBySelector('.create-optimization-button'));
576+
await act(async () => jest.advanceTimersByTime(0));
577+
578+
expect(optimizeSQLReqSpy).toHaveBeenCalledWith({
579+
optimization_name: 'UI20240101120000000',
580+
git_http_url: undefined,
581+
git_user_name: undefined,
582+
git_user_password: undefined,
583+
input_mybatis_xml_file: undefined,
584+
input_sql_file: undefined,
585+
input_zip_file: undefined,
586+
instance_name: 'tidb-1',
587+
schema_name: 'testSchema',
588+
project_name: mockProjectInfo.projectName,
589+
sql_content: sqlValue,
590+
db_type: 'TiDB',
591+
metadata: undefined,
592+
explain_info: undefined
593+
});
594+
await act(async () => jest.advanceTimersByTime(3000));
595+
expect(mockDispatch).toHaveBeenCalledTimes(2);
596+
expect(mockDispatch).toHaveBeenCalledWith({
597+
type: 'sqlOptimization/updateSubmitLoading',
598+
payload: {
599+
loading: false
600+
}
601+
});
602+
expect(
603+
screen.getByText('优化进行中,预计5-10分钟后完成。感谢您的耐心等待。')
604+
).toBeInTheDocument();
605+
});
606+
550607
it('reset form values', async () => {
551608
const { baseElement } = sqleSuperRender(customRender());
552609
await act(async () => jest.advanceTimersByTime(3000));

packages/sqle/src/page/SqlOptimization/Create/index.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,21 @@ const SqlOptimizationCreate = () => {
5656
sqlInfoValue.optimizationType === OptimizationTypeEnum.online
5757
? sqlInfoValue.sql
5858
: sqlInfoValue.offlineSql;
59-
const sql = isSupportLanguage(sqlInfoValue.dbType)
60-
? formattedSql
61-
: sqlInfoValue.originSql;
59+
60+
const getSql = () => {
61+
if (isSupportLanguage(sqlInfoValue.dbType)) {
62+
return formattedSql;
63+
}
64+
return sqlInfoValue.originSql || formattedSql;
65+
};
6266
sqlOptimization
6367
.SQLOptimizeV2({
6468
optimization_name: baseValue.optimizationName,
6569
project_name: projectName,
6670
instance_name: sqlInfoValue.instanceName,
6771
schema_name: sqlInfoValue.instanceSchema,
6872
db_type: sqlInfoValue.dbType,
69-
sql_content: sql,
73+
sql_content: getSql(),
7074
metadata: sqlInfoValue.tableStructure,
7175
explain_info: sqlInfoValue.executionPlan,
7276
input_sql_file: sqlInfoValue.sqlFile?.[0],

0 commit comments

Comments
 (0)