From c29db6aeaba309bc3559adb92dafcb5cd5fc9507 Mon Sep 17 00:00:00 2001 From: SwallowGG <1558143046@qq.com> Date: Thu, 9 Nov 2023 17:29:36 +0800 Subject: [PATCH] support add service name --- .../builder/OceanBaseSqlBuilder.java | 145 ++++++++ .../type/OceanBaseColumnTypeEnum.java | 336 ++++++++++++++++++ .../type/OceanBaseIndexTypeEnum.java | 133 +++++++ .../server/domain/api/model/DataSource.java | 11 + .../datasource/DataSourceCreateParam.java | 11 + .../datasource/DataSourceUpdateParam.java | 10 + .../core/impl/DataSourceServiceImpl.java | 42 ++- .../repository/entity/DataSourceDO.java | 11 + .../db/migration/V2_1_7__DATASOURCE.sql | 3 + .../request/DataSourceCreateRequest.java | 10 + .../request/DataSourceUpdateRequest.java | 10 + .../request/DataSourceCreateRequest.java | 12 + .../request/DataSourceUpdateRequest.java | 10 + .../data/source/vo/DataSourceVO.java | 11 + 14 files changed, 744 insertions(+), 11 deletions(-) create mode 100644 chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/OceanBaseSqlBuilder.java create mode 100644 chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseColumnTypeEnum.java create mode 100644 chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseIndexTypeEnum.java create mode 100644 chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_7__DATASOURCE.sql diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/OceanBaseSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/OceanBaseSqlBuilder.java new file mode 100644 index 00000000..a9ff9919 --- /dev/null +++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/OceanBaseSqlBuilder.java @@ -0,0 +1,145 @@ +//package ai.chat2db.plugin.oceanbase.builder; +// +//import ai.chat2db.plugin.oceanbase.type.OceanBaseColumnTypeEnum; +//import ai.chat2db.plugin.oceanbase.type.OceanBaseIndexTypeEnum; +//import ai.chat2db.spi.SqlBuilder; +//import ai.chat2db.spi.jdbc.DefaultSqlBuilder; +//import ai.chat2db.spi.model.*; +//import org.apache.commons.lang3.StringUtils; +// +//public class OceanBaseSqlBuilder extends DefaultSqlBuilder implements SqlBuilder { +// +// @Override +// public String buildCreateTableSql(Table table) { +// StringBuilder script = new StringBuilder(); +// script.append("CREATE TABLE "); +// if(StringUtils.isNotBlank(table.getDatabaseName())) { +// script.append("`").append(table.getName()).append("`").append("."); +// } +// script.append("`").append(table.getName()).append("`").append(" (").append("\n"); +// +// // append column +// for (TableColumn column : table.getColumnList()) { +// if(StringUtils.isBlank(column.getName())|| StringUtils.isBlank(column.getColumnType())){ +// continue; +// } +// OceanBaseColumnTypeEnum typeEnum = OceanBaseColumnTypeEnum.getByType(column.getColumnType()); +// script.append("\t").append(typeEnum.buildCreateColumnSql(column)).append(",\n"); +// } +// +// // append primary key and index +// for (TableIndex tableIndex : table.getIndexList()) { +// if(StringUtils.isBlank(tableIndex.getName())|| StringUtils.isBlank(tableIndex.getType())){ +// continue; +// } +// OceanBaseIndexTypeEnum mysqlIndexTypeEnum = OceanBaseIndexTypeEnum.getByType(tableIndex.getType()); +// script.append("\t").append("").append(mysqlIndexTypeEnum.buildIndexScript(tableIndex)).append(",\n"); +// } +// +// script = new StringBuilder(script.substring(0, script.length() - 2)); +// script.append("\n)"); +// +// +// if (StringUtils.isNotBlank(table.getEngine())) { +// script.append(" ENGINE=").append(table.getEngine()); +// } +// +// if (StringUtils.isNotBlank(table.getCharset())) { +// script.append(" DEFAULT CHARACTER SET=").append(table.getCharset()); +// } +// +// if (StringUtils.isNotBlank(table.getCollate())) { +// script.append(" COLLATE=").append(table.getCollate()); +// } +// +// if (table.getIncrementValue() != null) { +// script.append(" AUTO_INCREMENT=").append(table.getIncrementValue()); +// } +// +// if (StringUtils.isNotBlank(table.getComment())) { +// script.append(" COMMENT='").append(table.getComment()).append("'"); +// } +// +// if (StringUtils.isNotBlank(table.getPartition())) { +// script.append(" \n").append(table.getPartition()); +// } +// script.append(";"); +// +// return script.toString(); +// } +// +// @Override +// public String buildModifyTaleSql(Table oldTable, Table newTable) { +// StringBuilder script = new StringBuilder(); +// script.append("ALTER TABLE "); +// if(StringUtils.isNotBlank(oldTable.getDatabaseName())) { +// script.append("`").append(oldTable.getDatabaseName()).append("`").append("."); +// } +// script.append("`").append(oldTable.getName()).append("`").append("\n"); +// if (!StringUtils.equalsIgnoreCase(oldTable.getName(), newTable.getName())) { +// script.append("\t").append("RENAME TO ").append("`").append(newTable.getName()).append("`").append(",\n"); +// } +// if (!StringUtils.equalsIgnoreCase(oldTable.getComment(), newTable.getComment())) { +// script.append("\t").append("COMMENT=").append("'").append(newTable.getComment()).append("'").append(",\n"); +// } +// if (oldTable.getIncrementValue() != newTable.getIncrementValue()) { +// script.append("\t").append("AUTO_INCREMENT=").append(newTable.getIncrementValue()).append(",\n"); +// } +// +// // append modify column +// for (TableColumn tableColumn : newTable.getColumnList()) { +// if (StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType())&& StringUtils.isNotBlank(tableColumn.getName())){ +// OceanBaseColumnTypeEnum typeEnum = OceanBaseColumnTypeEnum.getByType(tableColumn.getColumnType()); +// script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n"); +// } +// } +// +// // append modify index +// for (TableIndex tableIndex : newTable.getIndexList()) { +// if (StringUtils.isNotBlank(tableIndex.getEditStatus()) && StringUtils.isNotBlank(tableIndex.getType())) { +// OceanBaseIndexTypeEnum mysqlIndexTypeEnum = OceanBaseIndexTypeEnum.getByType(tableIndex.getType()); +// script.append("\t").append(mysqlIndexTypeEnum.buildModifyIndex(tableIndex)).append(",\n"); +// } +// } +// if(script.length()>2) { +// script = new StringBuilder(script.substring(0, script.length() - 2)); +// script.append(";"); +// } +// +// return script.toString(); +// } +// +// +// +// @Override +// public String pageLimit(String sql, int offset, int pageNo, int pageSize) { +// StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14); +// sqlBuilder.append(sql); +// if (offset == 0) { +// sqlBuilder.append("\n LIMIT "); +// sqlBuilder.append(pageSize); +// } else { +// sqlBuilder.append("\n LIMIT "); +// sqlBuilder.append(offset); +// sqlBuilder.append(","); +// sqlBuilder.append(pageSize); +// } +// return sqlBuilder.toString(); +// } +// +// +// +// +// @Override +// public String buildCreateDatabaseSql(Database database) { +// StringBuilder sqlBuilder = new StringBuilder(); +// sqlBuilder.append("CREATE DATABASE `"+database.getName()+"`"); +// if (StringUtils.isNotBlank(database.getCharset())) { +// sqlBuilder.append(" DEFAULT CHARACTER SET=").append(database.getCharset()); +// } +// if (StringUtils.isNotBlank(database.getCollation())) { +// sqlBuilder.append(" COLLATE=").append(database.getCollation()); +// } +// return sqlBuilder.toString(); +// } +//} diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseColumnTypeEnum.java new file mode 100644 index 00000000..baca359b --- /dev/null +++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseColumnTypeEnum.java @@ -0,0 +1,336 @@ +//package ai.chat2db.plugin.oceanbase.type; +// +//import ai.chat2db.spi.ColumnBuilder; +//import ai.chat2db.spi.enums.EditStatus; +//import ai.chat2db.spi.model.ColumnType; +//import ai.chat2db.spi.model.TableColumn; +//import com.google.common.collect.Maps; +//import org.apache.commons.lang3.StringUtils; +// +//import java.util.Arrays; +//import java.util.List; +//import java.util.Map; +// +//public enum OceanBaseColumnTypeEnum implements ColumnBuilder { +// +// BIT("BIT", true, false, true, false, false, false, true, true, false, false), +// +// TINYINT("TINYINT", false, false, true, true, false, false, true, true, false, false), +// +// TINYINT_UNSIGNED("TINYINT UNSIGNED", false, false, true, true, false, false, true, true, false, false), +// +// SMALLINT("SMALLINT", false, false, true, true, false, false, true, true, false, false), +// +// SMALLINT_UNSIGNED("SMALLINT UNSIGNED", false, false, true, true, false, false, true, true, false, false), +// +// MEDIUMINT("MEDIUMINT", false, false, true, true, false, false, true, true, false, false), +// +// MEDIUMINT_UNSIGNED("MEDIUMINT UNSIGNED", false, false, true, true, false, false, true, true, false, false), +// +// INT("INT", false, false, true, true, false, false, true, true, false, false), +// +// +// INT_UNSIGNED("INT UNSIGNED", false, false, true, true, false, false, true, true, false, false), +// +// BIGINT("BIGINT", false, false, true, true, false, false, true, true, false, false), +// +// +// BIGINT_UNSIGNED("BIGINT UNSIGNED", false, false, true, true, false, false, true, true, false, false), +// +// +// DECIMAL("DECIMAL", true, true, true, false, false, false, true, true, false, false), +// +// DECIMAL_UNSIGNED("DECIMAL UNSIGNED", true, true, true, false, false, false, true, true, false, false), +// +// +// FLOAT("FLOAT", true, true, true, false, false, false, true, true, false, false), +// +// FLOAT_UNSIGNED("FLOAT UNSIGNED", true, true, true, false, false, false, true, true, false, false), +// +// DOUBLE("DOUBLE", true, true, true, false, false, false, true, true, false, false), +// +// DOUBLE_UNSIGNED("DOUBLE UNSIGNED", true, true, true, false, false, false, true, true, false, false), +// DATE("DATE", false, false, true, false, false, false, true, true, false, false), +// DATETIME("DATETIME", true, false, true, false, false, false, true, true, true, false), +// +// TIMESTAMP("TIMESTAMP", true, false, true, false, false, false, true, true, true, false), +// TIME("TIME", true, false, true, false, false, false, true, true, false, false), +// YEAR("YEAR", false, false, true, false, false, false, true, true, false, false), +// CHAR("CHAR", true, false, true, false, true, true, true, true, false, false), +// +// VARCHAR("VARCHAR", true, false, true, false, true, true, true, true, false, false), +// +// BINARY("BINARY", true, false, true, false, false, false, true, true, false, false), +// +// VARBINARY("VARBINARY", true, false, true, false, false, false, true, true, false, false), +// +// TINYBLOB("TINYBLOB", false, false, true, false, false, false, true, false, false, false), +// +// BLOB("BLOB", false, false, true, false, false, false, true, false, false, false), +// +// MEDIUMBLOB("MEDIUMBLOB", false, false, true, false, false, false, true, false, false, false), +// +// LONGBLOB("LONGBLOB", false, false, true, false, false, false, true, false, false, false), +// +// TINYTEXT("TINYTEXT", false, false, true, false, true, true, true, false, false, false), +// +// TEXT("TEXT", false, false, true, false, true, true, true, false, false, false), +// +// MEDIUMTEXT("MEDIUMTEXT", false, false, true, false, true, true, true, false, false, false), +// +// LONGTEXT("LONGTEXT", false, false, true, false, true, true, true, false, false, false), +// +// +// ENUM("ENUM", false, false, true, false, true, true, true, true, true, true), +// +// +// BOOL("BOOL", false, false, true, true, false, false, true, true, false, false), +// +// INTEGER("INTEGER", false, false, true, true, false, false, true, true, false, false), +// +// INTEGER_UNSIGNED("INTEGER UNSIGNED", false, false, true, true, false, false, true, true, false, false), +// +// REAL("REAL", true, true, true, false, false, false, true, true, false, false), +// +// SET("SET", false, false, true, false, true, true, true, true, true, true), +// +// +// GEOMETRY("GEOMETRY", false, false, true, false, false, false, true, false, false, false), +// +// POINT("POINT", false, false, true, false, false, false, true, false, false, false), +// +// LINESTRING("LINESTRING", false, false, true, false, false, false, true, false, false, false), +// +// POLYGON("POLYGON", false, false, true, false, false, false, true, false, false, false), +// +// MULTIPOINT("MULTIPOINT", false, false, true, false, false, false, true, false, false, false), +// +// MULTILINESTRING("MULTILINESTRING", false, false, true, false, false, false, true, false, false, false), +// +// MULTIPOLYGON("MULTIPOLYGON", false, false, true, false, false, false, true, false, false, false), +// +// GEOMETRYCOLLECTION("GEOMETRYCOLLECTION", false, false, true, false, false, false, true, false, false, false), +// +// JSON("JSON", false, false, true, false, false, false, true, false, false, false); +// +// private ColumnType columnType; +// +// public static OceanBaseColumnTypeEnum getByType(String dataType) { +// return COLUMN_TYPE_MAP.get(dataType.toUpperCase()); +// } +// +// public ColumnType getColumnType() { +// return columnType; +// } +// +// +// OceanBaseColumnTypeEnum(String dataTypeName, boolean supportLength, boolean supportScale, boolean supportNullable, boolean supportAutoIncrement, boolean supportCharset, boolean supportCollation, boolean supportComments, boolean supportDefaultValue, boolean supportExtent, boolean supportValue) { +// this.columnType = new ColumnType(dataTypeName, supportLength, supportScale, supportNullable, supportAutoIncrement, supportCharset, supportCollation, supportComments, supportDefaultValue, supportExtent,supportValue,false); +// } +// +// private static Map COLUMN_TYPE_MAP = Maps.newHashMap(); +// +// static { +// for (OceanBaseColumnTypeEnum value : OceanBaseColumnTypeEnum.values()) { +// COLUMN_TYPE_MAP.put(value.getColumnType().getTypeName(), value); +// } +// } +// +// +// @Override +// public String buildCreateColumnSql(TableColumn column) { +// OceanBaseColumnTypeEnum type = COLUMN_TYPE_MAP.get(column.getColumnType().toUpperCase()); +// if (type == null) { +// return ""; +// } +// StringBuilder script = new StringBuilder(); +// +// script.append("`").append(column.getName()).append("`").append(" "); +// +// script.append(buildDataType(column, type)).append(" "); +// +// script.append(buildCharset(column,type)).append(" "); +// +// script.append(buildCollation(column,type)).append(" "); +// +// script.append(buildNullable(column,type)).append(" "); +// +// script.append(buildDefaultValue(column,type)).append(" "); +// +// script.append(buildExt(column,type)).append(" "); +// +// script.append(buildAutoIncrement(column,type)).append(" "); +// +// script.append(buildComment(column,type)).append(" "); +// +// return script.toString(); +// } +// +// private String buildCharset(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.getColumnType().isSupportCharset() || StringUtils.isEmpty(column.getCharSetName())){ +// return ""; +// } +// return StringUtils.join("CHARACTER SET ",column.getCharSetName()); +// } +// +// private String buildCollation(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.getColumnType().isSupportCollation() || StringUtils.isEmpty(column.getCollationName())){ +// return ""; +// } +// return StringUtils.join("COLLATE ",column.getCollationName()); +// } +// +// @Override +// public String buildModifyColumn(TableColumn tableColumn) { +// +// if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { +// return StringUtils.join("DROP COLUMN `", tableColumn.getName() + "`"); +// } +// if (EditStatus.ADD.name().equals(tableColumn.getEditStatus())) { +// return StringUtils.join("ADD COLUMN ", buildCreateColumnSql(tableColumn)); +// } +// if (EditStatus.MODIFY.name().equals(tableColumn.getEditStatus())) { +// if (!StringUtils.equalsIgnoreCase(tableColumn.getOldName(), tableColumn.getName())) { +// return StringUtils.join("CHANGE COLUMN `", tableColumn.getOldName(), "` ", buildCreateColumnSql(tableColumn)); +// } else { +// return StringUtils.join("MODIFY COLUMN ", buildCreateColumnSql(tableColumn)); +// } +// } +// return ""; +// } +// +// private String buildAutoIncrement(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.getColumnType().isSupportAutoIncrement()){ +// return ""; +// } +// if (column.getAutoIncrement() != null && column.getAutoIncrement()) { +// return "AUTO_INCREMENT"; +// } +// return ""; +// } +// +// private String buildComment(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.columnType.isSupportComments() || StringUtils.isEmpty(column.getComment())){ +// return ""; +// } +// return StringUtils.join("COMMENT '",column.getComment(),"'"); +// } +// +// private String buildExt(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.columnType.isSupportExtent() || StringUtils.isEmpty(column.getExtent())){ +// return ""; +// } +// return column.getComment(); +// } +// +// private String buildDefaultValue(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.getColumnType().isSupportDefaultValue() || StringUtils.isEmpty(column.getDefaultValue())){ +// return ""; +// } +// +// if("EMPTY_STRING".equalsIgnoreCase(column.getDefaultValue().trim())){ +// return StringUtils.join("DEFAULT ''"); +// } +// +// if("NULL".equalsIgnoreCase(column.getDefaultValue().trim())){ +// return StringUtils.join("DEFAULT NULL"); +// } +// +// if(Arrays.asList(CHAR,VARCHAR,BINARY,VARBINARY, SET,ENUM).contains(type)){ +// return StringUtils.join("DEFAULT '",column.getDefaultValue(),"'"); +// } +// +// if(Arrays.asList(DATE,TIME,YEAR).contains(type)){ +// return StringUtils.join("DEFAULT '",column.getDefaultValue(),"'"); +// } +// +// if(Arrays.asList(DATETIME,TIMESTAMP).contains(type)){ +// if("CURRENT_TIMESTAMP".equalsIgnoreCase(column.getDefaultValue().trim())){ +// return StringUtils.join("DEFAULT ",column.getDefaultValue()); +// } +// return StringUtils.join("DEFAULT '",column.getDefaultValue(),"'"); +// } +// +// return StringUtils.join("DEFAULT ",column.getDefaultValue()); +// } +// +// private String buildNullable(TableColumn column, OceanBaseColumnTypeEnum type) { +// if(!type.getColumnType().isSupportNullable()){ +// return ""; +// } +// if (column.getNullable()!=null && 1==column.getNullable()) { +// return "NULL"; +// } else { +// return "NOT NULL"; +// } +// } +// +// private String buildDataType(TableColumn column, OceanBaseColumnTypeEnum type) { +// String columnType = type.columnType.getTypeName(); +// if (Arrays.asList(BINARY, VARBINARY, VARCHAR, CHAR).contains(type)) { +// return StringUtils.join(columnType, "(", column.getColumnSize(), ")"); +// } +// +// if (BIT.equals(type)) { +// return StringUtils.join(columnType, "(", column.getColumnSize(), ")"); +// } +// +// if (Arrays.asList(TIME, DATETIME, TIMESTAMP).contains(type)) { +// if (column.getColumnSize() == null || column.getColumnSize() == 0) { +// return columnType; +// } else { +// return StringUtils.join(columnType, "(", column.getColumnSize(), ")"); +// } +// } +// +// +// if (Arrays.asList(DECIMAL, FLOAT, DOUBLE).contains(type)) { +// if (column.getColumnSize() == null || column.getDecimalDigits() == null) { +// return columnType; +// } +// if (column.getColumnSize() != null && column.getDecimalDigits() == null) { +// return StringUtils.join(columnType, "(", column.getColumnSize() + ")"); +// } +// if (column.getColumnSize() != null && column.getDecimalDigits() != null) { +// return StringUtils.join(columnType, "(", column.getColumnSize() + "," + column.getDecimalDigits() + ")"); +// } +// } +// +// if (Arrays.asList(DECIMAL_UNSIGNED, FLOAT_UNSIGNED, DECIMAL_UNSIGNED).contains(type)) { +// if (column.getColumnSize() == null || column.getDecimalDigits() == null) { +// return columnType; +// } +// if (column.getColumnSize() != null && column.getDecimalDigits() == null) { +// return unsignedDataType(columnType, "(" + column.getColumnSize() + ")"); +// } +// if (column.getColumnSize() != null && column.getDecimalDigits() != null) { +// return unsignedDataType(columnType, "(" + column.getColumnSize() + "," + column.getDecimalDigits() + ")"); +// } +// } +// +// if(Arrays.asList(SET,ENUM).contains(type)){ +// if(!StringUtils.isEmpty( column.getValue())){ +// return StringUtils.join(columnType,"(",column.getValue(),")"); +// } +// //List enumList = column. +// } +// +// return columnType; +// } +// +// private String unsignedDataType(String dataTypeName, String middle) { +// String[] split = dataTypeName.split(" "); +// if (split.length == 2) { +// return StringUtils.join(split[0], middle, split[1]); +// } +// return StringUtils.join(dataTypeName, middle); +// } +// +// public static List getTypes(){ +// return Arrays.stream(OceanBaseColumnTypeEnum.values()).map(columnTypeEnum -> +// columnTypeEnum.getColumnType() +// ).toList(); +// } +// +// +//} diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseIndexTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseIndexTypeEnum.java new file mode 100644 index 00000000..be9268d6 --- /dev/null +++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/type/OceanBaseIndexTypeEnum.java @@ -0,0 +1,133 @@ +//package ai.chat2db.plugin.oceanbase.type; +// +//import ai.chat2db.spi.enums.EditStatus; +//import ai.chat2db.spi.model.IndexType; +//import ai.chat2db.spi.model.TableIndex; +//import ai.chat2db.spi.model.TableIndexColumn; +//import org.apache.commons.lang3.StringUtils; +// +//import java.util.Arrays; +//import java.util.List; +// +//public enum OceanBaseIndexTypeEnum { +// +// PRIMARY_KEY("Primary", "PRIMARY KEY"), +// +// NORMAL("Normal", "INDEX"), +// +// UNIQUE("Unique", "UNIQUE INDEX"), +// +// FULLTEXT("Fulltext", "FULLTEXT INDEX"), +// +// SPATIAL("Spatial", "SPATIAL INDEX"); +// +// public String getName() { +// return name; +// } +// +// private String name; +// +// +// public String getKeyword() { +// return keyword; +// } +// +// private String keyword; +// +// public IndexType getIndexType() { +// return indexType; +// } +// +// public void setIndexType(IndexType indexType) { +// this.indexType = indexType; +// } +// +// private IndexType indexType; +// +// OceanBaseIndexTypeEnum(String name, String keyword) { +// this.name = name; +// this.keyword = keyword; +// this.indexType = new IndexType(name); +// } +// +// +// public static OceanBaseIndexTypeEnum getByType(String type) { +// for (OceanBaseIndexTypeEnum value : OceanBaseIndexTypeEnum.values()) { +// if (value.name.equalsIgnoreCase(type)) { +// return value; +// } +// } +// return null; +// } +// +// public String buildIndexScript(TableIndex tableIndex) { +// StringBuilder script = new StringBuilder(); +// +// script.append(keyword).append(" "); +// +// script.append(buildIndexName(tableIndex)).append(" "); +// +// script.append(buildIndexColumn(tableIndex)).append(" "); +// +// script.append(buildIndexComment(tableIndex)).append(" "); +// +// return script.toString(); +// } +// +// private String buildIndexComment(TableIndex tableIndex) { +// if(StringUtils.isBlank(tableIndex.getComment())){ +// return ""; +// }else { +// return StringUtils.join("COMMENT '",tableIndex.getComment(),"'"); +// } +// +// } +// +// private String buildIndexColumn(TableIndex tableIndex) { +// StringBuilder script = new StringBuilder(); +// script.append("("); +// for (TableIndexColumn column : tableIndex.getColumnList()) { +// if(StringUtils.isNotBlank(column.getColumnName())) { +// script.append("`").append(column.getColumnName()).append("`"); +// if (!StringUtils.isBlank(column.getAscOrDesc()) && !PRIMARY_KEY.equals(this)) { +// script.append(" ").append(column.getAscOrDesc()); +// } +// script.append(","); +// } +// } +// script.deleteCharAt(script.length() - 1); +// script.append(")"); +// return script.toString(); +// } +// +// private String buildIndexName(TableIndex tableIndex) { +// if(this.equals(PRIMARY_KEY)){ +// return ""; +// }else { +// return "`"+tableIndex.getName()+"`"; +// } +// } +// +// public String buildModifyIndex(TableIndex tableIndex) { +// if (EditStatus.DELETE.name().equals(tableIndex.getEditStatus())) { +// return buildDropIndex(tableIndex); +// } +// if (EditStatus.MODIFY.name().equals(tableIndex.getEditStatus())) { +// return StringUtils.join(buildDropIndex(tableIndex),",\n", "ADD ", buildIndexScript(tableIndex)); +// } +// if (EditStatus.ADD.name().equals(tableIndex.getEditStatus())) { +// return StringUtils.join("ADD ", buildIndexScript(tableIndex)); +// } +// return ""; +// } +// +// private String buildDropIndex(TableIndex tableIndex) { +// if (OceanBaseIndexTypeEnum.PRIMARY_KEY.getName().equals(tableIndex.getType())) { +// return StringUtils.join("DROP PRIMARY KEY"); +// } +// return StringUtils.join("DROP INDEX `", tableIndex.getOldName(),"`"); +// } +// public static List getIndexTypes() { +// return Arrays.asList(OceanBaseIndexTypeEnum.values()).stream().map(OceanBaseIndexTypeEnum::getIndexType).collect(java.util.stream.Collectors.toList()); +// } +//} diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java index ed3d9bec..930aa7f8 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java @@ -132,6 +132,17 @@ public class DataSource { */ private String kind; + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; + public LinkedHashMap getExtendMap() { if (ObjectUtils.isEmpty(extendInfo)) { return new LinkedHashMap<>(); diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceCreateParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceCreateParam.java index c86e357f..373f25eb 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceCreateParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceCreateParam.java @@ -108,4 +108,15 @@ public class DataSourceCreateParam { */ @NotNull private Long environmentId; + + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceUpdateParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceUpdateParam.java index 41558288..2aa39e3b 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceUpdateParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourceUpdateParam.java @@ -104,4 +104,14 @@ public class DataSourceUpdateParam { */ private DriverConfig driverConfig; + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; + } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java index 9d99de06..793c7b8b 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java @@ -107,7 +107,7 @@ public class DataSourceServiceImpl implements DataSourceService { return; } try (Connection connection = IDriverManager.getConnection(dataSource.getUrl(), dataSource.getUserName(), - dataSource.getPassword(), dataSource.getDriverConfig(), dataSource.getExtendMap())) { + dataSource.getPassword(), dataSource.getDriverConfig(), dataSource.getExtendMap())) { DatabaseQueryAllParam databaseQueryAllParam = new DatabaseQueryAllParam(); databaseQueryAllParam.setDataSourceId(dataSourceId); databaseQueryAllParam.setConnection(connection); @@ -184,8 +184,8 @@ public class DataSourceServiceImpl implements DataSourceService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(param.getSearchKey())) { queryWrapper.and(wrapper -> wrapper.like(DataSourceDO::getAlias, "%" + param.getSearchKey() + "%") - .or() - .like(DataSourceDO::getUrl, "%" + param.getSearchKey() + "%")); + .or() + .like(DataSourceDO::getUrl, "%" + param.getSearchKey() + "%")); } Integer start = param.getPageNo(); Integer offset = param.getPageSize(); @@ -203,9 +203,9 @@ public class DataSourceServiceImpl implements DataSourceService { LoginUser loginUser = ContextUtils.getLoginUser(); IPage iPage = dataSourceCustomMapper.selectPageWithPermission( - new Page<>(param.getPageNo(), param.getPageSize()), - BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey(), param.getKind(), - EasySqlUtils.orderBy(param.getOrderByList())); + new Page<>(param.getPageNo(), param.getPageSize()), + BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey(), param.getKind(), + EasySqlUtils.orderBy(param.getOrderByList())); List dataSources = dataSourceConverter.do2dto(iPage.getRecords()); @@ -235,18 +235,18 @@ public class DataSourceServiceImpl implements DataSourceService { @Override public ActionResult preConnect(DataSourcePreConnectParam param) { DataSourceTestParam testParam - = dataSourceConverter.param2param(param); + = dataSourceConverter.param2param(param); DriverConfig driverConfig = testParam.getDriverConfig(); if (driverConfig == null || !driverConfig.notEmpty()) { driverConfig = Chat2DBContext.getDefaultDriverConfig(param.getType()); } DataSourceConnect dataSourceConnect = JdbcUtils.testConnect(testParam.getUrl(), testParam.getHost(), - testParam.getPort(), - testParam.getUsername(), testParam.getPassword(), testParam.getDbType(), - driverConfig, param.getSsh(), KeyValue.toMap(param.getExtendInfo())); + testParam.getPort(), + testParam.getUsername(), testParam.getPassword(), testParam.getDbType(), + driverConfig, param.getSsh(), KeyValue.toMap(param.getExtendInfo())); if (BooleanUtils.isNotTrue(dataSourceConnect.getSuccess())) { return ActionResult.fail(dataSourceConnect.getMessage(), dataSourceConnect.getDescription(), - dataSourceConnect.getErrorDetail()); + dataSourceConnect.getErrorDetail()); } return ActionResult.isSuccess(); } @@ -273,6 +273,26 @@ public class DataSourceServiceImpl implements DataSourceService { } fillEnvironment(list, selector); + + fillExtendInfo(list); + } + + private void fillExtendInfo(List list) { + for (DataSource dataSource : list) { + List keyValues = dataSource.getExtendInfo(); + if (CollectionUtils.isEmpty(keyValues)) { + continue; + } + for (KeyValue keyValue : keyValues) { + if (keyValue != null) { + if ("serviceName".equalsIgnoreCase(keyValue.getKey())) { + + } + } + } + + } + } private void fillEnvironment(List list, DataSourceSelector selector) { diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/DataSourceDO.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/DataSourceDO.java index c01cbb90..88c4e10f 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/DataSourceDO.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/DataSourceDO.java @@ -128,4 +128,15 @@ public class DataSourceDO implements Serializable { * 连接类型 */ private String kind; + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; + } diff --git a/chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_7__DATASOURCE.sql b/chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_7__DATASOURCE.sql new file mode 100644 index 00000000..c276fadf --- /dev/null +++ b/chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_7__DATASOURCE.sql @@ -0,0 +1,3 @@ +ALTER TABLE `data_source` ADD COLUMN `service_name` varchar(128) NULL COMMENT '服务名'; +ALTER TABLE `data_source` ADD COLUMN `service_type` varchar(128) NULL COMMENT '服务类型'; + diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java index b8606a5e..bd655728 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java @@ -102,5 +102,15 @@ public class DataSourceCreateRequest { @NotNull private Long environmentId; + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; + } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java index ae779838..dd754ded 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java @@ -105,4 +105,14 @@ public class DataSourceUpdateRequest { */ @NotNull private Long environmentId; + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceCreateRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceCreateRequest.java index 078fd89d..4a8ee6f5 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceCreateRequest.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceCreateRequest.java @@ -105,4 +105,16 @@ public class DataSourceCreateRequest { @NotNull private Long environmentId; + + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; + } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceUpdateRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceUpdateRequest.java index 57a7e425..c10fa18a 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceUpdateRequest.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/request/DataSourceUpdateRequest.java @@ -106,4 +106,14 @@ public class DataSourceUpdateRequest { * 驱动配置 */ private DriverConfig driverConfig; + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java index 363fc53b..a8c9531b 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java @@ -117,4 +117,15 @@ public class DataSourceVO { * @see ai.chat2db.server.domain.api.enums.DataSourceKindEnum */ private String kind; + + + /** + * 服务名称 + */ + private String serviceName; + + /** + * 服务类型 + */ + private String serviceType; }