From 2182a70ef9c95001216e34840e2953b0fc7f2eac Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Thu, 21 Jan 2021 12:19:33 +0100 Subject: [PATCH 1/2] Give column a name Some databases require columns to be named under some conditions. For example, SQL Servers require this in subqueries. --- .../src/main/java/io/trino/plugin/jdbc/QueryBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/QueryBuilder.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/QueryBuilder.java index ddca5bb260ab..50a458e29d9b 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/QueryBuilder.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/QueryBuilder.java @@ -147,7 +147,7 @@ protected String getRelation(RemoteTableName remoteTableName) protected String getProjection(List columns) { if (columns.isEmpty()) { - return "1"; + return "1 x"; } return columns.stream() .map(jdbcColumnHandle -> format("%s AS %s", jdbcColumnHandle.toSqlExpression(client::quoted), client.quoted(jdbcColumnHandle.getColumnName()))) From 64d98e1cfc079454d6d2e7043963e5028cd6bc56 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Thu, 21 Jan 2021 12:21:44 +0100 Subject: [PATCH 2/2] Simplify SQL Server limit function Remove editing of the query, by putting the original query in a subquery. --- .../java/io/trino/plugin/sqlserver/SqlServerClient.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java b/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java index ed8f6a55b7ff..e60377040748 100644 --- a/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java +++ b/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClient.java @@ -65,7 +65,6 @@ import java.util.Optional; import java.util.function.BiFunction; -import static com.google.common.base.Preconditions.checkArgument; import static com.microsoft.sqlserver.jdbc.SQLServerConnection.TRANSACTION_SNAPSHOT; import static io.airlift.slice.Slices.wrappedBuffer; import static io.trino.plugin.jdbc.JdbcErrorCode.JDBC_ERROR; @@ -348,11 +347,7 @@ private static Optional toTypeHandle(DecimalType decimalType) @Override protected Optional> limitFunction() { - return Optional.of((sql, limit) -> { - String start = "SELECT "; - checkArgument(sql.startsWith(start)); - return "SELECT TOP " + limit + " " + sql.substring(start.length()); - }); + return Optional.of((sql, limit) -> format("SELECT TOP %s * FROM (%s) o", limit, sql)); } @Override