From 5ad0d90038ed12fcd34730b564282f3a024ebdeb Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Fri, 17 Jun 2022 17:58:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20sql=E6=89=A7=E8=A1=8C=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9F=A5=E7=9C=8B=E5=9B=9E=E6=BB=9Asql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mayfly_go_web/src/views/ops/db/DbList.vue | 98 +++++++++++++++---- .../views/ops/db/component/SqlExecDialog.vue | 2 +- mayfly_go_web/src/views/ops/db/enums.ts | 11 +++ server/internal/devops/application/db_app.go | 1 - 4 files changed, 92 insertions(+), 20 deletions(-) create mode 100644 mayfly_go_web/src/views/ops/db/enums.ts diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index 9871f270..7d50162f 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -7,17 +7,10 @@ >删除
- - - - - - - - - 查询 - - + + + + 查询
@@ -137,9 +130,7 @@ - - - + @@ -148,9 +139,9 @@ @@ -162,6 +153,19 @@ + + + + + + + @@ -215,6 +223,7 @@ import { formatByteSize } from '@/common/utils/format'; import DbEdit from './DbEdit.vue'; import CreateTable from './CreateTable.vue'; import { dbApi } from './api'; +import enums from './enums'; import { projectApi } from '../project/api.ts'; import SqlExecBox from './component/SqlExecBox.ts'; export default defineComponent({ @@ -254,10 +263,17 @@ export default defineComponent({ total: 0, query: { dbId: 0, + db: '', + table: '', + type: null, pageNum: 1, pageSize: 12, }, }, + rollbackSqlDialog: { + visible: false, + sql: '', + }, chooseTableName: '', tableInfoDialog: { visible: false, @@ -359,6 +375,9 @@ export default defineComponent({ state.sqlExecLogDialog.total = 0; state.sqlExecLogDialog.query.dbId = 0; state.sqlExecLogDialog.query.pageNum = 1; + state.sqlExecLogDialog.query.table = ''; + state.sqlExecLogDialog.query.db = ''; + state.sqlExecLogDialog.query.type = null; }; const searchSqlExecLog = async () => { @@ -372,6 +391,48 @@ export default defineComponent({ searchSqlExecLog(); }; + const onShowRollbackSql = async (sqlExecLog: any) => { + const columns = await dbApi.columnMetadata.request({ id: sqlExecLog.dbId, db: sqlExecLog.db, tableName: sqlExecLog.table }); + const primaryKey = columns[0].columnName; + const oldValue = JSON.parse(sqlExecLog.oldValue); + + const rollbackSqls = []; + if (sqlExecLog.type == enums.DbSqlExecTypeEnum['UPDATE'].value) { + for (let ov of oldValue) { + const setItems = []; + for (let key in ov) { + if (key == primaryKey) { + continue; + } + setItems.push(`${key} = ${wrapValue(ov[key])}`); + } + rollbackSqls.push(`UPDATE ${sqlExecLog.table} SET ${setItems.join(', ')} WHERE ${primaryKey} = ${wrapValue(ov[primaryKey])};`); + } + } else if (sqlExecLog.type == enums.DbSqlExecTypeEnum['DELETE'].value) { + const columnNames = columns.map((c: any) => c.columnName); + for (let ov of oldValue) { + const values = []; + for (let column of columnNames) { + values.push(wrapValue(ov[column])); + } + rollbackSqls.push(`INSERT INTO ${sqlExecLog.table} (${columnNames.join(', ')}) VALUES (${values.join(', ')});`); + } + } + + state.rollbackSqlDialog.sql = rollbackSqls.join('\n'); + state.rollbackSqlDialog.visible = true; + }; + + /** + * 包装值,如果值类型为number则直接返回,其他则需要使用''包装 + */ + const wrapValue = (val: any) => { + if (typeof val == 'number') { + return val; + } + return `'${val}'`; + }; + const showTableInfo = async (row: any, db: string) => { state.tableInfoDialog.infos = await dbApi.tableInfos.request({ id: row.id, db }); state.dbId = row.id; @@ -441,7 +502,7 @@ export default defineComponent({ return { ...toRefs(state), - // enums, + enums, search, choose, handlePageChange, @@ -452,6 +513,7 @@ export default defineComponent({ onBeforeCloseSqlExecDialog, handleSqlExecPageChange, searchSqlExecLog, + onShowRollbackSql, showTableInfo, closeTableInfo, showColumns, diff --git a/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue b/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue index c00b3ea2..3788e900 100644 --- a/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue +++ b/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue @@ -1,8 +1,8 @@