I5QFVD:支持选择视图表迁移同步

This commit is contained in:
inrgihc
2022-09-17 22:39:22 +08:00
parent 898106d409
commit ce8e23145a
63 changed files with 545 additions and 302 deletions

View File

@@ -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);
}

View File

@@ -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!");
}

View File

@@ -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<DatabaseTypeEnum, String> DATABASE_MAPPER = new HashMap<DatabaseTypeEnum, String>();
private static final Map<ProductTypeEnum, String> DATABASE_MAPPER = new HashMap<ProductTypeEnum, String>();
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);