From ce8e23145a931697f5a993ce0e2923fec77ced78 Mon Sep 17 00:00:00 2001 From: inrgihc Date: Sat, 17 Sep 2022 22:39:22 +0800 Subject: [PATCH] =?UTF-8?q?I5QFVD:=E6=94=AF=E6=8C=81=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E8=A1=A8=E8=BF=81=E7=A7=BB=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 +-- dbswitch-admin-ui/src/views/task/create.vue | 84 +++++++++++++++--- dbswitch-admin-ui/src/views/task/update.vue | 85 ++++++++++++++++--- .../converter/AssignmentDetailConverter.java | 1 + .../privateapi/DbConnectionController.java | 10 ++- .../publicapi/StructureController.java | 4 +- .../admin/entity/AssignmentConfigEntity.java | 4 + .../model/request/AssigmentCreateRequest.java | 7 +- .../model/request/AssigmentUpdateRequest.java | 7 +- .../response/AssignmentDetailResponse.java | 4 + .../admin/service/DbConnectionService.java | 19 ++++- .../admin/service/JobExecutorService.java | 13 +-- .../gitee/dbswitch/admin/util/CacheUtils.java | 2 +- .../dbswitch/admin/util/CronExprUtils.java | 4 +- .../gitee/dbswitch/admin/util/JDBCURL.java | 2 +- .../gitee/dbswitch/admin/util/LockUtils.java | 65 ++++++++++++++ .../gitee/dbswitch/admin/util/PageUtils.java | 2 +- .../dbswitch/admin/util/ServletUtils.java | 2 +- .../dbswitch/admin/util/SpringUtils.java | 2 +- .../gitee/dbswitch/admin/util/TokenUtils.java | 2 +- .../gitee/dbswitch/admin/util/UuidUtils.java | 2 +- .../db/migration/V1_0_5__system-ddl.sql | 2 + ...baseTypeEnum.java => ProductTypeEnum.java} | 18 ++-- .../common/util/DatabaseAwareUtils.java | 64 +++++++------- .../core/database/AbstractDatabase.java | 6 +- .../core/database/DatabaseFactory.java | 40 ++++----- .../core/database/IDatabaseInterface.java | 4 +- .../core/database/impl/DatabaseDB2Impl.java | 6 +- .../core/database/impl/DatabaseDmImpl.java | 6 +- .../database/impl/DatabaseGbase8aImpl.java | 6 +- .../database/impl/DatabaseGreenplumImpl.java | 6 +- .../core/database/impl/DatabaseHiveImpl.java | 8 +- .../database/impl/DatabaseKingbaseImpl.java | 6 +- .../database/impl/DatabaseMariaDBImpl.java | 8 +- .../core/database/impl/DatabaseMysqlImpl.java | 16 ++-- .../database/impl/DatabaseOracleImpl.java | 7 +- .../core/database/impl/DatabaseOscarImpl.java | 6 +- .../database/impl/DatabasePostgresImpl.java | 6 +- .../database/impl/DatabaseSqliteImpl.java | 6 +- .../impl/DatabaseSqlserver2000Impl.java | 6 +- .../database/impl/DatabaseSqlserverImpl.java | 6 +- .../database/impl/DatabaseSybaseImpl.java | 8 +- .../core/model/ColumnDescription.java | 8 +- .../dbswitch/core/model/ColumnMetaData.java | 14 +-- .../core/model/DatabaseDescription.java | 8 +- .../service/IMetaDataByDatasourceService.java | 4 +- .../IMetaDataByDescriptionService.java | 4 +- .../core/service/IMetaDataByJdbcService.java | 6 +- .../impl/MetaDataByDataSourceServiceImpl.java | 6 +- .../MetaDataByDescriptionServiceImpl.java | 4 +- .../impl/MetaDataByJdbcServiceImpl.java | 10 +-- .../dbswitch/core/util/GenerateSqlUtils.java | 10 +-- .../dbswitch/core/util/PostgresUtils.java | 4 +- .../entity/SourceDataSourceProperties.java | 2 + .../data/handler/MigrationHandler.java | 8 +- .../data/service/MigrationService.java | 10 ++- dbswitch-data/src/main/resources/config.yml | 12 +-- .../database/DatabaseOperatorFactory.java | 38 ++++----- .../dbsynch/DatabaseSynchronizeFactory.java | 36 ++++---- .../dbwriter/DatabaseWriterFactory.java | 38 ++++----- .../sql/service/ISqlConvertService.java | 12 +-- .../impl/CalciteSqlConvertServiceImpl.java | 16 ++-- .../impl/MyselfSqlGeneratorServiceImpl.java | 22 ++--- 63 files changed, 545 insertions(+), 302 deletions(-) create mode 100644 dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/LockUtils.java create mode 100644 dbswitch-admin/src/main/resources/db/migration/V1_0_5__system-ddl.sql rename dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/{DatabaseTypeEnum.java => ProductTypeEnum.java} (83%) diff --git a/README.md b/README.md index a3ea3e3b..baa51b15 100644 --- a/README.md +++ b/README.md @@ -132,8 +132,8 @@ sh ./docker-maven-build.sh dbswitch: source: # source database connection information - ## support MySQL/MariaDB/DB2/DM/Kingbase8/Oracle/SQLServer/PostgreSQL/Greenplum - ## support mutiple source database connection + ## support MySQL/MariaDB/DB2/DM/Kingbase8/Oracle/SQLServer/PostgreSQL/Greenplum etc. + ## support multiple source database connection - url: jdbc:oracle:thin:@172.17.2.10:1521:ORCL driver-class-name: 'oracle.jdbc.driver.OracleDriver' username: 'system' @@ -143,20 +143,22 @@ dbswitch: fetch-size: 10000 ## schema name for query source schemas, separate by ',' source-schema: 'TANG' + ## table type which include or exclude,option: TABLE,VIEW + table-type: 'TABLE' ## table name include from table lists, separate by ',' source-includes: '' ## table name exclude from table lists, separate by ',' source-excludes: '' ## table name convert mapper by regular expression regex-table-mapper: - - 'from-pattern': '^' - 'to-value': 'T_' + - from-pattern: '^' + to-value: 'T_' ## columns name convert mapper by regular expression like regex-table-mapper regex-column-mapper: target: # target database connection information - ## Best support for Oracle/PostgreSQL/Greenplum/DM/Kingbase8 + ## Best support for Oracle/PostgreSQL/Greenplum/DM etc. url: jdbc:postgresql://172.17.2.10:5432/test driver-class-name: org.postgresql.Driver username: tang @@ -183,6 +185,7 @@ dbswitch: | dbswitch.source[i].password | 来源端连接帐号密码 | tangyibo | 无 | | dbswitch.source[i].fetch-size | 来源端数据库查询时的fetch_size设置 | 10000 | 需要大于100有效 | | dbswitch.source[i].source-schema | 来源端的schema名称 | dbo,test | 多个之间用英文逗号分隔 | +| dbswitch.source[i].table-type | 来源端表的类型 | TABLE | 可选值为:TABLE、VIEW ,分别代表物理表和试图表 | | dbswitch.source[i].source-includes | 来源端schema下的表中需要包含的表名称 | users1,orgs1 | 支持多个表(多个之间用英文逗号分隔);支持支持正则表达式(不能含有逗号) | | dbswitch.source[i].source-excludes | 来源端schema下的表中需要过滤的表名称 | users,orgs | 不包含的表名称,多个之间用英文逗号分隔 | | dbswitch.source[i].regex-table-mapper | 基于正则表达式的表名称映射关系 | [{"from-pattern": "^","to-value": "T_"}] | 为list类型,元素存在顺序关系 | diff --git a/dbswitch-admin-ui/src/views/task/create.vue b/dbswitch-admin-ui/src/views/task/create.vue index 695a143a..eb122459 100644 --- a/dbswitch-admin-ui/src/views/task/create.vue +++ b/dbswitch-admin-ui/src/views/task/create.vue @@ -92,6 +92,20 @@ :value="item"> + + + + + + {{createform.cronExpression}} [{{createform.sourceConnectionId}}]{{sourceConnection.name}} {{createform.sourceSchema}} + {{createform.tableType}} 包含表 @@ -434,6 +449,7 @@ export default { cronExpression: "", sourceConnectionId: '请选择', sourceSchema: "", + tableType: "TABLE", includeOrExclude: "", sourceTables: [], tableNameMapper: [], @@ -476,6 +492,14 @@ export default { trigger: "change" } ], + tableType: [ + { + required: true, + type: 'string', + message: "表类型必须选择", + trigger: "change" + } + ], includeOrExclude: [ { required: true, @@ -584,16 +608,55 @@ export default { }, selectCreateChangedSourceSchema: function (value) { this.sourceSchemaTables = []; - this.$http.get( - "/dbswitch/admin/api/v1/connection/tables/get/" + this.createform.sourceConnectionId + "?schema=" + value - ).then(res => { - if (0 === res.data.code) { - this.sourceSchemaTables = res.data.data; - } else { - this.$message.error("查询来源端数据库在制定Schema下的表列表失败," + res.data.message); - this.sourceSchemaTables = []; - } - }); + if ('TABLE' === this.createform.tableType) { + this.$http.get( + "/dbswitch/admin/api/v1/connection/tables/get/" + this.createform.sourceConnectionId + "?schema=" + value + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的物理表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } else { + this.$http.get( + "/dbswitch/admin/api/v1/connection/views/get/" + this.createform.sourceConnectionId + "?schema=" + value + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的视图表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } + }, + selectCreateChangedTableType: function (value) { + this.sourceSchemaTables = []; + if ('TABLE' === value) { + this.$http.get( + "/dbswitch/admin/api/v1/connection/tables/get/" + this.createform.sourceConnectionId + "?schema=" + this.createform.sourceSchema + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的物理表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } else { + this.$http.get( + "/dbswitch/admin/api/v1/connection/views/get/" + this.createform.sourceConnectionId + "?schema=" + this.createform.sourceSchema + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的视图表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } }, selectChangedTargetConnection: function (value) { this.targetConnection = this.connectionNameList.find( @@ -752,6 +815,7 @@ export default { config: { sourceConnectionId: this.createform.sourceConnectionId, sourceSchema: this.createform.sourceSchema, + tableType: this.createform.tableType, includeOrExclude: this.createform.includeOrExclude, sourceTables: this.createform.sourceTables, targetConnectionId: this.createform.targetConnectionId, diff --git a/dbswitch-admin-ui/src/views/task/update.vue b/dbswitch-admin-ui/src/views/task/update.vue index c1443c50..090e951b 100644 --- a/dbswitch-admin-ui/src/views/task/update.vue +++ b/dbswitch-admin-ui/src/views/task/update.vue @@ -92,6 +92,20 @@ :value="item"> + + + + + + {{updateform.cronExpression}} [{{updateform.sourceConnectionId}}]{{sourceConnection.name}} {{updateform.sourceSchema}} + {{updateform.tableType}} 包含表 @@ -440,6 +455,7 @@ export default { cronExpression: "", sourceConnectionId: '请选择', sourceSchema: "", + tableType:"TABLE", includeOrExclude: "", sourceTables: [], tableNameMapper: [], @@ -482,6 +498,14 @@ export default { trigger: "change" } ], + tableType: [ + { + required: true, + type: 'string', + message: "表类型必须选择", + trigger: "change" + } + ], includeOrExclude: [ { required: true, @@ -589,6 +613,7 @@ export default { cronExpression: detail.cronExpression, sourceConnectionId: detail.configuration.sourceConnectionId, sourceSchema: detail.configuration.sourceSchema, + tableType: detail.configuration.tableType, includeOrExclude: detail.configuration.includeOrExclude, sourceTables: detail.configuration.sourceTables, tableNameMapper: detail.configuration.tableNameMapper, @@ -632,16 +657,55 @@ export default { }, selectUpdateChangedSourceSchema: function (value) { this.sourceSchemaTables = []; - this.$http.get( - "/dbswitch/admin/api/v1/connection/tables/get/" + this.updateform.sourceConnectionId + "?schema=" + value - ).then(res => { - if (0 === res.data.code) { - this.sourceSchemaTables = res.data.data; - } else { - this.$message.error("查询来源端数据库在制定Schema下的表列表失败," + res.data.message); - this.sourceSchemaTables = []; - } - }); + if ('TABLE' === this.updateform.tableType) { + this.$http.get( + "/dbswitch/admin/api/v1/connection/tables/get/" + this.updateform.sourceConnectionId + "?schema=" + value + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的物理表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } else { + this.$http.get( + "/dbswitch/admin/api/v1/connection/views/get/" + this.updateform.sourceConnectionId + "?schema=" + value + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的视图表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } + }, + selectUpdateChangedTableType: function (value) { + this.sourceSchemaTables = []; + if ('TABLE' === value) { + this.$http.get( + "/dbswitch/admin/api/v1/connection/tables/get/" + this.updateform.sourceConnectionId + "?schema=" + this.updateform.sourceSchema + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的物理表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } else { + this.$http.get( + "/dbswitch/admin/api/v1/connection/views/get/" + this.updateform.sourceConnectionId + "?schema=" + this.updateform.sourceSchema + ).then(res => { + if (0 === res.data.code) { + this.sourceSchemaTables = res.data.data; + } else { + this.$message.error("查询来源端数据库在指定Schema下的视图表列表失败," + res.data.message); + this.sourceSchemaTables = []; + } + }); + } }, selectChangedTargetConnection: function (value) { this.targetConnection = this.connectionNameList.find( @@ -809,6 +873,7 @@ export default { config: { sourceConnectionId: this.updateform.sourceConnectionId, sourceSchema: this.updateform.sourceSchema, + tableType: this.updateform.tableType, includeOrExclude: this.updateform.includeOrExclude, sourceTables: this.updateform.sourceTables, targetConnectionId: this.updateform.targetConnectionId, diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/converter/AssignmentDetailConverter.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/converter/AssignmentDetailConverter.java index 757dcfe0..d0cc8740 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/converter/AssignmentDetailConverter.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/converter/AssignmentDetailConverter.java @@ -42,6 +42,7 @@ public class AssignmentDetailConverter extends config.setSourceConnectionId(srcConn.getId()); config.setSourceConnectionName(srcConn.getName()); config.setSourceSchema(taskConfig.getSourceSchema()); + config.setTableType(taskConfig.getTableType()); config.setIncludeOrExclude(taskConfig.getExcluded() ? IncludeExcludeEnum.EXCLUDE : IncludeExcludeEnum.INCLUDE); diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/privateapi/DbConnectionController.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/privateapi/DbConnectionController.java index 61728687..329b8c6a 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/privateapi/DbConnectionController.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/privateapi/DbConnectionController.java @@ -79,13 +79,21 @@ public class DbConnectionController { } @TokenCheck - @ApiOperation(value = "查询连接在制定Schema下的所有表列表") + @ApiOperation(value = "查询连接在制定Schema下的所有物理表列表") @GetMapping(value = "/tables/get/{id}", produces = MediaType.APPLICATION_JSON_VALUE) public Result getSchemaTables(@PathVariable("id") Long id, @RequestParam("schema") String schema) { return databaseConnectionService.getSchemaTables(id, schema); } + @TokenCheck + @ApiOperation(value = "查询连接在制定Schema下的所有视图表列表") + @GetMapping(value = "/views/get/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + public Result getSchemaViews(@PathVariable("id") Long id, + @RequestParam("schema") String schema) { + return databaseConnectionService.getSchemaViews(id, schema); + } + @TokenCheck @LogOperate(name = "数据库连接", description = "'添加的数据库连接标题为:'+#request.name") @ApiOperation(value = "添加连接") diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/publicapi/StructureController.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/publicapi/StructureController.java index f12bed2f..995f7704 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/publicapi/StructureController.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/controller/publicapi/StructureController.java @@ -13,7 +13,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.gitee.dbswitch.admin.common.response.Result; import com.gitee.dbswitch.admin.config.SwaggerConfig; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.model.ColumnDescription; import com.gitee.dbswitch.core.model.DatabaseDescription; import com.gitee.dbswitch.core.model.TableDescription; @@ -395,7 +395,7 @@ public class StructureController { List columnDescs = migrationService .queryTableColumnMeta(src_model, src_table); List primaryKeys = migrationService.queryTablePrimaryKeys(src_model, src_table); - DatabaseTypeEnum targetDatabaseType = DatabaseTypeEnum.valueOf(target.trim().toUpperCase()); + ProductTypeEnum targetDatabaseType = ProductTypeEnum.valueOf(target.trim().toUpperCase()); String sql = migrationService .getDDLCreateTableSQL(targetDatabaseType, columnDescs, primaryKeys, dest_model, dest_table, false); diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/entity/AssignmentConfigEntity.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/entity/AssignmentConfigEntity.java index ce57a735..98c077a0 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/entity/AssignmentConfigEntity.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/entity/AssignmentConfigEntity.java @@ -12,6 +12,7 @@ package com.gitee.dbswitch.admin.entity; import com.gitee.dbswitch.admin.handler.ListPatternHandler; import com.gitee.dbswitch.admin.handler.ListTypeHandler; import com.gitee.dbswitch.common.entity.PatternMapper; +import com.gitee.dbswitch.common.type.DBTableType; import java.sql.Timestamp; import java.util.List; import javax.persistence.Column; @@ -43,6 +44,9 @@ public class AssignmentConfigEntity { @Column(name = "source_schema") private String sourceSchema; + @Column(name = "table_type") + private DBTableType tableType; + @Column(name = "source_tables") @ColumnType(typeHandler = ListTypeHandler.class) private List sourceTables; diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentCreateRequest.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentCreateRequest.java index 788ca5dd..3f245cb1 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentCreateRequest.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentCreateRequest.java @@ -17,6 +17,7 @@ import com.gitee.dbswitch.admin.type.IncludeExcludeEnum; import com.gitee.dbswitch.admin.type.ScheduleModeEnum; import com.gitee.dbswitch.admin.util.CronExprUtils; import com.gitee.dbswitch.common.entity.PatternMapper; +import com.gitee.dbswitch.common.type.DBTableType; import com.gitee.dbswitch.common.util.PatterNameUtils; import java.util.List; import java.util.Objects; @@ -41,6 +42,7 @@ public class AssigmentCreateRequest { private Long sourceConnectionId; private String sourceSchema; + private DBTableType tableType; private IncludeExcludeEnum includeOrExclude; private List sourceTables; private Long targetConnectionId; @@ -59,7 +61,7 @@ public class AssigmentCreateRequest { assignment.setDescription(description); assignment.setScheduleMode(scheduleMode); if (ScheduleModeEnum.SYSTEM_SCHEDULED == this.getScheduleMode()) { - CronExprUtils.checkCronExpressionValid(this.getCronExpression(), 120); + CronExprUtils.checkCronExpressionValid(this.getCronExpression(), CronExprUtils.MIN_INTERVAL_SECONDS); assignment.setCronExpression(this.getCronExpression()); } @@ -67,7 +69,7 @@ public class AssigmentCreateRequest { } public AssignmentConfigEntity toAssignmentConfig(Long assignmentId) { - if (config.getSourceConnectionId().equals(config.getTargetConnectionId())) { + if (Objects.equals(config.getSourceConnectionId(), config.getTargetConnectionId())) { throw new DbswitchException(ResultCode.ERROR_INVALID_ASSIGNMENT_CONFIG, "源端与目标端不能相同"); } @@ -75,6 +77,7 @@ public class AssigmentCreateRequest { assignmentConfigEntity.setAssignmentId(assignmentId); assignmentConfigEntity.setSourceConnectionId(this.getConfig().getSourceConnectionId()); assignmentConfigEntity.setSourceSchema(this.getConfig().getSourceSchema()); + assignmentConfigEntity.setTableType(this.getConfig().getTableType()); assignmentConfigEntity.setSourceTables(this.getConfig().getSourceTables()); assignmentConfigEntity.setExcluded( this.getConfig().getIncludeOrExclude() == IncludeExcludeEnum.EXCLUDE diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentUpdateRequest.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentUpdateRequest.java index dd4704ad..5499d5a4 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentUpdateRequest.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/request/AssigmentUpdateRequest.java @@ -17,6 +17,7 @@ import com.gitee.dbswitch.admin.type.IncludeExcludeEnum; import com.gitee.dbswitch.admin.type.ScheduleModeEnum; import com.gitee.dbswitch.admin.util.CronExprUtils; import com.gitee.dbswitch.common.entity.PatternMapper; +import com.gitee.dbswitch.common.type.DBTableType; import java.util.List; import java.util.Objects; import lombok.Data; @@ -39,6 +40,7 @@ public class AssigmentUpdateRequest { private Long sourceConnectionId; private String sourceSchema; + private DBTableType tableType; private IncludeExcludeEnum includeOrExclude; private List sourceTables; private Long targetConnectionId; @@ -57,7 +59,7 @@ public class AssigmentUpdateRequest { assignment.setDescription(description); assignment.setScheduleMode(scheduleMode); if (ScheduleModeEnum.SYSTEM_SCHEDULED == this.getScheduleMode()) { - CronExprUtils.checkCronExpressionValid(this.getCronExpression(), 120); + CronExprUtils.checkCronExpressionValid(this.getCronExpression(), CronExprUtils.MIN_INTERVAL_SECONDS); assignment.setCronExpression(this.getCronExpression()); } @@ -65,7 +67,7 @@ public class AssigmentUpdateRequest { } public AssignmentConfigEntity toAssignmentConfig(Long assignmentId) { - if (config.getSourceConnectionId() == config.getTargetConnectionId()) { + if (Objects.equals(config.getSourceConnectionId(), config.getTargetConnectionId())) { throw new DbswitchException(ResultCode.ERROR_INVALID_ASSIGNMENT_CONFIG, "源端与目标端不能相同"); } @@ -73,6 +75,7 @@ public class AssigmentUpdateRequest { assignmentConfigEntity.setAssignmentId(assignmentId); assignmentConfigEntity.setSourceConnectionId(this.getConfig().getSourceConnectionId()); assignmentConfigEntity.setSourceSchema(this.getConfig().getSourceSchema()); + assignmentConfigEntity.setTableType(this.getConfig().getTableType()); assignmentConfigEntity.setSourceTables(this.getConfig().getSourceTables()); assignmentConfigEntity.setExcluded( this.getConfig().getIncludeOrExclude() == IncludeExcludeEnum.EXCLUDE diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/response/AssignmentDetailResponse.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/response/AssignmentDetailResponse.java index dc3ac5ca..e3f376eb 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/response/AssignmentDetailResponse.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/model/response/AssignmentDetailResponse.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.gitee.dbswitch.admin.type.IncludeExcludeEnum; import com.gitee.dbswitch.admin.type.ScheduleModeEnum; import com.gitee.dbswitch.common.entity.PatternMapper; +import com.gitee.dbswitch.common.type.DBTableType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.sql.Timestamp; @@ -68,6 +69,9 @@ public class AssignmentDetailResponse { @ApiModelProperty("源端数据源的Schema") private String sourceSchema; + @ApiModelProperty("源端表类型") + private DBTableType tableType; + @ApiModelProperty("表明配置方式") private IncludeExcludeEnum includeOrExclude; diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/DbConnectionService.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/DbConnectionService.java index 4e846b0d..6799b239 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/DbConnectionService.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/DbConnectionService.java @@ -26,7 +26,7 @@ import com.gitee.dbswitch.admin.model.response.DbConnectionNameResponse; import com.gitee.dbswitch.admin.type.SupportDbTypeEnum; import com.gitee.dbswitch.admin.util.JDBCURL; import com.gitee.dbswitch.admin.util.PageUtils; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.service.IMetaDataByJdbcService; import com.gitee.dbswitch.core.service.impl.MetaDataByJdbcServiceImpl; import java.util.ArrayList; @@ -71,7 +71,7 @@ public class DbConnectionService { } } } - DatabaseTypeEnum prd = DatabaseTypeEnum.valueOf(dbConn.getType().getName().toUpperCase()); + ProductTypeEnum prd = ProductTypeEnum.valueOf(dbConn.getType().getName().toUpperCase()); IMetaDataByJdbcService metaDataService = new MetaDataByJdbcServiceImpl(prd); return metaDataService; } @@ -144,6 +144,21 @@ public class DbConnectionService { return Result.success(tables); } + public Result> getSchemaViews(Long id, String schema) { + DatabaseConnectionEntity dbConn = getDatabaseConnectionById(id); + IMetaDataByJdbcService metaDataService = getMetaDataCoreService(dbConn); + List tables = Optional.ofNullable( + metaDataService.queryTableList(dbConn.getUrl(), + dbConn.getUsername(), + dbConn.getPassword(), + schema)) + .orElseGet(ArrayList::new).stream() + .filter(t -> t.isViewTable()) + .map(t -> t.getTableName()) + .collect(Collectors.toList()); + return Result.success(tables); + } + public Result addDatabaseConnection( DbConnectionCreateRequest request) { if (StringUtils.isBlank(request.getName())) { diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/JobExecutorService.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/JobExecutorService.java index 906be8fa..e2aa9292 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/JobExecutorService.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/service/JobExecutorService.java @@ -40,8 +40,7 @@ import org.springframework.scheduling.quartz.QuartzJobBean; /** *

