diff --git a/CHANGELOG.md b/CHANGELOG.md index b1db96b3..a25c7422 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# 2.0.4 + +## ๐Ÿž Bug Fixes +- Default return alias for returned results [Issue #270](https://github.com/chat2db/Chat2DB/issues/270) + +## ๐Ÿž ้—ฎ้ข˜ไฟฎๅค +- ่ฟ”ๅ›ž็ป“ๆžœ้ป˜่ฎค่ฟ”ๅ›žๅˆซๅ [Issue #270](https://github.com/chat2db/Chat2DB/issues/270) + # 2.0.4 ## โญ New Features - Support DB2 database diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java index 05ec209f..7dd50c3e 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import ai.chat2db.server.tools.base.constant.EasyToolsConstant; import ai.chat2db.spi.model.*; +import ai.chat2db.spi.util.ResultSetUtils; import cn.hutool.core.date.TimeInterval; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; @@ -57,13 +58,14 @@ public class SQLExecutor { /** * ๆ‰ง่กŒsql + * * @param connection * @param sql * @param function * @return */ - public R executeSql(Connection connection,String sql, Function function) { + public R executeSql(Connection connection, String sql, Function function) { if (StringUtils.isEmpty(sql)) { return null; } @@ -115,7 +117,7 @@ public class SQLExecutor { headerList.add(Header.builder() .dataType(ai.chat2db.spi.util.JdbcUtils.resolveDataType( resultSetMetaData.getColumnTypeName(i), resultSetMetaData.getColumnType(i)).getCode()) - .name(resultSetMetaData.getColumnName(i)) + .name(ResultSetUtils.getColumnName(resultSetMetaData, i)) .build()); } @@ -153,12 +155,13 @@ public class SQLExecutor { * @return * @throws SQLException */ - public ExecuteResult execute(Connection connection,String sql) throws SQLException { + public ExecuteResult execute(Connection connection, String sql) throws SQLException { return execute(sql, connection); } /** * ่Žทๅ–ๆ‰€ๆœ‰็š„ๆ•ฐๆฎๅบ“ + * * @param connection * @return */ @@ -178,12 +181,13 @@ public class SQLExecutor { /** * ่Žทๅ–ๆ‰€ๆœ‰็š„schema + * * @param connection * @param databaseName * @param schemaName * @return */ - public List> schemas(Connection connection,String databaseName, String schemaName) { + public List> schemas(Connection connection, String databaseName, String schemaName) { List> schemaList = Lists.newArrayList(); if (StringUtils.isEmpty(databaseName) && StringUtils.isEmpty(schemaName)) { try (ResultSet resultSet = connection.getMetaData().getSchemas()) { @@ -217,6 +221,7 @@ public class SQLExecutor { /** * ่Žทๅ–ๆ‰€ๆœ‰็š„ๆ•ฐๆฎๅบ“่กจ + * * @param connection * @param databaseName * @param schemaName @@ -224,7 +229,8 @@ public class SQLExecutor { * @param types * @return */ - public List tables(Connection connection,String databaseName, String schemaName, String tableName, String types[]) { + public List
tables(Connection connection, String databaseName, String schemaName, String tableName, + String types[]) { List
tables = Lists.newArrayList(); int n = 0; try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, schemaName, tableName, @@ -246,6 +252,7 @@ public class SQLExecutor { /** * ่Žทๅ–ๆ‰€ๆœ‰็š„ๆ•ฐๆฎๅบ“่กจๅˆ— + * * @param connection * @param databaseName * @param schemaName @@ -253,7 +260,8 @@ public class SQLExecutor { * @param columnName * @return */ - public List columns(Connection connection,String databaseName, String schemaName, String tableName, String columnName) { + public List columns(Connection connection, String databaseName, String schemaName, String tableName, + String columnName) { List tableColumns = Lists.newArrayList(); try (ResultSet resultSet = connection.getMetaData().getColumns(databaseName, schemaName, tableName, columnName)) { @@ -270,13 +278,14 @@ public class SQLExecutor { /** * ่Žทๅ–ๆ‰€ๆœ‰็š„ๆ•ฐๆฎๅบ“่กจ็ดขๅผ• + * * @param connection * @param databaseName * @param schemaName * @param tableName * @return */ - public List indexes(Connection connection,String databaseName, String schemaName, String tableName) { + public List indexes(Connection connection, String databaseName, String schemaName, String tableName) { List tableIndices = Lists.newArrayList(); try (ResultSet resultSet = connection.getMetaData().getIndexInfo(databaseName, schemaName, tableName, false, @@ -308,12 +317,13 @@ public class SQLExecutor { /** * ่Žทๅ–ๆ‰€ๆœ‰็š„ๅ‡ฝๆ•ฐ + * * @param connection * @param databaseName * @param schemaName * @return */ - public List functions(Connection connection,String databaseName, + public List functions(Connection connection, String databaseName, String schemaName) { List functions = Lists.newArrayList(); try (ResultSet resultSet = connection.getMetaData().getFunctions(databaseName, schemaName, null);) { @@ -328,12 +338,13 @@ public class SQLExecutor { /** * ่Žทๅ–ๆ‰€ๆœ‰็š„ๅญ˜ๅ‚จ่ฟ‡็จ‹ + * * @param connection * @param databaseName * @param schemaName * @return */ - public List procedures(Connection connection,String databaseName, String schemaName) { + public List procedures(Connection connection, String databaseName, String schemaName) { List procedures = Lists.newArrayList(); try (ResultSet resultSet = connection.getMetaData().getProcedures(databaseName, schemaName, null)) { while (resultSet != null && resultSet.next()) { diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/ResultSetUtils.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/ResultSetUtils.java index b11b10df..2d11f3be 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/ResultSetUtils.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/ResultSetUtils.java @@ -2,6 +2,7 @@ package ai.chat2db.spi.util; import java.sql.ResultSet; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import ai.chat2db.spi.model.*; @@ -16,12 +17,12 @@ public class ResultSetUtils { ai.chat2db.spi.model.Function function = new ai.chat2db.spi.model.Function(); try { - function.setDatabaseName(getString(resultSet,"FUNCTION_CAT")); - function.setSchemaName(getString(resultSet,"FUNCTION_SCHEM")); - function.setFunctionName(getString(resultSet,"FUNCTION_NAME")); - function.setRemarks(getString(resultSet,"REMARKS")); + function.setDatabaseName(getString(resultSet, "FUNCTION_CAT")); + function.setSchemaName(getString(resultSet, "FUNCTION_SCHEM")); + function.setFunctionName(getString(resultSet, "FUNCTION_NAME")); + function.setRemarks(getString(resultSet, "REMARKS")); function.setFunctionType(resultSet.getShort("FUNCTION_TYPE")); - function.setSpecificName(getString(resultSet,"SPECIFIC_NAME")); + function.setSpecificName(getString(resultSet, "SPECIFIC_NAME")); } catch (SQLException e) { throw new RuntimeException(e); } @@ -31,12 +32,12 @@ public class ResultSetUtils { public static Procedure buildProcedure(ResultSet resultSet) { Procedure procedure = new Procedure(); try { - procedure.setDatabaseName(getString(resultSet,"PROCEDURE_CAT")); - procedure.setSchemaName(getString(resultSet,"PROCEDURE_SCHEM")); - procedure.setProcedureName(getString(resultSet,"PROCEDURE_NAME")); - procedure.setRemarks(getString(resultSet,"REMARKS")); + procedure.setDatabaseName(getString(resultSet, "PROCEDURE_CAT")); + procedure.setSchemaName(getString(resultSet, "PROCEDURE_SCHEM")); + procedure.setProcedureName(getString(resultSet, "PROCEDURE_NAME")); + procedure.setRemarks(getString(resultSet, "REMARKS")); procedure.setProcedureType(resultSet.getShort("PROCEDURE_TYPE")); - procedure.setSpecificName(getString(resultSet,"SPECIFIC_NAME")); + procedure.setSpecificName(getString(resultSet, "SPECIFIC_NAME")); } catch (SQLException e) { throw new RuntimeException(e); } @@ -45,31 +46,31 @@ public class ResultSetUtils { public static TableIndexColumn buildTableIndexColumn(ResultSet resultSet) throws SQLException { TableIndexColumn tableIndexColumn = new TableIndexColumn(); - tableIndexColumn.setColumnName(getString(resultSet,"COLUMN_NAME")); - tableIndexColumn.setIndexName(getString(resultSet,"INDEX_NAME")); - tableIndexColumn.setAscOrDesc(getString(resultSet,"ASC_OR_DESC")); + tableIndexColumn.setColumnName(getString(resultSet, "COLUMN_NAME")); + tableIndexColumn.setIndexName(getString(resultSet, "INDEX_NAME")); + tableIndexColumn.setAscOrDesc(getString(resultSet, "ASC_OR_DESC")); tableIndexColumn.setCardinality(resultSet.getLong("CARDINALITY")); tableIndexColumn.setPages(resultSet.getLong("PAGES")); - tableIndexColumn.setFilterCondition(getString(resultSet,"FILTER_CONDITION")); - tableIndexColumn.setIndexQualifier(getString(resultSet,"INDEX_QUALIFIER")); + tableIndexColumn.setFilterCondition(getString(resultSet, "FILTER_CONDITION")); + tableIndexColumn.setIndexQualifier(getString(resultSet, "INDEX_QUALIFIER")); // tableIndexColumn.setIndexType(resultSet.getShort("TYPE")); tableIndexColumn.setNonUnique(resultSet.getBoolean("NON_UNIQUE")); tableIndexColumn.setOrdinalPosition(resultSet.getShort("ORDINAL_POSITION")); - tableIndexColumn.setDatabaseName(getString(resultSet,"TABLE_CAT")); - tableIndexColumn.setSchemaName(getString(resultSet,"TABLE_SCHEM")); - tableIndexColumn.setTableName(getString(resultSet,"TABLE_NAME")); + tableIndexColumn.setDatabaseName(getString(resultSet, "TABLE_CAT")); + tableIndexColumn.setSchemaName(getString(resultSet, "TABLE_SCHEM")); + tableIndexColumn.setTableName(getString(resultSet, "TABLE_NAME")); return tableIndexColumn; } public static TableColumn buildColumn(ResultSet resultSet) throws SQLException { TableColumn tableColumn = new TableColumn(); - tableColumn.setDatabaseName(getString(resultSet,"TABLE_CAT")); - tableColumn.setSchemaName(getString(resultSet,"TABLE_SCHEM")); - tableColumn.setTableName(getString(resultSet,"TABLE_NAME")); - tableColumn.setName(getString(resultSet,"COLUMN_NAME")); - tableColumn.setComment(getString(resultSet,"REMARKS")); - tableColumn.setDefaultValue(getString(resultSet,"COLUMN_DEF")); - tableColumn.setTypeName(getString(resultSet,"TYPE_NAME")); + tableColumn.setDatabaseName(getString(resultSet, "TABLE_CAT")); + tableColumn.setSchemaName(getString(resultSet, "TABLE_SCHEM")); + tableColumn.setTableName(getString(resultSet, "TABLE_NAME")); + tableColumn.setName(getString(resultSet, "COLUMN_NAME")); + tableColumn.setComment(getString(resultSet, "REMARKS")); + tableColumn.setDefaultValue(getString(resultSet, "COLUMN_DEF")); + tableColumn.setTypeName(getString(resultSet, "TYPE_NAME")); tableColumn.setColumnSize(resultSet.getInt("COLUMN_SIZE")); tableColumn.setDataType(resultSet.getInt("DATA_TYPE")); tableColumn.setNullable(resultSet.getInt("NULLABLE") == 1); @@ -85,22 +86,30 @@ public class ResultSetUtils { public static Table buildTable(ResultSet resultSet) throws SQLException { Table table = new Table(); - table.setName(getString(resultSet,"TABLE_NAME")); - table.setComment(getString(resultSet,"REMARKS")); - table.setDatabaseName(getString(resultSet,"TABLE_CAT")); - table.setSchemaName(getString(resultSet,"TABLE_SCHEM")); - table.setType(getString(resultSet,"TABLE_TYPE")); + table.setName(getString(resultSet, "TABLE_NAME")); + table.setComment(getString(resultSet, "REMARKS")); + table.setDatabaseName(getString(resultSet, "TABLE_CAT")); + table.setSchemaName(getString(resultSet, "TABLE_SCHEM")); + table.setType(getString(resultSet, "TABLE_TYPE")); return table; } - private static String getString(ResultSet resultSet,String name){ - if(resultSet == null){ + private static String getString(ResultSet resultSet, String name) { + if (resultSet == null) { return null; } try { return resultSet.getString(name); - }catch (Exception e){ + } catch (Exception e) { return null; } } + + public static String getColumnName(ResultSetMetaData resultSetMetaData, int column) throws SQLException { + String columnLabel = resultSetMetaData.getColumnLabel(column); + if (columnLabel != null) { + return columnLabel; + } + return resultSetMetaData.getColumnName(column); + } } \ No newline at end of file