mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-30 19:22:58 +08:00
update
This commit is contained in:
@ -1,14 +1,16 @@
|
|||||||
package ai.chat2db.plugin.mysql;
|
package ai.chat2db.plugin.mysql;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.util.ArrayList;
|
import java.sql.ResultSet;
|
||||||
import java.util.Arrays;
|
import java.sql.SQLException;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import ai.chat2db.plugin.mysql.builder.MysqlSqlBuilder;
|
import ai.chat2db.plugin.mysql.builder.MysqlSqlBuilder;
|
||||||
import ai.chat2db.plugin.mysql.type.MysqlCharsetEnum;
|
import ai.chat2db.plugin.mysql.type.MysqlCharsetEnum;
|
||||||
import ai.chat2db.plugin.mysql.type.MysqlCollationEnum;
|
import ai.chat2db.plugin.mysql.type.MysqlCollationEnum;
|
||||||
import ai.chat2db.plugin.mysql.type.MysqlColumnTypeEnum;
|
import ai.chat2db.plugin.mysql.type.MysqlColumnTypeEnum;
|
||||||
|
import ai.chat2db.plugin.mysql.type.MysqlIndexTypeEnum;
|
||||||
import ai.chat2db.spi.MetaData;
|
import ai.chat2db.spi.MetaData;
|
||||||
import ai.chat2db.spi.SqlBuilder;
|
import ai.chat2db.spi.SqlBuilder;
|
||||||
import ai.chat2db.spi.jdbc.DefaultMetaService;
|
import ai.chat2db.spi.jdbc.DefaultMetaService;
|
||||||
@ -137,6 +139,65 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TableIndex> indexes(Connection connection, String databaseName, String schemaName, String tableName) {
|
||||||
|
StringBuilder queryBuf = new StringBuilder("SHOW INDEX FROM ");
|
||||||
|
queryBuf.append("`").append(tableName).append("`");
|
||||||
|
queryBuf.append(" FROM ");
|
||||||
|
queryBuf.append("`").append(databaseName).append("`");
|
||||||
|
return SQLExecutor.getInstance().execute(connection, queryBuf.toString(), resultSet -> {
|
||||||
|
LinkedHashMap<String, TableIndex> map = new LinkedHashMap();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
String keyName = resultSet.getString("Key_name");
|
||||||
|
TableIndex tableIndex = map.get(keyName);
|
||||||
|
if (tableIndex != null) {
|
||||||
|
List<TableIndexColumn> columnList = tableIndex.getColumnList();
|
||||||
|
columnList.add(getTableIndexColumn(resultSet));
|
||||||
|
columnList = columnList.stream().sorted(Comparator.comparing(TableIndexColumn::getOrdinalPosition))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
tableIndex.setColumnList(columnList);
|
||||||
|
} else {
|
||||||
|
TableIndex index = new TableIndex();
|
||||||
|
index.setDatabaseName(databaseName);
|
||||||
|
index.setSchemaName(schemaName);
|
||||||
|
index.setTableName(tableName);
|
||||||
|
index.setName(keyName);
|
||||||
|
index.setUnique(!resultSet.getBoolean("Non_unique"));
|
||||||
|
index.setType(resultSet.getString("Index_type"));
|
||||||
|
index.setComment(resultSet.getString("Index_comment"));
|
||||||
|
List<TableIndexColumn> tableIndexColumns = new ArrayList<>();
|
||||||
|
tableIndexColumns.add(getTableIndexColumn(resultSet));
|
||||||
|
index.setColumnList(tableIndexColumns);
|
||||||
|
if ("PRIMARY".equalsIgnoreCase(keyName)) {
|
||||||
|
index.setType(MysqlIndexTypeEnum.PRIMARY_KEY.getName());
|
||||||
|
} else if (index.getUnique()) {
|
||||||
|
index.setType(MysqlIndexTypeEnum.UNIQUE.getName());
|
||||||
|
} else if ("SPATIAL".equalsIgnoreCase(index.getType())) {
|
||||||
|
index.setType(MysqlIndexTypeEnum.SPATIAL.getName());
|
||||||
|
}else if("FULLTEXT".equalsIgnoreCase(index.getType())){
|
||||||
|
index.setType(MysqlIndexTypeEnum.FULLTEXT.getName());
|
||||||
|
}else {
|
||||||
|
index.setType(MysqlIndexTypeEnum.NORMAL.getName());
|
||||||
|
}
|
||||||
|
map.put(keyName, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map.values().stream().collect(Collectors.toList());
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private TableIndexColumn getTableIndexColumn(ResultSet resultSet) throws SQLException {
|
||||||
|
TableIndexColumn tableIndexColumn = new TableIndexColumn();
|
||||||
|
tableIndexColumn.setColumnName(resultSet.getString("Column_name"));
|
||||||
|
tableIndexColumn.setOrdinalPosition(resultSet.getShort("Seq_in_index"));
|
||||||
|
tableIndexColumn.setCollation(resultSet.getString("Collation"));
|
||||||
|
tableIndexColumn.setCardinality(resultSet.getLong("Cardinality"));
|
||||||
|
tableIndexColumn.setSubPart(resultSet.getLong("Sub_part"));
|
||||||
|
tableIndexColumn.setAscOrDesc(resultSet.getString("Collation"));
|
||||||
|
return tableIndexColumn;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SqlBuilder getSqlBuilder() {
|
public SqlBuilder getSqlBuilder() {
|
||||||
return new MysqlSqlBuilder();
|
return new MysqlSqlBuilder();
|
||||||
|
@ -108,5 +108,8 @@ public class TableIndexColumn {
|
|||||||
*/
|
*/
|
||||||
@JsonAlias({"FILTER_CONDITION"})
|
@JsonAlias({"FILTER_CONDITION"})
|
||||||
private String filterCondition;
|
private String filterCondition;
|
||||||
|
|
||||||
|
|
||||||
|
private Long subPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user