- * 如果你使用了@PersistJobDataAfterExecution注解,则强烈建议你同时使用@DisallowConcurrentExecution注 - * 解,因为当同一个job(JobDetail)的两个实例被并发执行时,由于竞争,JobDataMap中存储的数据很可能是不确定的。 + * 如果你使用了@PersistJobDataAfterExecution注解,则强烈建议你同时使用@DisallowConcurrentExecution注 解,因为当同一个job(JobDetail)的两个实例被并发执行时,由于竞争,JobDataMap中存储的数据很可能是不确定的。 *

*/ @Slf4j @@ -61,7 +60,7 @@ public class JobExecutorService extends QuartzJobBean implements InterruptableJo /** * 作为一个是否被中断的标识 */ - private boolean interrupted = false; + private volatile boolean interrupted = false; /** * 记录当前线程 @@ -106,7 +105,7 @@ public class JobExecutorService extends QuartzJobBean implements InterruptableJo currentThread = Thread.currentThread(); JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); if (interrupted) { - log.info("Quartz task id:{} interrupted", jobDataMap.getLong(TASK_ID)); + log.info("Quartz task id:{} interrupted when thread begin", jobDataMap.getLong(TASK_ID)); return; } @@ -119,6 +118,10 @@ public class JobExecutorService extends QuartzJobBean implements InterruptableJo try { ReentrantLock lock = mutexes.get(taskId.toString(), ReentrantLock::new); while (!lock.tryLock(1, TimeUnit.SECONDS)) { + if (interrupted) { + log.info("Quartz task id:{} interrupted when get lock", jobDataMap.getLong(TASK_ID)); + return; + } TimeUnit.SECONDS.sleep(1); } @@ -145,7 +148,7 @@ public class JobExecutorService extends QuartzJobBean implements InterruptableJo MigrationService mainService = new MigrationService(properties); if (interrupted) { - log.info("Quartz task id:{} interrupted", jobDataMap.getLong(TASK_ID)); + log.info("Quartz task id:{} interrupted when prepare stage", jobDataMap.getLong(TASK_ID)); return; } diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CacheUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CacheUtils.java index b5047754..21d71d06 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CacheUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CacheUtils.java @@ -15,7 +15,7 @@ import java.util.Collection; import java.util.Map; import java.util.concurrent.TimeUnit; -public class CacheUtils { +public final class CacheUtils { // 缓存时间 2 hours public static final long CACHE_DURATION_SECONDS = 7200; diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CronExprUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CronExprUtils.java index 8301d9a2..73f4980f 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CronExprUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/CronExprUtils.java @@ -21,6 +21,8 @@ import org.quartz.CronExpression; */ public final class CronExprUtils { + public static final int MIN_INTERVAL_SECONDS = 120; + /** * 检查CRON表达式的有效性 * @@ -33,7 +35,7 @@ public final class CronExprUtils { try { expression = new CronExpression(cronExpression); } catch (ParseException e) { - throw new DbswitchException(ResultCode.ERROR_INVALID_ARGUMENT, String.format("正则表达式%s无效")); + throw new DbswitchException(ResultCode.ERROR_INVALID_ARGUMENT, String.format("cron表达式%s无效")); } Date nextDate = expression.getNextValidTimeAfter(new Date(System.currentTimeMillis())); if (null == nextDate) { diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/JDBCURL.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/JDBCURL.java index 936641d8..5bd0868d 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/JDBCURL.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/JDBCURL.java @@ -24,7 +24,7 @@ import java.util.regex.Pattern; * @date 2021-11-20 22:54:21 * @since 1.0 */ -public class JDBCURL { +public final class JDBCURL { public static final String PROP_HOST = "host"; //$NON-NLS-1$ public static final String PROP_PORT = "port"; //$NON-NLS-1$ diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/LockUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/LockUtils.java new file mode 100644 index 00000000..18ab9a63 --- /dev/null +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/LockUtils.java @@ -0,0 +1,65 @@ +// Copyright tang. All rights reserved. +// https://gitee.com/inrgihc/dbswitch +// +// Use of this source code is governed by a BSD-style license +// +// Author: tang (inrgihc@126.com) +// Date : 2020/1/2 +// Location: beijing , china +///////////////////////////////////////////////////////////// +package com.gitee.dbswitch.admin.util; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + +public final class LockUtils { + + private static final Cache mutexes = CacheBuilder + .newBuilder() + .expireAfterWrite(24 * 60L, TimeUnit.MINUTES) // 缓存时间 + .build(); + + public static T runInLock(String key, int timeout, TimeUnit timeUnit, Callable callable) { + ReentrantLock lock = null; + boolean locked = false; + try { + lock = mutexes.get(key, ReentrantLock::new); + locked = lock.tryLock(timeout, timeUnit); + if (!locked) { + throw new RuntimeException("Acquire lock timeout"); + } + return callable.call(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + if (lock != null && locked) { + lock.unlock(); + } + } + } + + public static void runInLock(String key, int timeout, TimeUnit timeUnit, Runnable runnable) { + ReentrantLock lock = null; + boolean locked = false; + try { + lock = mutexes.get(key, ReentrantLock::new); + locked = lock.tryLock(timeout, timeUnit); + if (!locked) { + throw new RuntimeException("Acquire lock timeout"); + } + runnable.run(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + if (lock != null && locked) { + lock.unlock(); + } + } + } + + private LockUtils() { + } +} diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/PageUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/PageUtils.java index 069d58e7..1cde5ad8 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/PageUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/PageUtils.java @@ -19,7 +19,7 @@ import java.util.function.Supplier; /** * 分页工具类 */ -public class PageUtils { +public final class PageUtils { public static PageResult getPage(Supplier> method, Integer pageNum, Integer pageSize) { diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/ServletUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/ServletUtils.java index a9c5135c..f9a8cb8e 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/ServletUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/ServletUtils.java @@ -19,7 +19,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; * 获取Servlet服务器的HTTP参数相关工具类 */ @Slf4j -public class ServletUtils { +public final class ServletUtils { public static HttpServletRequest getHttpServletRequest() { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/SpringUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/SpringUtils.java index 30475d31..8887b263 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/SpringUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/SpringUtils.java @@ -18,7 +18,7 @@ import org.springframework.stereotype.Component; * Spring容器获取BEAN工具类 */ @Component -public class SpringUtils implements ApplicationContextAware { +public final class SpringUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/TokenUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/TokenUtils.java index 3a04c90c..3e959a6c 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/TokenUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/TokenUtils.java @@ -19,7 +19,7 @@ import org.springframework.util.StringUtils; * Token工具类 */ @Slf4j -public class TokenUtils { +public final class TokenUtils { private static final char[] hexCode = "0123456789abcdefgh".toCharArray(); diff --git a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/UuidUtils.java b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/UuidUtils.java index cdb10392..bc51df32 100644 --- a/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/UuidUtils.java +++ b/dbswitch-admin/src/main/java/com/gitee/dbswitch/admin/util/UuidUtils.java @@ -14,7 +14,7 @@ import java.util.UUID; /** * UUID工具类 */ -public class UuidUtils { +public final class UuidUtils { public static String generateUuid() { return UUID.randomUUID().toString().replace("-", ""); diff --git a/dbswitch-admin/src/main/resources/db/migration/V1_0_5__system-ddl.sql b/dbswitch-admin/src/main/resources/db/migration/V1_0_5__system-ddl.sql new file mode 100644 index 00000000..7e6967bb --- /dev/null +++ b/dbswitch-admin/src/main/resources/db/migration/V1_0_5__system-ddl.sql @@ -0,0 +1,2 @@ +ALTER TABLE `DBSWITCH_ASSIGNMENT_CONFIG` +ADD COLUMN `table_type` VARCHAR(32) NULL DEFAULT 'TABLE' COMMENT '表类型:TABLE;VIEW' AFTER `source_schema`; diff --git a/dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/DatabaseTypeEnum.java b/dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/ProductTypeEnum.java similarity index 83% rename from dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/DatabaseTypeEnum.java rename to dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/ProductTypeEnum.java index b3d7702c..af379a72 100644 --- a/dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/DatabaseTypeEnum.java +++ b/dbswitch-common/src/main/java/com/gitee/dbswitch/common/type/ProductTypeEnum.java @@ -12,11 +12,11 @@ package com.gitee.dbswitch.common.type; import java.util.Arrays; /** - * 数据库类型的枚举定义 + * 数据库产品类型的枚举定义 * * @author Tang */ -public enum DatabaseTypeEnum { +public enum ProductTypeEnum { /** * 未知数据库类型 */ @@ -100,7 +100,7 @@ public enum DatabaseTypeEnum { private int index; - DatabaseTypeEnum(int idx) { + ProductTypeEnum(int idx) { this.index = idx; } @@ -110,12 +110,12 @@ public enum DatabaseTypeEnum { public boolean noCommentStatement() { return Arrays.asList( - DatabaseTypeEnum.MYSQL, - DatabaseTypeEnum.MARIADB, - DatabaseTypeEnum.GBASE8A, - DatabaseTypeEnum.HIVE, - DatabaseTypeEnum.SQLITE3, - DatabaseTypeEnum.SYBASE + ProductTypeEnum.MYSQL, + ProductTypeEnum.MARIADB, + ProductTypeEnum.GBASE8A, + ProductTypeEnum.HIVE, + ProductTypeEnum.SQLITE3, + ProductTypeEnum.SYBASE ).contains(this); } diff --git a/dbswitch-common/src/main/java/com/gitee/dbswitch/common/util/DatabaseAwareUtils.java b/dbswitch-common/src/main/java/com/gitee/dbswitch/common/util/DatabaseAwareUtils.java index 2513fa43..6fad174f 100644 --- a/dbswitch-common/src/main/java/com/gitee/dbswitch/common/util/DatabaseAwareUtils.java +++ b/dbswitch-common/src/main/java/com/gitee/dbswitch/common/util/DatabaseAwareUtils.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.common.util; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -25,42 +25,42 @@ import javax.sql.DataSource; */ public final class DatabaseAwareUtils { - private static final Map productNameMap; + private static final Map productNameMap; - private static final Map driverNameMap; + private static final Map driverNameMap; static { productNameMap = new HashMap<>(); driverNameMap = new HashMap<>(); - productNameMap.put("Greenplum", DatabaseTypeEnum.GREENPLUM); - productNameMap.put("Microsoft SQL Server", DatabaseTypeEnum.SQLSERVER); - productNameMap.put("DM DBMS", DatabaseTypeEnum.DM); - productNameMap.put("KingbaseES", DatabaseTypeEnum.KINGBASE); - productNameMap.put("Apache Hive", DatabaseTypeEnum.HIVE); - productNameMap.put("MySQL", DatabaseTypeEnum.MYSQL); - productNameMap.put("MariaDB", DatabaseTypeEnum.MARIADB); - productNameMap.put("Oracle", DatabaseTypeEnum.ORACLE); - productNameMap.put("PostgreSQL", DatabaseTypeEnum.POSTGRESQL); - productNameMap.put("DB2 for Unix/Windows", DatabaseTypeEnum.DB2); - productNameMap.put("Hive", DatabaseTypeEnum.HIVE); - productNameMap.put("SQLite", DatabaseTypeEnum.SQLITE3); - productNameMap.put("OSCAR", DatabaseTypeEnum.OSCAR); - productNameMap.put("GBase", DatabaseTypeEnum.GBASE8A); - productNameMap.put("Adaptive Server Enterprise", DatabaseTypeEnum.SYBASE); + productNameMap.put("Greenplum", ProductTypeEnum.GREENPLUM); + productNameMap.put("Microsoft SQL Server", ProductTypeEnum.SQLSERVER); + productNameMap.put("DM DBMS", ProductTypeEnum.DM); + productNameMap.put("KingbaseES", ProductTypeEnum.KINGBASE); + productNameMap.put("Apache Hive", ProductTypeEnum.HIVE); + productNameMap.put("MySQL", ProductTypeEnum.MYSQL); + productNameMap.put("MariaDB", ProductTypeEnum.MARIADB); + productNameMap.put("Oracle", ProductTypeEnum.ORACLE); + productNameMap.put("PostgreSQL", ProductTypeEnum.POSTGRESQL); + productNameMap.put("DB2 for Unix/Windows", ProductTypeEnum.DB2); + productNameMap.put("Hive", ProductTypeEnum.HIVE); + productNameMap.put("SQLite", ProductTypeEnum.SQLITE3); + productNameMap.put("OSCAR", ProductTypeEnum.OSCAR); + productNameMap.put("GBase", ProductTypeEnum.GBASE8A); + productNameMap.put("Adaptive Server Enterprise", ProductTypeEnum.SYBASE); - driverNameMap.put("MySQL Connector Java", DatabaseTypeEnum.MYSQL); - driverNameMap.put("MariaDB Connector/J", DatabaseTypeEnum.MARIADB); - driverNameMap.put("Oracle JDBC driver", DatabaseTypeEnum.ORACLE); - driverNameMap.put("PostgreSQL JDBC Driver", DatabaseTypeEnum.POSTGRESQL); - driverNameMap.put("Kingbase8 JDBC Driver", DatabaseTypeEnum.KINGBASE); - driverNameMap.put("IBM Data Server Driver for JDBC and SQLJ", DatabaseTypeEnum.DB2); - driverNameMap.put("dm.jdbc.driver.DmDriver", DatabaseTypeEnum.DM); - driverNameMap.put("Hive JDBC", DatabaseTypeEnum.HIVE); - driverNameMap.put("SQLite JDBC", DatabaseTypeEnum.SQLITE3); - driverNameMap.put("OSCAR JDBC DRIVER", DatabaseTypeEnum.OSCAR); - driverNameMap.put("GBase JDBC Driver", DatabaseTypeEnum.GBASE8A); - driverNameMap.put("jConnect (TM) for JDBC (TM)", DatabaseTypeEnum.SYBASE); + driverNameMap.put("MySQL Connector Java", ProductTypeEnum.MYSQL); + driverNameMap.put("MariaDB Connector/J", ProductTypeEnum.MARIADB); + driverNameMap.put("Oracle JDBC driver", ProductTypeEnum.ORACLE); + driverNameMap.put("PostgreSQL JDBC Driver", ProductTypeEnum.POSTGRESQL); + driverNameMap.put("Kingbase8 JDBC Driver", ProductTypeEnum.KINGBASE); + driverNameMap.put("IBM Data Server Driver for JDBC and SQLJ", ProductTypeEnum.DB2); + driverNameMap.put("dm.jdbc.driver.DmDriver", ProductTypeEnum.DM); + driverNameMap.put("Hive JDBC", ProductTypeEnum.HIVE); + driverNameMap.put("SQLite JDBC", ProductTypeEnum.SQLITE3); + driverNameMap.put("OSCAR JDBC DRIVER", ProductTypeEnum.OSCAR); + driverNameMap.put("GBase JDBC Driver", ProductTypeEnum.GBASE8A); + driverNameMap.put("jConnect (TM) for JDBC (TM)", ProductTypeEnum.SYBASE); } /** @@ -69,7 +69,7 @@ public final class DatabaseAwareUtils { * @param dataSource 数据源 * @return 数据库产品名称字符串 */ - public static DatabaseTypeEnum getDatabaseTypeByDataSource(DataSource dataSource) { + public static ProductTypeEnum getDatabaseTypeByDataSource(DataSource dataSource) { try (Connection connection = dataSource.getConnection()) { String productName = connection.getMetaData().getDatabaseProductName(); String driverName = connection.getMetaData().getDriverName(); @@ -77,7 +77,7 @@ public final class DatabaseAwareUtils { return driverNameMap.get(driverName); } - DatabaseTypeEnum type = productNameMap.get(productName); + ProductTypeEnum type = productNameMap.get(productName); if (null == type) { throw new IllegalStateException("Unable to detect database type from data source instance"); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/AbstractDatabase.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/AbstractDatabase.java index 57160879..8329766f 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/AbstractDatabase.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/AbstractDatabase.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.database; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.DbswitchStrUtils; import com.gitee.dbswitch.common.util.HivePrepareUtils; import com.gitee.dbswitch.common.util.TypeConvertUtils; @@ -171,7 +171,7 @@ public abstract class AbstractDatabase implements IDatabaseInterface { data.setColumns(new ArrayList<>()); data.setRows(new ArrayList<>()); try (Statement st = connection.createStatement()) { - if (getDatabaseType() == DatabaseTypeEnum.HIVE) { + if (getDatabaseType() == ProductTypeEnum.HIVE) { HivePrepareUtils.prepare(connection, schemaName, tableName); } @@ -259,7 +259,7 @@ public abstract class AbstractDatabase implements IDatabaseInterface { protected List getSelectSqlColumnMeta(Connection connection, String querySQL) { List ret = new ArrayList<>(); try (Statement st = connection.createStatement()) { - if (getDatabaseType() == DatabaseTypeEnum.HIVE) { + if (getDatabaseType() == ProductTypeEnum.HIVE) { HivePrepareUtils.setResultSetColumnNameNotUnique(connection); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/DatabaseFactory.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/DatabaseFactory.java index 501fcf7b..535238bf 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/DatabaseFactory.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/DatabaseFactory.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.database; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.impl.DatabaseDB2Impl; import com.gitee.dbswitch.core.database.impl.DatabaseDmImpl; import com.gitee.dbswitch.core.database.impl.DatabaseGbase8aImpl; @@ -36,32 +36,32 @@ import java.util.concurrent.Callable; */ public final class DatabaseFactory { - private static final Map> DATABASE_MAPPER - = new HashMap>() { + private static final Map> DATABASE_MAPPER + = new HashMap>() { private static final long serialVersionUID = 9202705534880971997L; { - put(DatabaseTypeEnum.MYSQL, DatabaseMysqlImpl::new); - put(DatabaseTypeEnum.MARIADB, DatabaseMariaDBImpl::new); - put(DatabaseTypeEnum.ORACLE, DatabaseOracleImpl::new); - put(DatabaseTypeEnum.SQLSERVER2000, DatabaseSqlserver2000Impl::new); - put(DatabaseTypeEnum.SQLSERVER, DatabaseSqlserverImpl::new); - put(DatabaseTypeEnum.POSTGRESQL, DatabasePostgresImpl::new); - put(DatabaseTypeEnum.GREENPLUM, DatabaseGreenplumImpl::new); - put(DatabaseTypeEnum.DB2, DatabaseDB2Impl::new); - put(DatabaseTypeEnum.DM, DatabaseDmImpl::new); - put(DatabaseTypeEnum.SYBASE, DatabaseSybaseImpl::new); - put(DatabaseTypeEnum.KINGBASE, DatabaseKingbaseImpl::new); - put(DatabaseTypeEnum.OSCAR, DatabaseOscarImpl::new); - put(DatabaseTypeEnum.GBASE8A, DatabaseGbase8aImpl::new); - put(DatabaseTypeEnum.SYBASE, DatabaseSybaseImpl::new); - put(DatabaseTypeEnum.HIVE, DatabaseHiveImpl::new); - put(DatabaseTypeEnum.SQLITE3, DatabaseSqliteImpl::new); + put(ProductTypeEnum.MYSQL, DatabaseMysqlImpl::new); + put(ProductTypeEnum.MARIADB, DatabaseMariaDBImpl::new); + put(ProductTypeEnum.ORACLE, DatabaseOracleImpl::new); + put(ProductTypeEnum.SQLSERVER2000, DatabaseSqlserver2000Impl::new); + put(ProductTypeEnum.SQLSERVER, DatabaseSqlserverImpl::new); + put(ProductTypeEnum.POSTGRESQL, DatabasePostgresImpl::new); + put(ProductTypeEnum.GREENPLUM, DatabaseGreenplumImpl::new); + put(ProductTypeEnum.DB2, DatabaseDB2Impl::new); + put(ProductTypeEnum.DM, DatabaseDmImpl::new); + put(ProductTypeEnum.SYBASE, DatabaseSybaseImpl::new); + put(ProductTypeEnum.KINGBASE, DatabaseKingbaseImpl::new); + put(ProductTypeEnum.OSCAR, DatabaseOscarImpl::new); + put(ProductTypeEnum.GBASE8A, DatabaseGbase8aImpl::new); + put(ProductTypeEnum.SYBASE, DatabaseSybaseImpl::new); + put(ProductTypeEnum.HIVE, DatabaseHiveImpl::new); + put(ProductTypeEnum.SQLITE3, DatabaseSqliteImpl::new); } }; - public static AbstractDatabase getDatabaseInstance(DatabaseTypeEnum type) { + public static AbstractDatabase getDatabaseInstance(ProductTypeEnum type) { Callable callable = DATABASE_MAPPER.get(type); if (null != callable) { try { diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/IDatabaseInterface.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/IDatabaseInterface.java index 233230a2..94f201fc 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/IDatabaseInterface.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/IDatabaseInterface.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.database; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.model.ColumnDescription; import com.gitee.dbswitch.core.model.ColumnMetaData; import com.gitee.dbswitch.core.model.SchemaTableData; @@ -29,7 +29,7 @@ public interface IDatabaseInterface { * * @return 数据库类型 */ - DatabaseTypeEnum getDatabaseType(); + ProductTypeEnum getDatabaseType(); /** * 获取数据库的JDBC驱动类 diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDB2Impl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDB2Impl.java index 9aa9f804..6d7f846f 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDB2Impl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDB2Impl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -49,8 +49,8 @@ public class DatabaseDB2Impl extends AbstractDatabase implements IDatabaseInterf } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.DB2; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.DB2; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDmImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDmImpl.java index 3853631b..ed12bdf6 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDmImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseDmImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -41,8 +41,8 @@ public class DatabaseDmImpl extends AbstractDatabase implements IDatabaseInterfa } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.DM; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.DM; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGbase8aImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGbase8aImpl.java index 11e2749b..e29cc201 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGbase8aImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGbase8aImpl.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.database.impl; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; /** * 支持GBase8a数据库的元信息实现 @@ -23,8 +23,8 @@ public class DatabaseGbase8aImpl extends DatabaseMysqlImpl { } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.GBASE8A; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.GBASE8A; } } \ No newline at end of file diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGreenplumImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGreenplumImpl.java index 7cf170d1..8e6744cd 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGreenplumImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseGreenplumImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.database.constant.PostgresqlConst; @@ -54,8 +54,8 @@ public class DatabaseGreenplumImpl extends AbstractDatabase implements IDatabase } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.GREENPLUM; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.GREENPLUM; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseHiveImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseHiveImpl.java index 98e618e5..a7d30af3 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseHiveImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseHiveImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.HivePrepareUtils; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; @@ -37,8 +37,8 @@ public class DatabaseHiveImpl extends AbstractDatabase implements IDatabaseInter } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.HIVE; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.HIVE; } @Override @@ -115,7 +115,7 @@ public class DatabaseHiveImpl extends AbstractDatabase implements IDatabaseInter // nothing more we can do here by catch the exception. } cd.setSigned(signed); - cd.setDbType(DatabaseTypeEnum.HIVE); + cd.setDbType(ProductTypeEnum.HIVE); ret.add(cd); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseKingbaseImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseKingbaseImpl.java index 76aab92b..272554ed 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseKingbaseImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseKingbaseImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.database.constant.PostgresqlConst; @@ -42,8 +42,8 @@ public class DatabaseKingbaseImpl extends AbstractDatabase implements IDatabaseI } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.KINGBASE; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.KINGBASE; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMariaDBImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMariaDBImpl.java index 0dde3434..a83f9789 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMariaDBImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMariaDBImpl.java @@ -9,9 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.database.impl; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; -import com.gitee.dbswitch.core.model.ColumnDescription; -import java.util.List; +import com.gitee.dbswitch.common.type.ProductTypeEnum; /** * 支持MariaDB数据库的元信息实现 @@ -25,8 +23,8 @@ public class DatabaseMariaDBImpl extends DatabaseMysqlImpl { } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.MARIADB; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.MARIADB; } } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMysqlImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMysqlImpl.java index 9a2707ab..adec1683 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMysqlImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseMysqlImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -48,23 +48,19 @@ public class DatabaseMysqlImpl extends AbstractDatabase implements IDatabaseInte } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.MYSQL; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.MYSQL; } @Override public List querySchemaList(Connection connection) { - String mysqlJdbcUrl = null; try { - mysqlJdbcUrl = connection.getMetaData().getURL(); + String mysqlJdbcUrl = connection.getMetaData().getURL(); + Map data = JdbcUrlUtils.findParamsByMySqlJdbcUrl(mysqlJdbcUrl); + return Collections.singletonList(data.get("schema")); } catch (SQLException e) { throw new RuntimeException(e); } - - Map data = JdbcUrlUtils.findParamsByMySqlJdbcUrl(mysqlJdbcUrl); - List ret = new ArrayList(); - ret.add(data.get("schema")); - return ret; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOracleImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOracleImpl.java index 05eef23d..4bb224d8 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOracleImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOracleImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -23,7 +23,6 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; import org.apache.commons.lang3.StringUtils; @@ -57,8 +56,8 @@ public class DatabaseOracleImpl extends AbstractDatabase implements IDatabaseInt } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.ORACLE; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.ORACLE; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOscarImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOscarImpl.java index 74eac74f..c8165434 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOscarImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseOscarImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -41,8 +41,8 @@ public class DatabaseOscarImpl extends AbstractDatabase implements IDatabaseInte } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.OSCAR; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.OSCAR; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabasePostgresImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabasePostgresImpl.java index 3c1f5c73..07af6ba3 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabasePostgresImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabasePostgresImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.database.constant.PostgresqlConst; @@ -58,8 +58,8 @@ public class DatabasePostgresImpl extends AbstractDatabase implements IDatabaseI } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.POSTGRESQL; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.POSTGRESQL; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqliteImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqliteImpl.java index 80db8d29..9818aa69 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqliteImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqliteImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -36,8 +36,8 @@ public class DatabaseSqliteImpl extends AbstractDatabase implements IDatabaseInt } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.SQLITE3; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.SQLITE3; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserver2000Impl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserver2000Impl.java index da3cb687..88cb71c0 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserver2000Impl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserver2000Impl.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.database.impl; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; import com.gitee.dbswitch.core.model.TableDescription; @@ -33,8 +33,8 @@ public class DatabaseSqlserver2000Impl extends DatabaseSqlserverImpl implements } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.SQLSERVER2000; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.SQLSERVER2000; } @Override diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserverImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserverImpl.java index f915f275..8ff93860 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserverImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSqlserverImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.database.constant.SQLServerConst; @@ -63,8 +63,8 @@ public class DatabaseSqlserverImpl extends AbstractDatabase implements IDatabase } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.SQLSERVER; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.SQLSERVER; } private int getDatabaseMajorVersion(Connection connection) { diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSybaseImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSybaseImpl.java index 259df1c8..38fcf0fb 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSybaseImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/database/impl/DatabaseSybaseImpl.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.database.impl; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.IDatabaseInterface; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -68,8 +68,8 @@ public class DatabaseSybaseImpl extends AbstractDatabase implements IDatabaseInt } @Override - public DatabaseTypeEnum getDatabaseType() { - return DatabaseTypeEnum.SYBASE; + public ProductTypeEnum getDatabaseType() { + return ProductTypeEnum.SYBASE; } private void setCatalogName(Connection connection){ @@ -118,7 +118,7 @@ public class DatabaseSybaseImpl extends AbstractDatabase implements IDatabaseInt public String getTableDDL(Connection connection, String schemaName, String tableName) { List columnDescriptions = queryTableColumnMeta(connection, schemaName, tableName); List pks = queryTablePrimaryKeys(connection, schemaName, tableName); - return GenerateSqlUtils.getDDLCreateTableSQL(DatabaseTypeEnum.SYBASE, + return GenerateSqlUtils.getDDLCreateTableSQL(ProductTypeEnum.SYBASE, columnDescriptions, pks, schemaName, tableName, false); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnDescription.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnDescription.java index 80db8ffd..c183f6ac 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnDescription.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnDescription.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.model; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; /** * 数据库列描述符信息定义(Column Description) @@ -30,7 +30,7 @@ public class ColumnDescription { private boolean isNullable; private String remarks; private boolean signed = false; - private DatabaseTypeEnum dbtype; + private ProductTypeEnum dbtype; public String getFieldName() { if (null != this.fieldName) { @@ -128,11 +128,11 @@ public class ColumnDescription { this.signed = signed; } - public DatabaseTypeEnum getDbType() { + public ProductTypeEnum getDbType() { return this.dbtype; } - public void setDbType(DatabaseTypeEnum dbtype) { + public void setDbType(ProductTypeEnum dbtype) { this.dbtype = dbtype; } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnMetaData.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnMetaData.java index 102e5594..a73e4372 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnMetaData.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/ColumnMetaData.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.model; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; /** @@ -349,7 +349,7 @@ public class ColumnMetaData { } // If we're dealing with PostgreSQL and double precision types - if (desc.getDbType() == DatabaseTypeEnum.POSTGRESQL && type == java.sql.Types.DOUBLE + if (desc.getDbType() == ProductTypeEnum.POSTGRESQL && type == java.sql.Types.DOUBLE && precision >= 16 && length >= 16) { precision = -1; @@ -358,7 +358,7 @@ public class ColumnMetaData { // MySQL: max resolution is double precision floating point (double) // The (12,31) that is given back is not correct - if (desc.getDbType() == DatabaseTypeEnum.MYSQL) { + if (desc.getDbType() == ProductTypeEnum.MYSQL) { if (precision >= length) { precision = -1; length = -1; @@ -366,7 +366,7 @@ public class ColumnMetaData { } // If we're dealing with Hive and double/float precision types - if (desc.getDbType() == DatabaseTypeEnum.HIVE) { + if (desc.getDbType() == ProductTypeEnum.HIVE) { if (type == java.sql.Types.DOUBLE && precision >= 15 && length >= 15) { @@ -402,8 +402,8 @@ public class ColumnMetaData { } } - if (desc.getDbType() == DatabaseTypeEnum.POSTGRESQL - || desc.getDbType() == DatabaseTypeEnum.GREENPLUM) { + if (desc.getDbType() == ProductTypeEnum.POSTGRESQL + || desc.getDbType() == ProductTypeEnum.GREENPLUM) { // undefined size => arbitrary precision if (type == java.sql.Types.NUMERIC && length == 0 && precision == 0) { valtype = ColumnMetaData.TYPE_BIGNUMBER; @@ -412,7 +412,7 @@ public class ColumnMetaData { } } - if (desc.getDbType() == DatabaseTypeEnum.ORACLE) { + if (desc.getDbType() == ProductTypeEnum.ORACLE) { if (precision == 0 && length == 38) { valtype = ColumnMetaData.TYPE_INTEGER; } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/DatabaseDescription.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/DatabaseDescription.java index c8b8c7c4..68f2525d 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/DatabaseDescription.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/model/DatabaseDescription.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.model; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; /** * 数据库连接描述符信息定义(Database Description) @@ -18,7 +18,7 @@ import com.gitee.dbswitch.common.type.DatabaseTypeEnum; */ public class DatabaseDescription { - protected DatabaseTypeEnum type; + protected ProductTypeEnum type; protected String host; protected int port; /** @@ -32,7 +32,7 @@ public class DatabaseDescription { public DatabaseDescription(String dbtype, String host, int port, String mode, String dbname, String charset, String username, String password) { - this.type = DatabaseTypeEnum.valueOf(dbtype.toUpperCase()); + this.type = ProductTypeEnum.valueOf(dbtype.toUpperCase()); this.host = host; this.port = port; this.mode = mode; @@ -42,7 +42,7 @@ public class DatabaseDescription { this.password = password; } - public DatabaseTypeEnum getType() { + public ProductTypeEnum getType() { return type; } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDatasourceService.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDatasourceService.java index 587012f6..0344dc0d 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDatasourceService.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDatasourceService.java @@ -1,6 +1,6 @@ package com.gitee.dbswitch.core.service; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.model.ColumnDescription; import com.gitee.dbswitch.core.model.SchemaTableData; import com.gitee.dbswitch.core.model.SchemaTableMeta; @@ -131,7 +131,7 @@ public interface IMetaDataByDatasourceService { * @param autoIncr 是否允许主键自增 * @return 对应数据库的DDL建表语句 */ - List getDDLCreateTableSQL(DatabaseTypeEnum type, List fieldNames, + List getDDLCreateTableSQL(ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, String tableName, String tableRemarks, boolean autoIncr); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDescriptionService.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDescriptionService.java index 9bf2a016..38f88d86 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDescriptionService.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByDescriptionService.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.service; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.model.ColumnDescription; import com.gitee.dbswitch.core.model.DatabaseDescription; import com.gitee.dbswitch.core.model.SchemaTableData; @@ -126,6 +126,6 @@ public interface IMetaDataByDescriptionService { * @param autoIncr 是否允许主键自增 * @return 对应数据库的DDL建表语句 */ - String getDDLCreateTableSQL(DatabaseTypeEnum type, List fieldNames, + String getDDLCreateTableSQL(ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, String tableName, boolean autoIncr); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByJdbcService.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByJdbcService.java index 0dd69edf..6116435d 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByJdbcService.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/IMetaDataByJdbcService.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.service; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.model.ColumnDescription; import com.gitee.dbswitch.core.model.SchemaTableData; import com.gitee.dbswitch.core.model.SchemaTableMeta; @@ -28,7 +28,7 @@ public interface IMetaDataByJdbcService { * * @return */ - DatabaseTypeEnum getDatabaseType(); + ProductTypeEnum getDatabaseType(); /** * 获取数据库的schema模式列表 @@ -165,6 +165,6 @@ public interface IMetaDataByJdbcService { * @param autoIncr 是否允许主键自增 * @return 对应数据库的DDL建表语句 */ - String getDDLCreateTableSQL(DatabaseTypeEnum type, List fieldNames, + String getDDLCreateTableSQL(ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, String tableName, boolean autoIncr); } diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDataSourceServiceImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDataSourceServiceImpl.java index 2f627b69..c15ed111 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDataSourceServiceImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDataSourceServiceImpl.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.service.impl; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.DatabaseAwareUtils; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.DatabaseFactory; @@ -40,7 +40,7 @@ public class MetaDataByDataSourceServiceImpl implements IMetaDataByDatasourceSer this(dataSource, DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource)); } - public MetaDataByDataSourceServiceImpl(DataSource dataSource, DatabaseTypeEnum type) { + public MetaDataByDataSourceServiceImpl(DataSource dataSource, ProductTypeEnum type) { this.dataSource = dataSource; this.database = DatabaseFactory.getDatabaseInstance(type); } @@ -188,7 +188,7 @@ public class MetaDataByDataSourceServiceImpl implements IMetaDataByDatasourceSer } @Override - public List getDDLCreateTableSQL(DatabaseTypeEnum type, + public List getDDLCreateTableSQL(ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, String tableName, String tableRemarks, boolean autoIncr) { return GenerateSqlUtils.getDDLCreateTableSQL( diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDescriptionServiceImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDescriptionServiceImpl.java index f4747988..ba139472 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDescriptionServiceImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByDescriptionServiceImpl.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.service.impl; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.DatabaseFactory; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -204,7 +204,7 @@ public class MetaDataByDescriptionServiceImpl implements IMetaDataByDescriptionS } @Override - public String getDDLCreateTableSQL(DatabaseTypeEnum type, List fieldNames, + public String getDDLCreateTableSQL(ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, String tableName, boolean autoIncr) { return GenerateSqlUtils.getDDLCreateTableSQL( type, fieldNames, primaryKeys, schemaName, tableName, autoIncr); diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByJdbcServiceImpl.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByJdbcServiceImpl.java index 8bf35f24..8a1c0dd8 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByJdbcServiceImpl.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/service/impl/MetaDataByJdbcServiceImpl.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.core.service.impl; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.DatabaseFactory; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -31,16 +31,16 @@ import java.util.List; */ public class MetaDataByJdbcServiceImpl implements IMetaDataByJdbcService { - protected DatabaseTypeEnum dbType; + protected ProductTypeEnum dbType; protected AbstractDatabase database; - public MetaDataByJdbcServiceImpl(DatabaseTypeEnum type) { + public MetaDataByJdbcServiceImpl(ProductTypeEnum type) { this.dbType = type; this.database = DatabaseFactory.getDatabaseInstance(type); } @Override - public DatabaseTypeEnum getDatabaseType() { + public ProductTypeEnum getDatabaseType() { return this.dbType; } @@ -170,7 +170,7 @@ public class MetaDataByJdbcServiceImpl implements IMetaDataByJdbcService { } @Override - public String getDDLCreateTableSQL(DatabaseTypeEnum type, List fieldNames, + public String getDDLCreateTableSQL(ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, String tableName, boolean autoIncr) { return GenerateSqlUtils.getDDLCreateTableSQL( type, fieldNames, primaryKeys, schemaName, tableName, autoIncr); diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/GenerateSqlUtils.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/GenerateSqlUtils.java index ea28082b..fb3ece6b 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/GenerateSqlUtils.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/GenerateSqlUtils.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.core.util; import com.gitee.dbswitch.common.constant.Const; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.DatabaseFactory; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -29,7 +29,7 @@ import org.apache.commons.lang3.StringUtils; public final class GenerateSqlUtils { public static String getDDLCreateTableSQL( - DatabaseTypeEnum type, + ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, @@ -56,7 +56,7 @@ public final class GenerateSqlUtils { boolean withRemarks, String tableRemarks, boolean autoIncr) { - DatabaseTypeEnum type = db.getDatabaseType(); + ProductTypeEnum type = db.getDatabaseType(); StringBuilder sb = new StringBuilder(); List pks = fieldNames.stream() .filter((cd) -> primaryKeys.contains(cd.getFieldName())) @@ -87,7 +87,7 @@ public final class GenerateSqlUtils { } sb.append(")"); - if (DatabaseTypeEnum.MYSQL == type) { + if (ProductTypeEnum.MYSQL == type) { sb.append("ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin"); if (withRemarks && StringUtils.isNotBlank(tableRemarks)) { sb.append(String.format(" COMMENT='%s' ", tableRemarks.replace("'", "\\'"))); @@ -98,7 +98,7 @@ public final class GenerateSqlUtils { } public static List getDDLCreateTableSQL( - DatabaseTypeEnum type, + ProductTypeEnum type, List fieldNames, List primaryKeys, String schemaName, diff --git a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/PostgresUtils.java b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/PostgresUtils.java index d2defbce..5f8edf03 100644 --- a/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/PostgresUtils.java +++ b/dbswitch-core/src/main/java/com/gitee/dbswitch/core/util/PostgresUtils.java @@ -1,6 +1,6 @@ package com.gitee.dbswitch.core.util; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.core.database.AbstractDatabase; import com.gitee.dbswitch.core.database.DatabaseFactory; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -10,7 +10,7 @@ import java.util.List; public final class PostgresUtils { public static String getTableDDL(Connection connection, String schema, String table) { - AbstractDatabase db = DatabaseFactory.getDatabaseInstance(DatabaseTypeEnum.POSTGRESQL); + AbstractDatabase db = DatabaseFactory.getDatabaseInstance(ProductTypeEnum.POSTGRESQL); List columnDescriptions = db.queryTableColumnMeta(connection, schema, table); List pks = db.queryTablePrimaryKeys(connection, schema, table); return GenerateSqlUtils.getDDLCreateTableSQL( diff --git a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/entity/SourceDataSourceProperties.java b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/entity/SourceDataSourceProperties.java index 2881407b..ce9874ed 100644 --- a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/entity/SourceDataSourceProperties.java +++ b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/entity/SourceDataSourceProperties.java @@ -10,6 +10,7 @@ package com.gitee.dbswitch.data.entity; import com.gitee.dbswitch.common.entity.PatternMapper; +import com.gitee.dbswitch.common.type.DBTableType; import java.util.List; import java.util.concurrent.TimeUnit; import lombok.Data; @@ -26,6 +27,7 @@ public class SourceDataSourceProperties { private Integer fetchSize = 5000; private String sourceSchema = ""; + private String tableType = "TABLE"; private String sourceIncludes = ""; private String sourceExcludes = ""; private List regexTableMapper; diff --git a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java index 87db6040..5365b460 100644 --- a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java +++ b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/handler/MigrationHandler.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.data.handler; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.DatabaseAwareUtils; import com.gitee.dbswitch.common.util.PatterNameUtils; import com.gitee.dbswitch.core.model.ColumnDescription; @@ -64,7 +64,7 @@ public class MigrationHandler implements Supplier { // 来源端 private final HikariDataSource sourceDataSource; - private DatabaseTypeEnum sourceProductType; + private ProductTypeEnum sourceProductType; private String sourceSchemaName; private String sourceTableName; private String sourceTableRemarks; @@ -75,7 +75,7 @@ public class MigrationHandler implements Supplier { // 目的端 private final HikariDataSource targetDataSource; - private DatabaseTypeEnum targetProductType; + private ProductTypeEnum targetProductType; private String targetSchemaName; private String targetTableName; private List targetColumnDescriptions; @@ -247,7 +247,7 @@ public class MigrationHandler implements Supplier { if (!targetPrimaryKeys.isEmpty() && !dbTargetPks.isEmpty() && targetPrimaryKeys.containsAll(dbTargetPks) && dbTargetPks.containsAll(targetPrimaryKeys)) { - if (targetProductType == DatabaseTypeEnum.MYSQL + if (targetProductType == ProductTypeEnum.MYSQL && !DatabaseAwareUtils.isMysqlInnodbStorageEngine( targetSchemaName, targetTableName, targetDataSource)) { return doFullCoverSynchronize(writer); diff --git a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/service/MigrationService.java b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/service/MigrationService.java index b1c7c802..7577f93b 100644 --- a/dbswitch-data/src/main/java/com/gitee/dbswitch/data/service/MigrationService.java +++ b/dbswitch-data/src/main/java/com/gitee/dbswitch/data/service/MigrationService.java @@ -33,6 +33,7 @@ import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.StopWatch; +import org.springframework.util.StringUtils; /** * 数据迁移主逻辑类 @@ -119,10 +120,13 @@ public class MigrationService { if (tableList.isEmpty()) { log.warn("### Find source database table list empty for schema name is : {}", schema); } else { + String allTableType = sourceProperties.getTableType(); for (TableDescription td : tableList) { - // 当没有配置迁移的表是,默认为所有物理表(不含有视图表) - if (includes.isEmpty() && DBTableType.VIEW.name().equals(td.getTableType())) { - continue; + // 当没有配置迁移的表名时,默认为根据类型同步所有 + if (includes.isEmpty()) { + if (null != allTableType && !allTableType.equals(td.getTableType())) { + continue; + } } String tableName = td.getTableName(); diff --git a/dbswitch-data/src/main/resources/config.yml b/dbswitch-data/src/main/resources/config.yml index 75b47e2a..d1fab021 100644 --- a/dbswitch-data/src/main/resources/config.yml +++ b/dbswitch-data/src/main/resources/config.yml @@ -1,8 +1,8 @@ dbswitch: source: # source database connection information - ## support MySQL/MariaDB/DB2/DM/Kingbase8/Oracle/SQLServer/PostgreSQL/Greenplum - ## support mutiple source database connection + ## support MySQL/MariaDB/DB2/DM/Kingbase8/Oracle/SQLServer/PostgreSQL/Greenplum etc. + ## support multiple source database connection - url: jdbc:oracle:thin:@172.17.2.10:1521:ORCL driver-class-name: 'oracle.jdbc.driver.OracleDriver' username: 'system' @@ -12,20 +12,22 @@ dbswitch: fetch-size: 10000 ## schema name for query source schemas, separate by ',' source-schema: 'TANG' + ## table type which include or exclude,option: TABLE,VIEW + table-type: 'TABLE' ## table name include from table lists, separate by ',' source-includes: '' ## table name exclude from table lists, separate by ',' source-excludes: '' ## table name convert mapper by regular expression regex-table-mapper: - - 'from-pattern': '^' - 'to-value': 'T_' + - from-pattern: '^' + to-value: 'T_' ## columns name convert mapper by regular expression like regex-table-mapper regex-column-mapper: target: # target database connection information - ## Best support for Oracle/PostgreSQL/Greenplum/DM/Kingbase8 + ## Best support for Oracle/PostgreSQL/Greenplum/DM etc. url: jdbc:postgresql://172.17.2.10:5432/test driver-class-name: org.postgresql.Driver username: tang diff --git a/dbswitch-dbcommon/src/main/java/com/gitee/dbswitch/dbcommon/database/DatabaseOperatorFactory.java b/dbswitch-dbcommon/src/main/java/com/gitee/dbswitch/dbcommon/database/DatabaseOperatorFactory.java index 0b3de2e0..e0662e41 100644 --- a/dbswitch-dbcommon/src/main/java/com/gitee/dbswitch/dbcommon/database/DatabaseOperatorFactory.java +++ b/dbswitch-dbcommon/src/main/java/com/gitee/dbswitch/dbcommon/database/DatabaseOperatorFactory.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.dbcommon.database; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.DatabaseAwareUtils; import com.gitee.dbswitch.dbcommon.database.impl.DB2DatabaseOperator; import com.gitee.dbswitch.dbcommon.database.impl.DmDatabaseOperator; @@ -35,27 +35,27 @@ import javax.sql.DataSource; */ public final class DatabaseOperatorFactory { - private static final Map> DATABASE_OPERATOR_MAPPER - = new HashMap>() { + private static final Map> DATABASE_OPERATOR_MAPPER + = new HashMap>() { private static final long serialVersionUID = -5278835613240515265L; { - put(DatabaseTypeEnum.MYSQL, MysqlDatabaseOperator::new); - put(DatabaseTypeEnum.MARIADB, MysqlDatabaseOperator::new); - put(DatabaseTypeEnum.ORACLE, OracleDatabaseOperator::new); - put(DatabaseTypeEnum.SQLSERVER, SqlServerDatabaseOperator::new); - put(DatabaseTypeEnum.SQLSERVER2000, SqlServerDatabaseOperator::new); - put(DatabaseTypeEnum.POSTGRESQL, PostgreSqlDatabaseOperator::new); - put(DatabaseTypeEnum.GREENPLUM, GreenplumDatabaseOperator::new); - put(DatabaseTypeEnum.DB2, DB2DatabaseOperator::new); - put(DatabaseTypeEnum.DM, DmDatabaseOperator::new); - put(DatabaseTypeEnum.SYBASE, SybaseDatabaseOperator::new); - put(DatabaseTypeEnum.KINGBASE, KingbaseDatabaseOperator::new); - put(DatabaseTypeEnum.OSCAR, OscarDatabaseOperator::new); - put(DatabaseTypeEnum.GBASE8A, MysqlDatabaseOperator::new); - put(DatabaseTypeEnum.HIVE, HiveDatabaseOperator::new); - put(DatabaseTypeEnum.SQLITE3, SqliteDatabaseOperator::new); + put(ProductTypeEnum.MYSQL, MysqlDatabaseOperator::new); + put(ProductTypeEnum.MARIADB, MysqlDatabaseOperator::new); + put(ProductTypeEnum.ORACLE, OracleDatabaseOperator::new); + put(ProductTypeEnum.SQLSERVER, SqlServerDatabaseOperator::new); + put(ProductTypeEnum.SQLSERVER2000, SqlServerDatabaseOperator::new); + put(ProductTypeEnum.POSTGRESQL, PostgreSqlDatabaseOperator::new); + put(ProductTypeEnum.GREENPLUM, GreenplumDatabaseOperator::new); + put(ProductTypeEnum.DB2, DB2DatabaseOperator::new); + put(ProductTypeEnum.DM, DmDatabaseOperator::new); + put(ProductTypeEnum.SYBASE, SybaseDatabaseOperator::new); + put(ProductTypeEnum.KINGBASE, KingbaseDatabaseOperator::new); + put(ProductTypeEnum.OSCAR, OscarDatabaseOperator::new); + put(ProductTypeEnum.GBASE8A, MysqlDatabaseOperator::new); + put(ProductTypeEnum.HIVE, HiveDatabaseOperator::new); + put(ProductTypeEnum.SQLITE3, SqliteDatabaseOperator::new); } }; @@ -66,7 +66,7 @@ public final class DatabaseOperatorFactory { * @return 指定类型的数据库读取器 */ public static IDatabaseOperator createDatabaseOperator(DataSource dataSource) { - DatabaseTypeEnum type = DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource); + ProductTypeEnum type = DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource); if (!DATABASE_OPERATOR_MAPPER.containsKey(type)) { throw new RuntimeException( String.format("[dbcommon] Unsupported database type (%s)", type)); diff --git a/dbswitch-dbsynch/src/main/java/com/gitee/dbswitch/dbsynch/DatabaseSynchronizeFactory.java b/dbswitch-dbsynch/src/main/java/com/gitee/dbswitch/dbsynch/DatabaseSynchronizeFactory.java index 0ca173e3..2540c291 100644 --- a/dbswitch-dbsynch/src/main/java/com/gitee/dbswitch/dbsynch/DatabaseSynchronizeFactory.java +++ b/dbswitch-dbsynch/src/main/java/com/gitee/dbswitch/dbsynch/DatabaseSynchronizeFactory.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.dbsynch; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.DatabaseAwareUtils; import com.gitee.dbswitch.dbsynch.db2.DB2DatabaseSyncImpl; import com.gitee.dbswitch.dbsynch.dm.DmDatabaseSyncImpl; @@ -34,26 +34,26 @@ import javax.sql.DataSource; */ public final class DatabaseSynchronizeFactory { - private static final Map> DATABASE_SYNC_MAPPER - = new HashMap>() { + private static final Map> DATABASE_SYNC_MAPPER + = new HashMap>() { private static final long serialVersionUID = -2359773637275934408L; { - put(DatabaseTypeEnum.MYSQL, MySqlDatabaseSyncImpl::new); - put(DatabaseTypeEnum.MARIADB, MySqlDatabaseSyncImpl::new); - put(DatabaseTypeEnum.ORACLE, OracleDatabaseSyncImpl::new); - put(DatabaseTypeEnum.SQLSERVER, SqlServerDatabaseSyncImpl::new); - put(DatabaseTypeEnum.SQLSERVER2000, SqlServerDatabaseSyncImpl::new); - put(DatabaseTypeEnum.POSTGRESQL, PostgresqlDatabaseSyncImpl::new); - put(DatabaseTypeEnum.GREENPLUM, GreenplumDatabaseSyncImpl::new); - put(DatabaseTypeEnum.DB2, DB2DatabaseSyncImpl::new); - put(DatabaseTypeEnum.DM, DmDatabaseSyncImpl::new); - put(DatabaseTypeEnum.SYBASE, SybaseDatabaseSyncImpl::new); - put(DatabaseTypeEnum.KINGBASE, KingbaseDatabaseSyncImpl::new); - put(DatabaseTypeEnum.OSCAR, OscarDatabaseSyncImpl::new); - put(DatabaseTypeEnum.GBASE8A, MySqlDatabaseSyncImpl::new); - put(DatabaseTypeEnum.SQLITE3, Sqlite3DatabaseSyncImpl::new); + put(ProductTypeEnum.MYSQL, MySqlDatabaseSyncImpl::new); + put(ProductTypeEnum.MARIADB, MySqlDatabaseSyncImpl::new); + put(ProductTypeEnum.ORACLE, OracleDatabaseSyncImpl::new); + put(ProductTypeEnum.SQLSERVER, SqlServerDatabaseSyncImpl::new); + put(ProductTypeEnum.SQLSERVER2000, SqlServerDatabaseSyncImpl::new); + put(ProductTypeEnum.POSTGRESQL, PostgresqlDatabaseSyncImpl::new); + put(ProductTypeEnum.GREENPLUM, GreenplumDatabaseSyncImpl::new); + put(ProductTypeEnum.DB2, DB2DatabaseSyncImpl::new); + put(ProductTypeEnum.DM, DmDatabaseSyncImpl::new); + put(ProductTypeEnum.SYBASE, SybaseDatabaseSyncImpl::new); + put(ProductTypeEnum.KINGBASE, KingbaseDatabaseSyncImpl::new); + put(ProductTypeEnum.OSCAR, OscarDatabaseSyncImpl::new); + put(ProductTypeEnum.GBASE8A, MySqlDatabaseSyncImpl::new); + put(ProductTypeEnum.SQLITE3, Sqlite3DatabaseSyncImpl::new); } }; @@ -64,7 +64,7 @@ public final class DatabaseSynchronizeFactory { * @return 同步器对象 */ public static IDatabaseSynchronize createDatabaseWriter(DataSource dataSource) { - DatabaseTypeEnum type = DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource); + ProductTypeEnum type = DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource); if (!DATABASE_SYNC_MAPPER.containsKey(type)) { throw new RuntimeException( String.format("[dbsynch] Unsupported database type (%s)", type)); diff --git a/dbswitch-dbwriter/src/main/java/com/gitee/dbswitch/dbwriter/DatabaseWriterFactory.java b/dbswitch-dbwriter/src/main/java/com/gitee/dbswitch/dbwriter/DatabaseWriterFactory.java index 9acc5f02..1ace7490 100644 --- a/dbswitch-dbwriter/src/main/java/com/gitee/dbswitch/dbwriter/DatabaseWriterFactory.java +++ b/dbswitch-dbwriter/src/main/java/com/gitee/dbswitch/dbwriter/DatabaseWriterFactory.java @@ -9,7 +9,7 @@ ///////////////////////////////////////////////////////////// package com.gitee.dbswitch.dbwriter; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.common.util.DatabaseAwareUtils; import com.gitee.dbswitch.dbwriter.db2.DB2WriterImpl; import com.gitee.dbswitch.dbwriter.dm.DmWriterImpl; @@ -33,27 +33,27 @@ import javax.sql.DataSource; */ public class DatabaseWriterFactory { - private static final Map> DATABASE_WRITER_MAPPER - = new HashMap>() { + private static final Map> DATABASE_WRITER_MAPPER + = new HashMap>() { private static final long serialVersionUID = 3365136872693503697L; { - put(DatabaseTypeEnum.MYSQL, MySqlWriterImpl::new); - put(DatabaseTypeEnum.MARIADB, MySqlWriterImpl::new); - put(DatabaseTypeEnum.ORACLE, OracleWriterImpl::new); - put(DatabaseTypeEnum.SQLSERVER, SqlServerWriterImpl::new); - put(DatabaseTypeEnum.SQLSERVER2000, SqlServerWriterImpl::new); - put(DatabaseTypeEnum.POSTGRESQL, GreenplumCopyWriterImpl::new); - put(DatabaseTypeEnum.GREENPLUM, GreenplumCopyWriterImpl::new); - put(DatabaseTypeEnum.DB2, DB2WriterImpl::new); - put(DatabaseTypeEnum.DM, DmWriterImpl::new); - put(DatabaseTypeEnum.SYBASE, SybaseWriterImpl::new); + put(ProductTypeEnum.MYSQL, MySqlWriterImpl::new); + put(ProductTypeEnum.MARIADB, MySqlWriterImpl::new); + put(ProductTypeEnum.ORACLE, OracleWriterImpl::new); + put(ProductTypeEnum.SQLSERVER, SqlServerWriterImpl::new); + put(ProductTypeEnum.SQLSERVER2000, SqlServerWriterImpl::new); + put(ProductTypeEnum.POSTGRESQL, GreenplumCopyWriterImpl::new); + put(ProductTypeEnum.GREENPLUM, GreenplumCopyWriterImpl::new); + put(ProductTypeEnum.DB2, DB2WriterImpl::new); + put(ProductTypeEnum.DM, DmWriterImpl::new); + put(ProductTypeEnum.SYBASE, SybaseWriterImpl::new); //对于kingbase当前只能使用insert模式 - put(DatabaseTypeEnum.KINGBASE, KingbaseInsertWriterImpl::new); - put(DatabaseTypeEnum.OSCAR, OscarWriterImpl::new); - put(DatabaseTypeEnum.GBASE8A, MySqlWriterImpl::new); - put(DatabaseTypeEnum.SQLITE3, Sqlite3WriterImpl::new); + put(ProductTypeEnum.KINGBASE, KingbaseInsertWriterImpl::new); + put(ProductTypeEnum.OSCAR, OscarWriterImpl::new); + put(ProductTypeEnum.GBASE8A, MySqlWriterImpl::new); + put(ProductTypeEnum.SQLITE3, Sqlite3WriterImpl::new); } }; @@ -75,9 +75,9 @@ public class DatabaseWriterFactory { * @return 写入器对象 */ public static IDatabaseWriter createDatabaseWriter(DataSource dataSource, boolean insert) { - DatabaseTypeEnum type = DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource); + ProductTypeEnum type = DatabaseAwareUtils.getDatabaseTypeByDataSource(dataSource); if (insert) { - if (DatabaseTypeEnum.POSTGRESQL.equals(type) || DatabaseTypeEnum.GREENPLUM.equals(type)) { + if (ProductTypeEnum.POSTGRESQL.equals(type) || ProductTypeEnum.GREENPLUM.equals(type)) { return new com.gitee.dbswitch.dbwriter.gpdb.GreenplumInsertWriterImpl(dataSource); } } diff --git a/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/ISqlConvertService.java b/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/ISqlConvertService.java index c77081ad..0429ffc7 100644 --- a/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/ISqlConvertService.java +++ b/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/ISqlConvertService.java @@ -10,7 +10,7 @@ package com.gitee.dbswitch.sql.service; import java.util.Map; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; /** * SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL @@ -34,7 +34,7 @@ public interface ISqlConvertService { * @param sql 待转换的SQL语句 * @return 转换为指定数据库类型后的SQL语句 */ - public String dmlSentence(String sql, DatabaseTypeEnum target); + public String dmlSentence(String sql, ProductTypeEnum target); /** * 指定源数据库到目的数据库的DQL/DML类SQL的转换 @@ -44,7 +44,7 @@ public interface ISqlConvertService { * @param sql 待转换的SQL语句 * @return 转换为目的数据库类型后的SQL语句 */ - public String dmlSentence(DatabaseTypeEnum source, DatabaseTypeEnum target, String sql); + public String dmlSentence(ProductTypeEnum source, ProductTypeEnum target, String sql); /** * 标准DDL类SQL的转换 @@ -60,7 +60,7 @@ public interface ISqlConvertService { * @param sql 待转换的SQL语句 * @return 转换为指定数据库类型后的SQL语句 */ - public String ddlSentence(String sql, DatabaseTypeEnum target); + public String ddlSentence(String sql, ProductTypeEnum target); /** * 指定源数据库到目的数据库的DDL类SQL的转换 @@ -70,7 +70,7 @@ public interface ISqlConvertService { * @param sql 待转换的SQL语句 * @return 转换为目的数据库类型后的SQL语句 */ - public String ddlSentence(DatabaseTypeEnum source, DatabaseTypeEnum target, String sql); + public String ddlSentence(ProductTypeEnum source, ProductTypeEnum target, String sql); /** * 标准DCL类SQL的转换 @@ -88,5 +88,5 @@ public interface ISqlConvertService { * @param sql 待转换的SQL语句 * @return 转换为目的数据库类型后的SQL语句 */ - public String dclSentence(DatabaseTypeEnum source, DatabaseTypeEnum target, String sql); + public String dclSentence(ProductTypeEnum source, ProductTypeEnum target, String sql); } diff --git a/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/CalciteSqlConvertServiceImpl.java b/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/CalciteSqlConvertServiceImpl.java index 5ef094fb..ae4335f6 100644 --- a/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/CalciteSqlConvertServiceImpl.java +++ b/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/CalciteSqlConvertServiceImpl.java @@ -23,7 +23,7 @@ import com.gitee.dbswitch.sql.calcite.TheMssqlSqlDialect; import com.gitee.dbswitch.sql.calcite.TheMysqlSqlDialect; import com.gitee.dbswitch.sql.calcite.TheOracleSqlDialect; import com.gitee.dbswitch.sql.calcite.ThePostgresqlSqlDialect; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.sql.service.ISqlConvertService; /** @@ -40,7 +40,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { private static final Logger logger = LoggerFactory.getLogger(CalciteSqlConvertServiceImpl.class); - private Lex getDatabaseLex(DatabaseTypeEnum type) { + private Lex getDatabaseLex(ProductTypeEnum type) { switch (type) { case MYSQL: return Lex.MYSQL; @@ -55,7 +55,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { } } - private SqlDialect getDatabaseDialect(DatabaseTypeEnum type) { + private SqlDialect getDatabaseDialect(ProductTypeEnum type) { switch (type) { case MYSQL: return TheMysqlSqlDialect.DEFAULT; @@ -94,7 +94,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { } @Override - public String dmlSentence(String sql, DatabaseTypeEnum target) { + public String dmlSentence(String sql, ProductTypeEnum target) { logger.info("DML SQL: [{}] {} ", target.name(), sql); SqlParser.Config config = SqlParser.configBuilder().build(); SqlParser parser = SqlParser.create(sql, config); @@ -109,7 +109,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { } @Override - public String dmlSentence(DatabaseTypeEnum source, DatabaseTypeEnum target, String sql) { + public String dmlSentence(ProductTypeEnum source, ProductTypeEnum target, String sql) { logger.info("DML SQL: [{}->{}] {} ", source.name(), target.name(), sql); SqlParser.Config config = SqlParser.configBuilder().setLex(this.getDatabaseLex(source)).build(); SqlParser parser = SqlParser.create(sql, config); @@ -149,7 +149,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { } @Override - public String ddlSentence(String sql, DatabaseTypeEnum target) { + public String ddlSentence(String sql, ProductTypeEnum target) { logger.info("DDL SQL: [{}] {} ", target.name(), sql); SqlParser.Config config = SqlParser.configBuilder() .setParserFactory(SqlDdlParserImpl.FACTORY) @@ -168,7 +168,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { } @Override - public String ddlSentence(DatabaseTypeEnum source, DatabaseTypeEnum target, String sql) { + public String ddlSentence(ProductTypeEnum source, ProductTypeEnum target, String sql) { logger.info("DDL SQL: [{}->{}] {} ", source.name(), target.name(), sql); SqlParser.Config config = SqlParser.configBuilder() .setParserFactory(SqlDdlParserImpl.FACTORY) @@ -193,7 +193,7 @@ public class CalciteSqlConvertServiceImpl implements ISqlConvertService { } @Override - public String dclSentence(DatabaseTypeEnum source,DatabaseTypeEnum target,String sql) { + public String dclSentence(ProductTypeEnum source, ProductTypeEnum target,String sql) { throw new RuntimeException("Unimplement!"); } diff --git a/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/MyselfSqlGeneratorServiceImpl.java b/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/MyselfSqlGeneratorServiceImpl.java index ff0ca920..ec928542 100644 --- a/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/MyselfSqlGeneratorServiceImpl.java +++ b/dbswitch-sql/src/main/java/com/gitee/dbswitch/sql/service/impl/MyselfSqlGeneratorServiceImpl.java @@ -11,7 +11,7 @@ package com.gitee.dbswitch.sql.service.impl; import java.util.HashMap; import java.util.Map; -import com.gitee.dbswitch.common.type.DatabaseTypeEnum; +import com.gitee.dbswitch.common.type.ProductTypeEnum; import com.gitee.dbswitch.sql.service.ISqlGeneratorService; import com.gitee.dbswitch.sql.ddl.AbstractDatabaseDialect; import com.gitee.dbswitch.sql.ddl.AbstractSqlDdlOperator; @@ -33,16 +33,16 @@ import com.gitee.dbswitch.sql.ddl.sql.impl.PostgresDialectImpl; */ public class MyselfSqlGeneratorServiceImpl implements ISqlGeneratorService { - private static final Map DATABASE_MAPPER = new HashMap(); + private static final Map DATABASE_MAPPER = new HashMap(); static { - DATABASE_MAPPER.put(DatabaseTypeEnum.MYSQL, MySqlDialectImpl.class.getName()); - DATABASE_MAPPER.put(DatabaseTypeEnum.ORACLE, OracleDialectImpl.class.getName()); - DATABASE_MAPPER.put(DatabaseTypeEnum.POSTGRESQL, PostgresDialectImpl.class.getName()); - DATABASE_MAPPER.put(DatabaseTypeEnum.GREENPLUM, GreenplumDialectImpl.class.getName()); + DATABASE_MAPPER.put(ProductTypeEnum.MYSQL, MySqlDialectImpl.class.getName()); + DATABASE_MAPPER.put(ProductTypeEnum.ORACLE, OracleDialectImpl.class.getName()); + DATABASE_MAPPER.put(ProductTypeEnum.POSTGRESQL, PostgresDialectImpl.class.getName()); + DATABASE_MAPPER.put(ProductTypeEnum.GREENPLUM, GreenplumDialectImpl.class.getName()); } - public static AbstractDatabaseDialect getDatabaseInstance(DatabaseTypeEnum type) { + public static AbstractDatabaseDialect getDatabaseInstance(ProductTypeEnum type) { if (DATABASE_MAPPER.containsKey(type)) { String className = DATABASE_MAPPER.get(type); try { @@ -57,7 +57,7 @@ public class MyselfSqlGeneratorServiceImpl implements ISqlGeneratorService { @Override public String createTable(String dbType, TableDefinition t) { - DatabaseTypeEnum type = DatabaseTypeEnum.valueOf(dbType.toUpperCase()); + ProductTypeEnum type = ProductTypeEnum.valueOf(dbType.toUpperCase()); AbstractDatabaseDialect dialect = getDatabaseInstance(type); AbstractSqlDdlOperator operator = new DdlSqlCreateTable(t); return operator.toSqlString(dialect); @@ -65,7 +65,7 @@ public class MyselfSqlGeneratorServiceImpl implements ISqlGeneratorService { @Override public String alterTable(String dbType, String handle, TableDefinition t){ - DatabaseTypeEnum type = DatabaseTypeEnum.valueOf(dbType.toUpperCase()); + ProductTypeEnum type = ProductTypeEnum.valueOf(dbType.toUpperCase()); AbstractDatabaseDialect dialect = getDatabaseInstance(type); AbstractSqlDdlOperator operator = new DdlSqlAlterTable(t,handle); return operator.toSqlString(dialect); @@ -73,7 +73,7 @@ public class MyselfSqlGeneratorServiceImpl implements ISqlGeneratorService { @Override public String dropTable(String dbType, TableDefinition t) { - DatabaseTypeEnum type = DatabaseTypeEnum.valueOf(dbType.toUpperCase()); + ProductTypeEnum type = ProductTypeEnum.valueOf(dbType.toUpperCase()); AbstractDatabaseDialect dialect = getDatabaseInstance(type); AbstractSqlDdlOperator operator = new DdlSqlDropTable(t); return operator.toSqlString(dialect); @@ -81,7 +81,7 @@ public class MyselfSqlGeneratorServiceImpl implements ISqlGeneratorService { @Override public String truncateTable(String dbType, TableDefinition t) { - DatabaseTypeEnum type = DatabaseTypeEnum.valueOf(dbType.toUpperCase()); + ProductTypeEnum type = ProductTypeEnum.valueOf(dbType.toUpperCase()); AbstractDatabaseDialect dialect = getDatabaseInstance(type); AbstractSqlDdlOperator operator = new DdlSqlTruncateTable(t); return operator.toSqlString(dialect);