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 @@
- UPDATE
- DELETE
- INSERT
+ UPDATE
+ DELETE
+ INSERT
@@ -162,6 +153,19 @@
+
+
+ 还原SQL
+
+
+
+
+
+
@@ -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 @@
-
+