diff --git a/presto-redshift/src/main/java/com/facebook/presto/plugin/redshift/RedshiftClient.java b/presto-redshift/src/main/java/com/facebook/presto/plugin/redshift/RedshiftClient.java index a12d04307f5eb..2266603937f6c 100644 --- a/presto-redshift/src/main/java/com/facebook/presto/plugin/redshift/RedshiftClient.java +++ b/presto-redshift/src/main/java/com/facebook/presto/plugin/redshift/RedshiftClient.java @@ -19,6 +19,8 @@ import com.facebook.presto.plugin.jdbc.DriverConnectionFactory; import com.facebook.presto.plugin.jdbc.JdbcConnectorId; import com.facebook.presto.plugin.jdbc.JdbcIdentity; +import com.facebook.presto.plugin.jdbc.JdbcTypeHandle; +import com.facebook.presto.plugin.jdbc.ReadMapping; import com.facebook.presto.spi.ConnectorSession; import com.facebook.presto.spi.PrestoException; import com.facebook.presto.spi.SchemaTableName; @@ -28,8 +30,10 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Optional; import static com.facebook.presto.plugin.jdbc.JdbcErrorCode.JDBC_ERROR; +import static com.facebook.presto.plugin.jdbc.StandardReadMappings.varbinaryReadMapping; import static java.lang.String.format; public class RedshiftClient @@ -66,4 +70,17 @@ protected void renameTable(JdbcIdentity identity, String catalogName, SchemaTabl throw new PrestoException(JDBC_ERROR, e); } } + + // Maps "binary varying" (Redshift driver >= 2.1.0.32) to VARBINARY. + @Override + public Optional toPrestoType(ConnectorSession session, JdbcTypeHandle typeHandle) + { + String typeName = typeHandle.getJdbcTypeName(); + + if (typeName.equalsIgnoreCase("binary varying")) { + return Optional.of(varbinaryReadMapping()); + } + + return super.toPrestoType(session, typeHandle); + } }