mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-29 02:32:33 +08:00
update
This commit is contained in:
@ -1,14 +1,16 @@
|
||||
package ai.chat2db.plugin.mysql;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import ai.chat2db.plugin.mysql.builder.MysqlSqlBuilder;
|
||||
import ai.chat2db.plugin.mysql.type.MysqlCharsetEnum;
|
||||
import ai.chat2db.plugin.mysql.type.MysqlCollationEnum;
|
||||
import ai.chat2db.plugin.mysql.type.MysqlColumnTypeEnum;
|
||||
import ai.chat2db.plugin.mysql.type.MysqlIndexTypeEnum;
|
||||
import ai.chat2db.spi.MetaData;
|
||||
import ai.chat2db.spi.SqlBuilder;
|
||||
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
|
||||
public SqlBuilder getSqlBuilder() {
|
||||
return new MysqlSqlBuilder();
|
||||
|
Reference in New Issue
Block a user