diff --git a/pom.xml b/pom.xml index 4622637..30e9a8c 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 17 1.18.34 1.10.8 - 1.10.8.110 + 1.10.8.122 5.8.26 3.3.2 2.0.51 diff --git a/src/main/java/org/dromara/autotable/core/strategy/mysql/builder/CreateTableSqlBuilder.java b/src/main/java/org/dromara/autotable/core/strategy/mysql/builder/CreateTableSqlBuilder.java deleted file mode 100644 index 394befd..0000000 --- a/src/main/java/org/dromara/autotable/core/strategy/mysql/builder/CreateTableSqlBuilder.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.dromara.autotable.core.strategy.mysql.builder; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import org.dromara.autotable.annotation.enums.IndexTypeEnum; -import org.dromara.autotable.core.strategy.IndexMetadata; -import org.dromara.autotable.core.strategy.mysql.data.MysqlColumnMetadata; -import org.dromara.autotable.core.strategy.mysql.data.MysqlTableMetadata; -import org.dromara.autotable.core.utils.StringConnectHelper; -import org.dromara.autotable.core.utils.StringUtils; - -/** - * @author don - * 临时解决:https://gitee.com/dromara/auto-table/issues/IBPYHU - */ -@Slf4j -public class CreateTableSqlBuilder { - - /** - * 构建创建新表的SQL - * - * @param mysqlTableMetadata 参数 - * @return sql - */ - public static String buildSql(MysqlTableMetadata mysqlTableMetadata) { - - String name = mysqlTableMetadata.getTableName(); - List mysqlColumnMetadataList = mysqlTableMetadata.getColumnMetadataList(); - List indexMetadataList = mysqlTableMetadata.getIndexMetadataList(); - String collate = mysqlTableMetadata.getCollate(); - String engine = mysqlTableMetadata.getEngine(); - String characterSet = mysqlTableMetadata.getCharacterSet(); - String comment = mysqlTableMetadata.getComment(); - - // 记录所有修改项,(利用数组结构,便于添加,分割) - List addItems = new ArrayList<>(); - - // 获取所有主键(至于表字段处理之前,为了主键修改notnull) - List primaries = new ArrayList<>(); - mysqlColumnMetadataList.forEach(columnData -> { - // 判断是主键,自动设置为NOT NULL,并记录 - if (columnData.isPrimary()) { - columnData.setNotNull(true); - primaries.add(columnData.getName()); - } - }); - - // 表字段处理 - addItems.add( - mysqlColumnMetadataList.stream() - .sorted(Comparator.comparingInt(MysqlColumnMetadata::getPosition)) - // 拼接每个字段的sql片段 - .map(ColumnSqlBuilder::buildSql) - .collect(Collectors.joining(",")) - ); - - - // 主键 - if (!primaries.isEmpty()) { - String primaryKeySql = getPrimaryKeySql(primaries); - addItems.add(primaryKeySql); - } - - // 索引 - addItems.add( - indexMetadataList.stream() - // 例子: UNIQUE INDEX `unique_name_age`(`name` ASC, `age` DESC) COMMENT '姓名、年龄索引' USING BTREE - .map(CreateTableSqlBuilder::getIndexSql) - // 同类型的索引,排在一起,SQL美化 - .sorted() - .collect(Collectors.joining(",")) - ); - - List tableProperties = getTableProperties(engine, characterSet, collate, comment); - - // 组合sql: 过滤空字符项,逗号拼接 - String addSql = addItems.stream() - .filter(StringUtils::hasText) - .collect(Collectors.joining(",")); - String propertiesSql = tableProperties.stream() - .filter(StringUtils::hasText) - .collect(Collectors.joining(",")); - - return "CREATE TABLE `{tableName}` ({addItems}) {tableProperties};" - .replace("{tableName}", name) - .replace("{addItems}", addSql) - .replace("{tableProperties}", propertiesSql); - } - - public static List getTableProperties(String engine, String characterSet, String collate, String comment) { - List tableProperties = new ArrayList<>(); - - // 引擎 - if (StringUtils.hasText(engine)) { - tableProperties.add("ENGINE = " + engine); - } - // 字符集 - if (StringUtils.hasText(characterSet)) { - tableProperties.add("CHARACTER SET = " + characterSet); - } - // 排序 - if (StringUtils.hasText(collate)) { - tableProperties.add("COLLATE = " + collate); - } - // 备注 - if (StringUtils.hasText(comment)) { - tableProperties.add( - "COMMENT = '{comment}'" - .replace("{comment}", comment) - ); - } - return tableProperties; - } - - public static String getIndexSql(IndexMetadata indexMetadata) { - // 例子: UNIQUE INDEX `unique_name_age`(`name` ASC, `age` DESC) COMMENT '姓名、年龄索引', - return StringConnectHelper.newInstance("{indexType} INDEX {indexName}({columns}) {method} {indexComment}") - .replace("{indexType}", indexMetadata.getType() == IndexTypeEnum.UNIQUE ? "UNIQUE" : "") - .replace("{indexName}", indexMetadata.getName()) - .replace("{columns}", () -> { - List columnParams = indexMetadata.getColumns(); - return columnParams.stream().map(column -> - // 例:name ASC - "`{column}` {sortMode}" - .replace("{column}", column.getColumn()) - .replace("{sortMode}", column.getSort() != null ? column.getSort().name() : "") - ).collect(Collectors.joining(",")); - }) - .replace("{method}", StringUtils.hasText(indexMetadata.getMethod()) ? "USING " + indexMetadata.getMethod() : "") - .replace("{indexComment}", StringUtils.hasText(indexMetadata.getComment()) ? "COMMENT '" + indexMetadata.getComment() + "'" : "") - .toString(); - } - - public static String getPrimaryKeySql(List primaries) { - return "PRIMARY KEY ({primaries})" - .replace( - "{primaries}", - String.join(",", primaries) - ); - } -}