diff --git a/plugin/trino-snowflake/src/main/java/io/trino/plugin/snowflake/SnowflakeClient.java b/plugin/trino-snowflake/src/main/java/io/trino/plugin/snowflake/SnowflakeClient.java index fb3661c45566..fca53986736a 100644 --- a/plugin/trino-snowflake/src/main/java/io/trino/plugin/snowflake/SnowflakeClient.java +++ b/plugin/trino-snowflake/src/main/java/io/trino/plugin/snowflake/SnowflakeClient.java @@ -27,6 +27,7 @@ import io.trino.plugin.jdbc.ConnectionFactory; import io.trino.plugin.jdbc.JdbcColumnHandle; import io.trino.plugin.jdbc.JdbcExpression; +import io.trino.plugin.jdbc.JdbcSortItem; import io.trino.plugin.jdbc.JdbcTableHandle; import io.trino.plugin.jdbc.JdbcTypeHandle; import io.trino.plugin.jdbc.LongWriteFunction; @@ -283,6 +284,31 @@ public boolean isLimitGuaranteed(ConnectorSession session) return true; } + @Override + public boolean supportsTopN(ConnectorSession session, JdbcTableHandle handle, List sortOrder) + { + for (JdbcSortItem sortItem : sortOrder) { + Type sortItemType = sortItem.getColumn().getColumnType(); + if (sortItemType instanceof CharType || sortItemType instanceof VarcharType) { + // Remote database can be case insensitive. + return false; + } + } + return true; + } + + @Override + protected Optional topNFunction() + { + return Optional.of(TopNFunction.sqlStandard(this::quoted)); + } + + @Override + public boolean isTopNGuaranteed(ConnectorSession session) + { + return true; + } + @Override public Optional getTableComment(ResultSet resultSet) { diff --git a/plugin/trino-snowflake/src/test/java/io/trino/plugin/snowflake/TestSnowflakeConnectorTest.java b/plugin/trino-snowflake/src/test/java/io/trino/plugin/snowflake/TestSnowflakeConnectorTest.java index 5d1b92c82f47..16e827958f35 100644 --- a/plugin/trino-snowflake/src/test/java/io/trino/plugin/snowflake/TestSnowflakeConnectorTest.java +++ b/plugin/trino-snowflake/src/test/java/io/trino/plugin/snowflake/TestSnowflakeConnectorTest.java @@ -81,8 +81,7 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) SUPPORTS_CREATE_TABLE_WITH_TABLE_COMMENT, SUPPORTS_PREDICATE_PUSHDOWN, SUPPORTS_ROW_TYPE, - SUPPORTS_SET_COLUMN_TYPE, - SUPPORTS_TOPN_PUSHDOWN -> false; + SUPPORTS_SET_COLUMN_TYPE -> false; default -> super.hasBehavior(connectorBehavior); }; }