- Default return alias for returned results [Issue #270](https://github.com/chat2db/Chat2DB/issues/270)

This commit is contained in:
JiaJu Zhuang
2023-07-18 20:18:34 +08:00
parent 0a6f332dc1
commit 725eac07ff
3 changed files with 70 additions and 42 deletions

View File

@ -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 # 2.0.4
## ⭐ New Features ## ⭐ New Features
- Support DB2 database - Support DB2 database

View File

@ -14,6 +14,7 @@ import java.util.stream.Collectors;
import ai.chat2db.server.tools.base.constant.EasyToolsConstant; import ai.chat2db.server.tools.base.constant.EasyToolsConstant;
import ai.chat2db.spi.model.*; import ai.chat2db.spi.model.*;
import ai.chat2db.spi.util.ResultSetUtils;
import cn.hutool.core.date.TimeInterval; import cn.hutool.core.date.TimeInterval;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -57,13 +58,14 @@ public class SQLExecutor {
/** /**
* 执行sql * 执行sql
*
* @param connection * @param connection
* @param sql * @param sql
* @param function * @param function
* @return * @return
*/ */
public <R> R executeSql(Connection connection,String sql, Function<ResultSet, R> function) { public <R> R executeSql(Connection connection, String sql, Function<ResultSet, R> function) {
if (StringUtils.isEmpty(sql)) { if (StringUtils.isEmpty(sql)) {
return null; return null;
} }
@ -115,7 +117,7 @@ public class SQLExecutor {
headerList.add(Header.builder() headerList.add(Header.builder()
.dataType(ai.chat2db.spi.util.JdbcUtils.resolveDataType( .dataType(ai.chat2db.spi.util.JdbcUtils.resolveDataType(
resultSetMetaData.getColumnTypeName(i), resultSetMetaData.getColumnType(i)).getCode()) resultSetMetaData.getColumnTypeName(i), resultSetMetaData.getColumnType(i)).getCode())
.name(resultSetMetaData.getColumnName(i)) .name(ResultSetUtils.getColumnName(resultSetMetaData, i))
.build()); .build());
} }
@ -153,12 +155,13 @@ public class SQLExecutor {
* @return * @return
* @throws SQLException * @throws SQLException
*/ */
public ExecuteResult execute(Connection connection,String sql) throws SQLException { public ExecuteResult execute(Connection connection, String sql) throws SQLException {
return execute(sql, connection); return execute(sql, connection);
} }
/** /**
* 获取所有的数据库 * 获取所有的数据库
*
* @param connection * @param connection
* @return * @return
*/ */
@ -178,12 +181,13 @@ public class SQLExecutor {
/** /**
* 获取所有的schema * 获取所有的schema
*
* @param connection * @param connection
* @param databaseName * @param databaseName
* @param schemaName * @param schemaName
* @return * @return
*/ */
public List<Map<String, String>> schemas(Connection connection,String databaseName, String schemaName) { public List<Map<String, String>> schemas(Connection connection, String databaseName, String schemaName) {
List<Map<String, String>> schemaList = Lists.newArrayList(); List<Map<String, String>> schemaList = Lists.newArrayList();
if (StringUtils.isEmpty(databaseName) && StringUtils.isEmpty(schemaName)) { if (StringUtils.isEmpty(databaseName) && StringUtils.isEmpty(schemaName)) {
try (ResultSet resultSet = connection.getMetaData().getSchemas()) { try (ResultSet resultSet = connection.getMetaData().getSchemas()) {
@ -217,6 +221,7 @@ public class SQLExecutor {
/** /**
* 获取所有的数据库表 * 获取所有的数据库表
*
* @param connection * @param connection
* @param databaseName * @param databaseName
* @param schemaName * @param schemaName
@ -224,7 +229,8 @@ public class SQLExecutor {
* @param types * @param types
* @return * @return
*/ */
public List<Table> tables(Connection connection,String databaseName, String schemaName, String tableName, String types[]) { public List<Table> tables(Connection connection, String databaseName, String schemaName, String tableName,
String types[]) {
List<Table> tables = Lists.newArrayList(); List<Table> tables = Lists.newArrayList();
int n = 0; int n = 0;
try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, schemaName, tableName, try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, schemaName, tableName,
@ -246,6 +252,7 @@ public class SQLExecutor {
/** /**
* 获取所有的数据库表列 * 获取所有的数据库表列
*
* @param connection * @param connection
* @param databaseName * @param databaseName
* @param schemaName * @param schemaName
@ -253,7 +260,8 @@ public class SQLExecutor {
* @param columnName * @param columnName
* @return * @return
*/ */
public List<TableColumn> columns(Connection connection,String databaseName, String schemaName, String tableName, String columnName) { public List<TableColumn> columns(Connection connection, String databaseName, String schemaName, String tableName,
String columnName) {
List<TableColumn> tableColumns = Lists.newArrayList(); List<TableColumn> tableColumns = Lists.newArrayList();
try (ResultSet resultSet = connection.getMetaData().getColumns(databaseName, schemaName, tableName, try (ResultSet resultSet = connection.getMetaData().getColumns(databaseName, schemaName, tableName,
columnName)) { columnName)) {
@ -270,13 +278,14 @@ public class SQLExecutor {
/** /**
* 获取所有的数据库表索引 * 获取所有的数据库表索引
*
* @param connection * @param connection
* @param databaseName * @param databaseName
* @param schemaName * @param schemaName
* @param tableName * @param tableName
* @return * @return
*/ */
public List<TableIndex> indexes(Connection connection,String databaseName, String schemaName, String tableName) { public List<TableIndex> indexes(Connection connection, String databaseName, String schemaName, String tableName) {
List<TableIndex> tableIndices = Lists.newArrayList(); List<TableIndex> tableIndices = Lists.newArrayList();
try (ResultSet resultSet = connection.getMetaData().getIndexInfo(databaseName, schemaName, tableName, try (ResultSet resultSet = connection.getMetaData().getIndexInfo(databaseName, schemaName, tableName,
false, false,
@ -308,12 +317,13 @@ public class SQLExecutor {
/** /**
* 获取所有的函数 * 获取所有的函数
*
* @param connection * @param connection
* @param databaseName * @param databaseName
* @param schemaName * @param schemaName
* @return * @return
*/ */
public List<ai.chat2db.spi.model.Function> functions(Connection connection,String databaseName, public List<ai.chat2db.spi.model.Function> functions(Connection connection, String databaseName,
String schemaName) { String schemaName) {
List<ai.chat2db.spi.model.Function> functions = Lists.newArrayList(); List<ai.chat2db.spi.model.Function> functions = Lists.newArrayList();
try (ResultSet resultSet = connection.getMetaData().getFunctions(databaseName, schemaName, null);) { try (ResultSet resultSet = connection.getMetaData().getFunctions(databaseName, schemaName, null);) {
@ -328,12 +338,13 @@ public class SQLExecutor {
/** /**
* 获取所有的存储过程 * 获取所有的存储过程
*
* @param connection * @param connection
* @param databaseName * @param databaseName
* @param schemaName * @param schemaName
* @return * @return
*/ */
public List<Procedure> procedures(Connection connection,String databaseName, String schemaName) { public List<Procedure> procedures(Connection connection, String databaseName, String schemaName) {
List<Procedure> procedures = Lists.newArrayList(); List<Procedure> procedures = Lists.newArrayList();
try (ResultSet resultSet = connection.getMetaData().getProcedures(databaseName, schemaName, null)) { try (ResultSet resultSet = connection.getMetaData().getProcedures(databaseName, schemaName, null)) {
while (resultSet != null && resultSet.next()) { while (resultSet != null && resultSet.next()) {

View File

@ -2,6 +2,7 @@
package ai.chat2db.spi.util; package ai.chat2db.spi.util;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import ai.chat2db.spi.model.*; import ai.chat2db.spi.model.*;
@ -16,12 +17,12 @@ public class ResultSetUtils {
ai.chat2db.spi.model.Function function ai.chat2db.spi.model.Function function
= new ai.chat2db.spi.model.Function(); = new ai.chat2db.spi.model.Function();
try { try {
function.setDatabaseName(getString(resultSet,"FUNCTION_CAT")); function.setDatabaseName(getString(resultSet, "FUNCTION_CAT"));
function.setSchemaName(getString(resultSet,"FUNCTION_SCHEM")); function.setSchemaName(getString(resultSet, "FUNCTION_SCHEM"));
function.setFunctionName(getString(resultSet,"FUNCTION_NAME")); function.setFunctionName(getString(resultSet, "FUNCTION_NAME"));
function.setRemarks(getString(resultSet,"REMARKS")); function.setRemarks(getString(resultSet, "REMARKS"));
function.setFunctionType(resultSet.getShort("FUNCTION_TYPE")); function.setFunctionType(resultSet.getShort("FUNCTION_TYPE"));
function.setSpecificName(getString(resultSet,"SPECIFIC_NAME")); function.setSpecificName(getString(resultSet, "SPECIFIC_NAME"));
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -31,12 +32,12 @@ public class ResultSetUtils {
public static Procedure buildProcedure(ResultSet resultSet) { public static Procedure buildProcedure(ResultSet resultSet) {
Procedure procedure = new Procedure(); Procedure procedure = new Procedure();
try { try {
procedure.setDatabaseName(getString(resultSet,"PROCEDURE_CAT")); procedure.setDatabaseName(getString(resultSet, "PROCEDURE_CAT"));
procedure.setSchemaName(getString(resultSet,"PROCEDURE_SCHEM")); procedure.setSchemaName(getString(resultSet, "PROCEDURE_SCHEM"));
procedure.setProcedureName(getString(resultSet,"PROCEDURE_NAME")); procedure.setProcedureName(getString(resultSet, "PROCEDURE_NAME"));
procedure.setRemarks(getString(resultSet,"REMARKS")); procedure.setRemarks(getString(resultSet, "REMARKS"));
procedure.setProcedureType(resultSet.getShort("PROCEDURE_TYPE")); procedure.setProcedureType(resultSet.getShort("PROCEDURE_TYPE"));
procedure.setSpecificName(getString(resultSet,"SPECIFIC_NAME")); procedure.setSpecificName(getString(resultSet, "SPECIFIC_NAME"));
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -45,31 +46,31 @@ public class ResultSetUtils {
public static TableIndexColumn buildTableIndexColumn(ResultSet resultSet) throws SQLException { public static TableIndexColumn buildTableIndexColumn(ResultSet resultSet) throws SQLException {
TableIndexColumn tableIndexColumn = new TableIndexColumn(); TableIndexColumn tableIndexColumn = new TableIndexColumn();
tableIndexColumn.setColumnName(getString(resultSet,"COLUMN_NAME")); tableIndexColumn.setColumnName(getString(resultSet, "COLUMN_NAME"));
tableIndexColumn.setIndexName(getString(resultSet,"INDEX_NAME")); tableIndexColumn.setIndexName(getString(resultSet, "INDEX_NAME"));
tableIndexColumn.setAscOrDesc(getString(resultSet,"ASC_OR_DESC")); tableIndexColumn.setAscOrDesc(getString(resultSet, "ASC_OR_DESC"));
tableIndexColumn.setCardinality(resultSet.getLong("CARDINALITY")); tableIndexColumn.setCardinality(resultSet.getLong("CARDINALITY"));
tableIndexColumn.setPages(resultSet.getLong("PAGES")); tableIndexColumn.setPages(resultSet.getLong("PAGES"));
tableIndexColumn.setFilterCondition(getString(resultSet,"FILTER_CONDITION")); tableIndexColumn.setFilterCondition(getString(resultSet, "FILTER_CONDITION"));
tableIndexColumn.setIndexQualifier(getString(resultSet,"INDEX_QUALIFIER")); tableIndexColumn.setIndexQualifier(getString(resultSet, "INDEX_QUALIFIER"));
// tableIndexColumn.setIndexType(resultSet.getShort("TYPE")); // tableIndexColumn.setIndexType(resultSet.getShort("TYPE"));
tableIndexColumn.setNonUnique(resultSet.getBoolean("NON_UNIQUE")); tableIndexColumn.setNonUnique(resultSet.getBoolean("NON_UNIQUE"));
tableIndexColumn.setOrdinalPosition(resultSet.getShort("ORDINAL_POSITION")); tableIndexColumn.setOrdinalPosition(resultSet.getShort("ORDINAL_POSITION"));
tableIndexColumn.setDatabaseName(getString(resultSet,"TABLE_CAT")); tableIndexColumn.setDatabaseName(getString(resultSet, "TABLE_CAT"));
tableIndexColumn.setSchemaName(getString(resultSet,"TABLE_SCHEM")); tableIndexColumn.setSchemaName(getString(resultSet, "TABLE_SCHEM"));
tableIndexColumn.setTableName(getString(resultSet,"TABLE_NAME")); tableIndexColumn.setTableName(getString(resultSet, "TABLE_NAME"));
return tableIndexColumn; return tableIndexColumn;
} }
public static TableColumn buildColumn(ResultSet resultSet) throws SQLException { public static TableColumn buildColumn(ResultSet resultSet) throws SQLException {
TableColumn tableColumn = new TableColumn(); TableColumn tableColumn = new TableColumn();
tableColumn.setDatabaseName(getString(resultSet,"TABLE_CAT")); tableColumn.setDatabaseName(getString(resultSet, "TABLE_CAT"));
tableColumn.setSchemaName(getString(resultSet,"TABLE_SCHEM")); tableColumn.setSchemaName(getString(resultSet, "TABLE_SCHEM"));
tableColumn.setTableName(getString(resultSet,"TABLE_NAME")); tableColumn.setTableName(getString(resultSet, "TABLE_NAME"));
tableColumn.setName(getString(resultSet,"COLUMN_NAME")); tableColumn.setName(getString(resultSet, "COLUMN_NAME"));
tableColumn.setComment(getString(resultSet,"REMARKS")); tableColumn.setComment(getString(resultSet, "REMARKS"));
tableColumn.setDefaultValue(getString(resultSet,"COLUMN_DEF")); tableColumn.setDefaultValue(getString(resultSet, "COLUMN_DEF"));
tableColumn.setTypeName(getString(resultSet,"TYPE_NAME")); tableColumn.setTypeName(getString(resultSet, "TYPE_NAME"));
tableColumn.setColumnSize(resultSet.getInt("COLUMN_SIZE")); tableColumn.setColumnSize(resultSet.getInt("COLUMN_SIZE"));
tableColumn.setDataType(resultSet.getInt("DATA_TYPE")); tableColumn.setDataType(resultSet.getInt("DATA_TYPE"));
tableColumn.setNullable(resultSet.getInt("NULLABLE") == 1); tableColumn.setNullable(resultSet.getInt("NULLABLE") == 1);
@ -85,22 +86,30 @@ public class ResultSetUtils {
public static Table buildTable(ResultSet resultSet) throws SQLException { public static Table buildTable(ResultSet resultSet) throws SQLException {
Table table = new Table(); Table table = new Table();
table.setName(getString(resultSet,"TABLE_NAME")); table.setName(getString(resultSet, "TABLE_NAME"));
table.setComment(getString(resultSet,"REMARKS")); table.setComment(getString(resultSet, "REMARKS"));
table.setDatabaseName(getString(resultSet,"TABLE_CAT")); table.setDatabaseName(getString(resultSet, "TABLE_CAT"));
table.setSchemaName(getString(resultSet,"TABLE_SCHEM")); table.setSchemaName(getString(resultSet, "TABLE_SCHEM"));
table.setType(getString(resultSet,"TABLE_TYPE")); table.setType(getString(resultSet, "TABLE_TYPE"));
return table; return table;
} }
private static String getString(ResultSet resultSet,String name){ private static String getString(ResultSet resultSet, String name) {
if(resultSet == null){ if (resultSet == null) {
return null; return null;
} }
try { try {
return resultSet.getString(name); return resultSet.getString(name);
}catch (Exception e){ } catch (Exception e) {
return null; 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);
}
} }