From 76475e807e89d924d0177ddb5d0037861d3a75fc Mon Sep 17 00:00:00 2001 From: zongyangleo Date: Fri, 1 Mar 2024 04:03:03 +0000 Subject: [PATCH] =?UTF-8?q?!106=20feat=EF=BC=9A=E6=95=B0=E6=8D=AE=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=94=AF=E6=8C=81=E5=94=AF=E4=B8=80=E9=94=AE=E5=86=B2?= =?UTF-8?q?=E7=AA=81=E7=AD=96=E7=95=A5=20*=20refactor=EF=BC=9Asql=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=20*=20fix:=20=E8=A1=A8=E6=A0=BC=E5=8F=B3=E9=94=AE?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=8F=9C=E5=8D=95=E6=8D=A2=E8=A1=8C=E7=AC=A6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20*=20feat=EF=BC=9A=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=94=AF=E6=8C=81=E5=94=AF=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mayfly_go_web/src/common/utils/export.ts | 14 +- mayfly_go_web/src/views/ops/db/DbEdit.vue | 10 +- .../src/views/ops/db/InstanceList.vue | 2 +- mayfly_go_web/src/views/ops/db/SqlExec.vue | 3 +- .../src/views/ops/db/SyncTaskEdit.vue | 73 +++++--- .../ops/db/component/table/DbTableData.vue | 1 + .../db/component/table/DbTableDataForm.vue | 1 + .../ops/db/component/table/DbTableDataOp.vue | 2 +- .../ops/db/component/table/DbTableOp.vue | 23 ++- mayfly_go_web/src/views/ops/db/db.ts | 60 +++--- .../src/views/ops/db/dialect/dm_dialect.ts | 51 ++++- .../src/views/ops/db/dialect/gauss_dialect.ts | 15 +- .../src/views/ops/db/dialect/index.ts | 37 +++- .../src/views/ops/db/dialect/mssql_dialect.ts | 87 +++++++-- .../src/views/ops/db/dialect/mysql_dialect.ts | 43 ++++- .../views/ops/db/dialect/oracle_dialect.ts | 65 ++++++- .../views/ops/db/dialect/postgres_dialect.ts | 23 ++- .../views/ops/db/dialect/sqlite_dialect.ts | 22 ++- server/internal/db/api/form/db_data_sync.go | 11 +- .../internal/db/application/db_data_sync.go | 43 +++-- server/internal/db/dbm/dbi/db_type.go | 2 + server/internal/db/dbm/dbi/dialect.go | 11 +- server/internal/db/dbm/dbi/meta.go | 2 +- server/internal/db/dbm/dm/dialect.go | 109 ++++++++++- server/internal/db/dbm/mssql/dialect.go | 157 ++++++++++++++-- server/internal/db/dbm/mssql/meta.go | 8 +- server/internal/db/dbm/mysql/dialect.go | 32 +++- server/internal/db/dbm/oracle/dialect.go | 122 ++++++++++-- server/internal/db/dbm/oracle/meta.go | 2 +- server/internal/db/dbm/postgres/dialect.go | 174 ++++++++++++++---- server/internal/db/dbm/postgres/meta.go | 5 +- server/internal/db/dbm/sqlite/dialect.go | 15 +- .../internal/db/domain/entity/db_data_sync.go | 11 +- server/internal/machine/mcm/sshtunnel.go | 9 +- server/resources/data/mayfly-go.sqlite | Bin 237568 -> 253952 bytes .../resources/script/sql/mayfly-go-sqlite.sql | 83 +++++++++ server/resources/script/sql/mayfly-go.sql | 1 + server/resources/script/sql/v1.7/v1.7.4.sql | 45 ++--- 38 files changed, 1117 insertions(+), 257 deletions(-) diff --git a/mayfly_go_web/src/common/utils/export.ts b/mayfly_go_web/src/common/utils/export.ts index f4430477..c1a87d27 100644 --- a/mayfly_go_web/src/common/utils/export.ts +++ b/mayfly_go_web/src/common/utils/export.ts @@ -7,24 +7,22 @@ export function exportCsv(filename: string, columns: string[], datas: []) { for (let column of columns) { let val: any = data[column]; if (val == null || val == undefined) { - dataValueArr.push(''); - continue; - } + val = ''; + } else if (val && typeof val == 'string') { + // 替换换行符 + val = val.replace(/[\r\n]/g, '\\n'); - if (typeof val == 'string' && val) { // csv格式如果有逗号,整体用双引号括起来;如果里面还有双引号就替换成两个双引号,这样导出来的格式就不会有问题了 if (val.indexOf(',') != -1) { // 如果还有双引号,先将双引号转义,避免两边加了双引号后转义错误 if (val.indexOf('"') != -1) { - val = val.replace(/\"/g, '""'); + val = val.replace(/"/g, '""'); } // 再将逗号转义 val = `"${val}"`; } - dataValueArr.push(val + '\t'); - } else { - dataValueArr.push(val + '\t'); } + dataValueArr.push(String(val)); } cvsData.push(dataValueArr); } diff --git a/mayfly_go_web/src/views/ops/db/DbEdit.vue b/mayfly_go_web/src/views/ops/db/DbEdit.vue index 9965dc93..af3ea840 100644 --- a/mayfly_go_web/src/views/ops/db/DbEdit.vue +++ b/mayfly_go_web/src/views/ops/db/DbEdit.vue @@ -95,6 +95,7 @@ import { ElMessage } from 'element-plus'; import TagTreeSelect from '../component/TagTreeSelect.vue'; import type { CheckboxValueType } from 'element-plus'; import ProcdefSelectFormItem from '@/views/flow/components/ProcdefSelectFormItem.vue'; +import { DbType } from '@/views/ops/db/dialect'; const props = defineProps({ visible: { @@ -196,7 +197,14 @@ const changeInstance = () => { const getAllDatabase = async () => { if (state.form.instanceId > 0) { - state.allDatabases = await dbApi.getAllDatabase.request({ instanceId: state.form.instanceId }); + let dbs = await dbApi.getAllDatabase.request({ instanceId: state.form.instanceId }); + state.allDatabases = dbs; + + // 如果是oracle,且没查出数据库列表,则取实例sid + let instance = state.instances.find((item: any) => item.id === state.form.instanceId); + if (instance && instance.type === DbType.oracle && dbs.length === 0) { + state.allDatabases = [instance.sid]; + } } }; diff --git a/mayfly_go_web/src/views/ops/db/InstanceList.vue b/mayfly_go_web/src/views/ops/db/InstanceList.vue index 8631fd02..f48237fc 100644 --- a/mayfly_go_web/src/views/ops/db/InstanceList.vue +++ b/mayfly_go_web/src/views/ops/db/InstanceList.vue @@ -61,7 +61,7 @@