diff --git a/catalogs/catalog-jdbc-doris/src/main/java/com/datastrato/gravitino/catalog/doris/operation/DorisDatabaseOperations.java b/catalogs/catalog-jdbc-doris/src/main/java/com/datastrato/gravitino/catalog/doris/operation/DorisDatabaseOperations.java index 4688a7b761b..132cd1af92a 100644 --- a/catalogs/catalog-jdbc-doris/src/main/java/com/datastrato/gravitino/catalog/doris/operation/DorisDatabaseOperations.java +++ b/catalogs/catalog-jdbc-doris/src/main/java/com/datastrato/gravitino/catalog/doris/operation/DorisDatabaseOperations.java @@ -15,28 +15,31 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; /** Database operations for Doris. */ public class DorisDatabaseOperations extends JdbcDatabaseOperations { + public static final String COMMENT_KEY = "comment"; @Override public String generateCreateDatabaseSql( String databaseName, String comment, Map properties) { - if (StringUtils.isNotEmpty(comment)) { - throw new UnsupportedOperationException( - "Doris doesn't support set database comment: " + comment); - } StringBuilder sqlBuilder = new StringBuilder(); // Append database name sqlBuilder.append(String.format("CREATE DATABASE `%s`", databaseName)); + // Doris does not support setting schema comment, put comment in properties + Map newProperties = new HashMap<>(properties); + if (StringUtils.isNotEmpty(comment)) { + newProperties.put(COMMENT_KEY, comment); + } + // Append properties - sqlBuilder.append(DorisUtils.generatePropertiesSql(properties)); + sqlBuilder.append(DorisUtils.generatePropertiesSql(newProperties)); String result = sqlBuilder.toString(); LOG.info("Generated create database:{} sql: {}", databaseName, result); @@ -82,8 +85,12 @@ public JdbcSchema load(String databaseName) throws NoSuchSchemaException { Map properties = getDatabaseProperties(databaseName); + // extract comment from properties + String comment = properties.remove(COMMENT_KEY); + return JdbcSchema.builder() .withName(dbName) + .withComment(comment) .withProperties(properties) .withAuditInfo(AuditInfo.EMPTY) .build(); @@ -109,6 +116,6 @@ protected Map getDatabaseProperties(String databaseName) { throw new NoSuchTableException("Database %s does not exist.", databaseName); } - return Collections.unmodifiableMap(DorisUtils.extractPropertiesFromSql(createDatabaseSql)); + return DorisUtils.extractPropertiesFromSql(createDatabaseSql); } } diff --git a/catalogs/catalog-jdbc-doris/src/test/java/com/datastrato/gravitino/catalog/doris/integration/test/TestDorisDatabaseOperations.java b/catalogs/catalog-jdbc-doris/src/test/java/com/datastrato/gravitino/catalog/doris/integration/test/TestDorisDatabaseOperations.java index 0d425e37356..61049723651 100644 --- a/catalogs/catalog-jdbc-doris/src/test/java/com/datastrato/gravitino/catalog/doris/integration/test/TestDorisDatabaseOperations.java +++ b/catalogs/catalog-jdbc-doris/src/test/java/com/datastrato/gravitino/catalog/doris/integration/test/TestDorisDatabaseOperations.java @@ -18,10 +18,12 @@ public class TestDorisDatabaseOperations extends TestDorisAbstractIT { @Test public void testBaseOperationDatabase() { String databaseName = RandomNameUtils.genRandomName("it_db"); + String comment = "comment"; + Map properties = new HashMap<>(); properties.put("property1", "value1"); - testBaseOperation(databaseName, properties, null); + testBaseOperation(databaseName, properties, comment); // recreate database, get exception. Assertions.assertThrowsExactly(