mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-29 18:53:12 +08:00
support add service name
This commit is contained in:
@ -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();
|
||||||
|
// }
|
||||||
|
//}
|
@ -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<String, OceanBaseColumnTypeEnum> 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<String> 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<ColumnType> getTypes(){
|
||||||
|
// return Arrays.stream(OceanBaseColumnTypeEnum.values()).map(columnTypeEnum ->
|
||||||
|
// columnTypeEnum.getColumnType()
|
||||||
|
// ).toList();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//}
|
@ -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<IndexType> getIndexTypes() {
|
||||||
|
// return Arrays.asList(OceanBaseIndexTypeEnum.values()).stream().map(OceanBaseIndexTypeEnum::getIndexType).collect(java.util.stream.Collectors.toList());
|
||||||
|
// }
|
||||||
|
//}
|
@ -132,6 +132,17 @@ public class DataSource {
|
|||||||
*/
|
*/
|
||||||
private String kind;
|
private String kind;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
|
|
||||||
public LinkedHashMap<String, Object> getExtendMap() {
|
public LinkedHashMap<String, Object> getExtendMap() {
|
||||||
if (ObjectUtils.isEmpty(extendInfo)) {
|
if (ObjectUtils.isEmpty(extendInfo)) {
|
||||||
return new LinkedHashMap<>();
|
return new LinkedHashMap<>();
|
||||||
|
@ -108,4 +108,15 @@ public class DataSourceCreateParam {
|
|||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
private Long environmentId;
|
private Long environmentId;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
}
|
}
|
||||||
|
@ -104,4 +104,14 @@ public class DataSourceUpdateParam {
|
|||||||
*/
|
*/
|
||||||
private DriverConfig driverConfig;
|
private DriverConfig driverConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ public class DataSourceServiceImpl implements DataSourceService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try (Connection connection = IDriverManager.getConnection(dataSource.getUrl(), dataSource.getUserName(),
|
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 databaseQueryAllParam = new DatabaseQueryAllParam();
|
||||||
databaseQueryAllParam.setDataSourceId(dataSourceId);
|
databaseQueryAllParam.setDataSourceId(dataSourceId);
|
||||||
databaseQueryAllParam.setConnection(connection);
|
databaseQueryAllParam.setConnection(connection);
|
||||||
@ -184,8 +184,8 @@ public class DataSourceServiceImpl implements DataSourceService {
|
|||||||
LambdaQueryWrapper<DataSourceDO> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<DataSourceDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
if (StringUtils.isNotBlank(param.getSearchKey())) {
|
if (StringUtils.isNotBlank(param.getSearchKey())) {
|
||||||
queryWrapper.and(wrapper -> wrapper.like(DataSourceDO::getAlias, "%" + param.getSearchKey() + "%")
|
queryWrapper.and(wrapper -> wrapper.like(DataSourceDO::getAlias, "%" + param.getSearchKey() + "%")
|
||||||
.or()
|
.or()
|
||||||
.like(DataSourceDO::getUrl, "%" + param.getSearchKey() + "%"));
|
.like(DataSourceDO::getUrl, "%" + param.getSearchKey() + "%"));
|
||||||
}
|
}
|
||||||
Integer start = param.getPageNo();
|
Integer start = param.getPageNo();
|
||||||
Integer offset = param.getPageSize();
|
Integer offset = param.getPageSize();
|
||||||
@ -203,9 +203,9 @@ public class DataSourceServiceImpl implements DataSourceService {
|
|||||||
LoginUser loginUser = ContextUtils.getLoginUser();
|
LoginUser loginUser = ContextUtils.getLoginUser();
|
||||||
|
|
||||||
IPage<DataSourceDO> iPage = dataSourceCustomMapper.selectPageWithPermission(
|
IPage<DataSourceDO> iPage = dataSourceCustomMapper.selectPageWithPermission(
|
||||||
new Page<>(param.getPageNo(), param.getPageSize()),
|
new Page<>(param.getPageNo(), param.getPageSize()),
|
||||||
BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey(), param.getKind(),
|
BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey(), param.getKind(),
|
||||||
EasySqlUtils.orderBy(param.getOrderByList()));
|
EasySqlUtils.orderBy(param.getOrderByList()));
|
||||||
|
|
||||||
List<DataSource> dataSources = dataSourceConverter.do2dto(iPage.getRecords());
|
List<DataSource> dataSources = dataSourceConverter.do2dto(iPage.getRecords());
|
||||||
|
|
||||||
@ -235,18 +235,18 @@ public class DataSourceServiceImpl implements DataSourceService {
|
|||||||
@Override
|
@Override
|
||||||
public ActionResult preConnect(DataSourcePreConnectParam param) {
|
public ActionResult preConnect(DataSourcePreConnectParam param) {
|
||||||
DataSourceTestParam testParam
|
DataSourceTestParam testParam
|
||||||
= dataSourceConverter.param2param(param);
|
= dataSourceConverter.param2param(param);
|
||||||
DriverConfig driverConfig = testParam.getDriverConfig();
|
DriverConfig driverConfig = testParam.getDriverConfig();
|
||||||
if (driverConfig == null || !driverConfig.notEmpty()) {
|
if (driverConfig == null || !driverConfig.notEmpty()) {
|
||||||
driverConfig = Chat2DBContext.getDefaultDriverConfig(param.getType());
|
driverConfig = Chat2DBContext.getDefaultDriverConfig(param.getType());
|
||||||
}
|
}
|
||||||
DataSourceConnect dataSourceConnect = JdbcUtils.testConnect(testParam.getUrl(), testParam.getHost(),
|
DataSourceConnect dataSourceConnect = JdbcUtils.testConnect(testParam.getUrl(), testParam.getHost(),
|
||||||
testParam.getPort(),
|
testParam.getPort(),
|
||||||
testParam.getUsername(), testParam.getPassword(), testParam.getDbType(),
|
testParam.getUsername(), testParam.getPassword(), testParam.getDbType(),
|
||||||
driverConfig, param.getSsh(), KeyValue.toMap(param.getExtendInfo()));
|
driverConfig, param.getSsh(), KeyValue.toMap(param.getExtendInfo()));
|
||||||
if (BooleanUtils.isNotTrue(dataSourceConnect.getSuccess())) {
|
if (BooleanUtils.isNotTrue(dataSourceConnect.getSuccess())) {
|
||||||
return ActionResult.fail(dataSourceConnect.getMessage(), dataSourceConnect.getDescription(),
|
return ActionResult.fail(dataSourceConnect.getMessage(), dataSourceConnect.getDescription(),
|
||||||
dataSourceConnect.getErrorDetail());
|
dataSourceConnect.getErrorDetail());
|
||||||
}
|
}
|
||||||
return ActionResult.isSuccess();
|
return ActionResult.isSuccess();
|
||||||
}
|
}
|
||||||
@ -273,6 +273,26 @@ public class DataSourceServiceImpl implements DataSourceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fillEnvironment(list, selector);
|
fillEnvironment(list, selector);
|
||||||
|
|
||||||
|
fillExtendInfo(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillExtendInfo(List<DataSource> list) {
|
||||||
|
for (DataSource dataSource : list) {
|
||||||
|
List<KeyValue> keyValues = dataSource.getExtendInfo();
|
||||||
|
if (CollectionUtils.isEmpty(keyValues)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (KeyValue keyValue : keyValues) {
|
||||||
|
if (keyValue != null) {
|
||||||
|
if ("serviceName".equalsIgnoreCase(keyValue.getKey())) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillEnvironment(List<DataSource> list, DataSourceSelector selector) {
|
private void fillEnvironment(List<DataSource> list, DataSourceSelector selector) {
|
||||||
|
@ -128,4 +128,15 @@ public class DataSourceDO implements Serializable {
|
|||||||
* 连接类型
|
* 连接类型
|
||||||
*/
|
*/
|
||||||
private String kind;
|
private String kind;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 '服务类型';
|
||||||
|
|
@ -102,5 +102,15 @@ public class DataSourceCreateRequest {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private Long environmentId;
|
private Long environmentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -105,4 +105,14 @@ public class DataSourceUpdateRequest {
|
|||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
private Long environmentId;
|
private Long environmentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
}
|
}
|
||||||
|
@ -105,4 +105,16 @@ public class DataSourceCreateRequest {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private Long environmentId;
|
private Long environmentId;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -106,4 +106,14 @@ public class DataSourceUpdateRequest {
|
|||||||
* 驱动配置
|
* 驱动配置
|
||||||
*/
|
*/
|
||||||
private DriverConfig driverConfig;
|
private DriverConfig driverConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
}
|
}
|
||||||
|
@ -117,4 +117,15 @@ public class DataSourceVO {
|
|||||||
* @see ai.chat2db.server.domain.api.enums.DataSourceKindEnum
|
* @see ai.chat2db.server.domain.api.enums.DataSourceKindEnum
|
||||||
*/
|
*/
|
||||||
private String kind;
|
private String kind;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务名称
|
||||||
|
*/
|
||||||
|
private String serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务类型
|
||||||
|
*/
|
||||||
|
private String serviceType;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user