From 64cff0e1c9439faa0620e0116ff22705e4a7e3ec Mon Sep 17 00:00:00 2001 From: Sah Oss Date: Fri, 23 Jun 2023 22:16:15 +0530 Subject: [PATCH] Support table comment for redshift connector --- .../trino/plugin/redshift/RedshiftClient.java | 29 +++++++++++++++++-- .../redshift/TestRedshiftConnectorTest.java | 3 -- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClient.java b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClient.java index bd95b30cf198..c4325ee1f64e 100644 --- a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClient.java +++ b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClient.java @@ -16,6 +16,7 @@ import com.amazon.redshift.jdbc.RedshiftPreparedStatement; import com.amazon.redshift.util.RedshiftObject; import com.google.common.base.CharMatcher; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; import io.airlift.slice.Slice; @@ -62,6 +63,7 @@ import io.trino.spi.connector.ColumnHandle; import io.trino.spi.connector.ColumnMetadata; import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorTableMetadata; import io.trino.spi.connector.JoinCondition; import io.trino.spi.connector.JoinStatistics; import io.trino.spi.connector.JoinType; @@ -175,6 +177,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.time.temporal.ChronoField.NANO_OF_SECOND; import static java.util.Objects.requireNonNull; @@ -304,10 +307,30 @@ public Connection getConnection(ConnectorSession session, JdbcSplit split, JdbcT } @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 tableComment) + { + return format( + "COMMENT ON TABLE %s IS %s", + quoted(remoteTableName), + tableComment.map(RedshiftClient::redshiftVarcharLiteral).orElse("NULL")); } @Override diff --git a/plugin/trino-redshift/src/test/java/io/trino/plugin/redshift/TestRedshiftConnectorTest.java b/plugin/trino-redshift/src/test/java/io/trino/plugin/redshift/TestRedshiftConnectorTest.java index 179477d23fa9..175b473a2c40 100644 --- a/plugin/trino-redshift/src/test/java/io/trino/plugin/redshift/TestRedshiftConnectorTest.java +++ b/plugin/trino-redshift/src/test/java/io/trino/plugin/redshift/TestRedshiftConnectorTest.java @@ -66,12 +66,9 @@ protected QueryRunner createQueryRunner() protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) { switch (connectorBehavior) { - case SUPPORTS_COMMENT_ON_TABLE: - return false; case SUPPORTS_COMMENT_ON_COLUMN: return true; - case SUPPORTS_CREATE_TABLE_WITH_TABLE_COMMENT: case SUPPORTS_CREATE_TABLE_WITH_COLUMN_COMMENT: return false;