diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java index 331860e3479c..1c7a47fd07a5 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/BaseJdbcClient.java @@ -650,8 +650,9 @@ protected JdbcOutputTableHandle createTable(ConnectorSession session, ConnectorT } RemoteTableName remoteTableName = new RemoteTableName(Optional.ofNullable(catalog), Optional.ofNullable(remoteSchema), remoteTargetTableName); - String sql = createTableSql(remoteTableName, columnList.build(), tableMetadata); - execute(session, connection, sql); + for (String sql : createTableSqls(remoteTableName, columnList.build(), tableMetadata)) { + execute(session, connection, sql); + } return new JdbcOutputTableHandle( catalog, @@ -665,6 +666,12 @@ protected JdbcOutputTableHandle createTable(ConnectorSession session, ConnectorT } } + protected List createTableSqls(RemoteTableName remoteTableName, List columns, ConnectorTableMetadata tableMetadata) + { + return ImmutableList.of(createTableSql(remoteTableName, columns, tableMetadata)); + } + + @Deprecated protected String createTableSql(RemoteTableName remoteTableName, List columns, ConnectorTableMetadata tableMetadata) { if (tableMetadata.getComment().isPresent()) { diff --git a/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClient.java b/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClient.java index a7102743e153..4da5d2e6da2c 100644 --- a/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClient.java +++ b/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClient.java @@ -229,6 +229,7 @@ import static java.lang.Math.max; import static java.lang.Math.min; import static java.lang.String.format; +import static java.lang.String.join; import static java.math.RoundingMode.UNNECESSARY; import static java.sql.DatabaseMetaData.columnNoNulls; import static java.util.Objects.requireNonNull; @@ -360,10 +361,30 @@ public void createTable(ConnectorSession session, ConnectorTableMetadata tableMe } @Override - public Optional getTableComment(ResultSet resultSet) + protected List createTableSqls(RemoteTableName remoteTableName, List columns, ConnectorTableMetadata tableMetadata) { - // Don't return a comment until the connector supports creating tables with comment - return Optional.empty(); + checkArgument(tableMetadata.getProperties().isEmpty(), "Unsupported table properties: %s", tableMetadata.getProperties()); + ImmutableList.Builder createTableSqlsBuilder = ImmutableList.builder(); + createTableSqlsBuilder.add(format("CREATE TABLE %s (%s)", quoted(remoteTableName), join(", ", columns))); + Optional tableComment = tableMetadata.getComment(); + if (tableComment.isPresent()) { + createTableSqlsBuilder.add(buildTableCommentSql(remoteTableName, tableComment)); + } + return createTableSqlsBuilder.build(); + } + + @Override + public void setTableComment(ConnectorSession session, JdbcTableHandle handle, Optional comment) + { + execute(session, buildTableCommentSql(handle.asPlainTable().getRemoteTableName(), comment)); + } + + private String buildTableCommentSql(RemoteTableName remoteTableName, Optional comment) + { + return format( + "COMMENT ON TABLE %s IS %s", + quoted(remoteTableName), + comment.map(BaseJdbcClient::varcharLiteral).orElse("NULL")); } @Override diff --git a/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java b/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java index 8def3620e2a3..c65f7090ac5d 100644 --- a/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java +++ b/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestPostgreSqlConnectorTest.java @@ -124,7 +124,6 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) case SUPPORTS_JOIN_PUSHDOWN_WITH_FULL_JOIN: return false; - case SUPPORTS_CREATE_TABLE_WITH_TABLE_COMMENT: case SUPPORTS_CREATE_TABLE_WITH_COLUMN_COMMENT: case SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS: return false; @@ -132,9 +131,6 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) case SUPPORTS_ADD_COLUMN_WITH_COMMENT: return false; - case SUPPORTS_COMMENT_ON_TABLE: - return false; - case SUPPORTS_ARRAY: // Arrays are supported conditionally. Check the defaults. return new PostgreSqlConfig().getArrayMapping() != PostgreSqlConfig.ArrayMapping.DISABLED;