diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java index fc2db852..ec0275c1 100644 --- a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java +++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java @@ -33,35 +33,38 @@ public class DMMetaData extends DefaultMetaService implements MetaData { return "\"" + tableName + "\""; } - public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) { - String sql = """ - SELECT - (SELECT comments FROM user_tab_comments WHERE table_name = '%s') AS comments, - (SELECT dbms_metadata.get_ddl('TABLE', '%s', '%s') FROM dual) AS ddl - FROM dual; - """; + private static String tableDDL = "SELECT dbms_metadata.get_ddl('TABLE', '%s','%s') as ddl FROM dual ;"; + private static String tableComment = "select COMMENTS from dba_tab_comments where OWNER='%s' and TABLE_TYPE='TABLE' and TABLE_NAME='%s';"; + private static String columnComment = "SELECT COLNAME,COMMENT$ FROM SYS.SYSCOLUMNCOMMENTS where SCHNAME = '%s' and TVNAME = '%s' and TABLE_TYPE = 'TABLE';"; + + public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) { + String tableDDLSql = String.format(tableDDL, tableName, schemaName); + String tableCommentSql = String.format(tableComment, schemaName, tableName); + String columnCommentSql = String.format(columnComment, schemaName, tableName); StringBuilder ddlBuilder = new StringBuilder(); - String tableDDLSql = String.format(sql, tableName, tableName, schemaName); SQLExecutor.getInstance().execute(connection, tableDDLSql, resultSet -> { if (resultSet.next()) { String ddl = resultSet.getString("ddl"); - String comment = resultSet.getString("comments"); - if (StringUtils.isNotBlank(comment)) { - ddlBuilder.append(ddl).append("\n").append("COMMENT ON TABLE ").append(format(schemaName)) - .append(".").append(format(tableName)).append(" IS ").append("'").append(comment).append("';"); + ddlBuilder.append(ddl).append("\n"); + } + }); + SQLExecutor.getInstance().execute(connection, tableCommentSql, resultSet -> { + if (resultSet.next()) { + String comments = resultSet.getString("COMMENTS"); + if (Objects.nonNull(comments)) { + ddlBuilder.append("COMMENT ON TABLE ").append(format(schemaName)).append(".").append(format(tableName)) + .append(" IS ").append(comments).append(";").append("\n"); } } }); - String columnCommentsSql =String.format("select COLNAME,COMMENT$ from SYS.SYSCOLUMNCOMMENTS\n" + - "where SCHNAME = '%s' and TVNAME = '%s'and TABLE_TYPE = 'TABLE';", schemaName,tableName); - SQLExecutor.getInstance().execute(connection, columnCommentsSql, resultSet->{ - while (resultSet.next()) { - String columnName = resultSet.getString("COLNAME"); - String comment = resultSet.getString("COMMENT$"); - ddlBuilder.append("COMMENT ON COLUMN ").append(format(schemaName)).append(".").append(format(tableName)) - .append(".").append(format(columnName)).append(" IS ").append("'").append(comment).append("';").append("\n"); - } - }); + SQLExecutor.getInstance().execute(connection, columnCommentSql, resultSet -> { + while (resultSet.next()) { + String columnName = resultSet.getString("COLNAME"); + String comment = resultSet.getString("COMMENT$"); + ddlBuilder.append("COMMENT ON COLUMN ").append(format(schemaName)).append(".").append(format(tableName)) + .append(".").append(format(columnName)).append(" IS ").append("'").append(comment).append("';").append("\n"); + } + }); return ddlBuilder.toString(); } diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java index c802176e..626a60b4 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlMetaData.java @@ -125,8 +125,8 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData { String sql = "SHOW PROCEDURE STATUS WHERE Db = DATABASE()"; return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { ArrayList procedures = new ArrayList<>(); - Procedure procedure = new Procedure(); while (resultSet.next()){ + Procedure procedure = new Procedure(); procedure.setProcedureName(resultSet.getString("Name")); procedures.add(procedure); }