diff --git a/docs/src/main/sphinx/connector/clickhouse.rst b/docs/src/main/sphinx/connector/clickhouse.rst
index 8fd9e1dbc6fe..75a56de728a3 100644
--- a/docs/src/main/sphinx/connector/clickhouse.rst
+++ b/docs/src/main/sphinx/connector/clickhouse.rst
@@ -12,7 +12,7 @@ Requirements
To connect to a ClickHouse server, you need:
-* ClickHouse (version 20.8 or higher) or Altinity (version 20.3 or higher).
+* ClickHouse (version 21.3 or higher) or Altinity (version 20.3 or higher).
* Network access from the Trino coordinator and workers to the ClickHouse
server. Port 8123 is the default port.
diff --git a/plugin/trino-clickhouse/pom.xml b/plugin/trino-clickhouse/pom.xml
index d29125cb94a8..d24f8a46fa32 100644
--- a/plugin/trino-clickhouse/pom.xml
+++ b/plugin/trino-clickhouse/pom.xml
@@ -23,11 +23,6 @@
trino-base-jdbc
-
- io.trino
- trino-matching
-
-
io.trino
trino-plugin-toolkit
diff --git a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java
index ccee07d51af4..7ab40471d762 100644
--- a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java
+++ b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ClickHouseClient.java
@@ -162,7 +162,6 @@ public ClickHouseClient(
.add(new ImplementMinMax(false)) // TODO: Revisit once https://github.com/trinodb/trino/issues/7100 is resolved
.add(new ImplementSum(ClickHouseClient::toTypeHandle))
.add(new ImplementAvgFloatingPoint())
- .add(new ImplementAvgDecimal())
.add(new ImplementAvgBigint())
.build());
}
diff --git a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ImplementAvgDecimal.java b/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ImplementAvgDecimal.java
deleted file mode 100644
index 4f16368a47da..000000000000
--- a/plugin/trino-clickhouse/src/main/java/io/trino/plugin/clickhouse/ImplementAvgDecimal.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.trino.plugin.clickhouse;
-
-import io.trino.matching.Capture;
-import io.trino.matching.Captures;
-import io.trino.matching.Pattern;
-import io.trino.plugin.base.expression.AggregateFunctionRule;
-import io.trino.plugin.jdbc.JdbcColumnHandle;
-import io.trino.plugin.jdbc.JdbcExpression;
-import io.trino.spi.connector.AggregateFunction;
-import io.trino.spi.expression.Variable;
-import io.trino.spi.type.DecimalType;
-
-import java.util.Optional;
-
-import static com.google.common.base.Verify.verify;
-import static io.trino.matching.Capture.newCapture;
-import static io.trino.plugin.base.expression.AggregateFunctionPatterns.basicAggregation;
-import static io.trino.plugin.base.expression.AggregateFunctionPatterns.expressionType;
-import static io.trino.plugin.base.expression.AggregateFunctionPatterns.functionName;
-import static io.trino.plugin.base.expression.AggregateFunctionPatterns.singleInput;
-import static io.trino.plugin.base.expression.AggregateFunctionPatterns.variable;
-import static io.trino.plugin.clickhouse.ClickHouseClient.CLICKHOUSE_MAX_DECIMAL_PRECISION;
-import static java.lang.String.format;
-
-/**
- * Implements {@code avg(decimal(p, s)}
- */
-public class ImplementAvgDecimal
- implements AggregateFunctionRule
-{
- private static final Capture INPUT = newCapture();
-
- @Override
- public Pattern getPattern()
- {
- return basicAggregation()
- .with(functionName().equalTo("avg"))
- .with(singleInput().matching(
- variable()
- .with(expressionType().matching(DecimalType.class::isInstance))
- .capturedAs(INPUT)));
- }
-
- @Override
- public Optional rewrite(AggregateFunction aggregateFunction, Captures captures, RewriteContext context)
- {
- Variable input = captures.get(INPUT);
- JdbcColumnHandle columnHandle = (JdbcColumnHandle) context.getAssignment(input.getName());
- DecimalType type = (DecimalType) columnHandle.getColumnType();
- verify(aggregateFunction.getOutputType().equals(type));
-
- // When decimal type has maximum precision we can get result that does not match Trino avg semantics.
- if (type.getPrecision() == CLICKHOUSE_MAX_DECIMAL_PRECISION) {
- return Optional.of(new JdbcExpression(
- format("avg(CAST(%s AS decimal(%s, %s)))", context.getIdentifierQuote().apply(columnHandle.getColumnName()), type.getPrecision(), type.getScale()),
- columnHandle.getJdbcTypeHandle()));
- }
-
- // ClickHouse avg function rounds down resulting decimal.
- // To match Trino avg semantics, we extend scale by 1 and round result to target scale.
- return Optional.of(new JdbcExpression(
- format("round(avg(CAST(%s AS decimal(%s, %s))), %s)", context.getIdentifierQuote().apply(columnHandle.getColumnName()), type.getPrecision() + 1, type.getScale() + 1, type.getScale()),
- columnHandle.getJdbcTypeHandle()));
- }
-}
diff --git a/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorSmokeTest.java b/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorSmokeTest.java
index c9dd65178074..a7a53239ca35 100644
--- a/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorSmokeTest.java
+++ b/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorSmokeTest.java
@@ -17,8 +17,6 @@
import io.trino.testing.QueryRunner;
import static io.trino.plugin.clickhouse.ClickHouseQueryRunner.createClickHouseQueryRunner;
-import static io.trino.testing.sql.TestTable.randomTableSuffix;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
public class TestClickHouseConnectorSmokeTest
extends BaseClickHouseConnectorSmokeTest
@@ -38,22 +36,4 @@ protected QueryRunner createQueryRunner()
.buildOrThrow(),
REQUIRED_TPCH_TABLES);
}
-
- @Override
- public void testRenameSchema()
- {
- // Override because the default database engine in version < v20.10.2.20-stable doesn't allow renaming schemas
- assertThatThrownBy(super::testRenameSchema)
- .hasMessageMatching("ClickHouse exception, code: 48,.* Ordinary: RENAME DATABASE is not supported .*\\n");
-
- String schemaName = "test_rename_schema_" + randomTableSuffix();
- try {
- clickHouseServer.execute("CREATE DATABASE " + schemaName + " ENGINE = Atomic");
- assertUpdate("ALTER SCHEMA " + schemaName + " RENAME TO " + schemaName + "_renamed");
- }
- finally {
- assertUpdate("DROP SCHEMA IF EXISTS " + schemaName);
- assertUpdate("DROP SCHEMA IF EXISTS " + schemaName + "_renamed");
- }
- }
}
diff --git a/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorTest.java b/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorTest.java
index 51a28ebd1f32..db5fc48fd677 100644
--- a/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorTest.java
+++ b/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestClickHouseConnectorTest.java
@@ -16,6 +16,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import io.trino.plugin.jdbc.BaseJdbcConnectorTest;
+import io.trino.sql.planner.plan.AggregationNode;
import io.trino.testing.MaterializedResult;
import io.trino.testing.QueryRunner;
import io.trino.testing.TestingConnectorBehavior;
@@ -98,25 +99,6 @@ public void testColumnName(String columnName)
throw new SkipException("TODO: test not implemented yet");
}
- @Test
- @Override
- public void testRenameSchema()
- {
- // Override because the default database engine in version < v20.10.2.20-stable doesn't allow renaming schemas
- assertThatThrownBy(super::testRenameSchema)
- .hasMessageMatching("ClickHouse exception, code: 48,.* Ordinary: RENAME DATABASE is not supported .*\\n");
-
- String schemaName = "test_rename_schema_" + randomTableSuffix();
- try {
- onRemoteDatabase().execute("CREATE DATABASE " + schemaName + " ENGINE = Atomic");
- assertUpdate("ALTER SCHEMA " + schemaName + " RENAME TO " + schemaName + "_renamed");
- }
- finally {
- assertUpdate("DROP SCHEMA IF EXISTS " + schemaName);
- assertUpdate("DROP SCHEMA IF EXISTS " + schemaName + "_renamed");
- }
- }
-
@Override
public void testRenameColumn()
{
@@ -432,7 +414,8 @@ public void testNumericAggregationPushdown()
assertThat(query("SELECT min(short_decimal), min(long_decimal), min(a_bigint), min(t_double) FROM " + testTable.getName())).isFullyPushedDown();
assertThat(query("SELECT max(short_decimal), max(long_decimal), max(a_bigint), max(t_double) FROM " + testTable.getName())).isFullyPushedDown();
assertThat(query("SELECT sum(short_decimal), sum(long_decimal), sum(a_bigint), sum(t_double) FROM " + testTable.getName())).isFullyPushedDown();
- assertThat(query("SELECT avg(short_decimal), avg(long_decimal), avg(a_bigint), avg(t_double) FROM " + testTable.getName())).isFullyPushedDown();
+ assertThat(query("SELECT avg(a_bigint), avg(t_double) FROM " + testTable.getName())).isFullyPushedDown();
+ assertThat(query("SELECT avg(short_decimal), avg(long_decimal) FROM " + testTable.getName())).isNotFullyPushedDown(AggregationNode.class);
}
}
diff --git a/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestingClickHouseServer.java b/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestingClickHouseServer.java
index 9e99edeb3234..b4b053ae8c7d 100644
--- a/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestingClickHouseServer.java
+++ b/plugin/trino-clickhouse/src/test/java/io/trino/plugin/clickhouse/TestingClickHouseServer.java
@@ -30,7 +30,7 @@ public class TestingClickHouseServer
{
private static final DockerImageName CLICKHOUSE_IMAGE = DockerImageName.parse("yandex/clickhouse-server");
public static final DockerImageName CLICKHOUSE_LATEST_IMAGE = CLICKHOUSE_IMAGE.withTag("21.11.10.1");
- public static final DockerImageName CLICKHOUSE_DEFAULT_IMAGE = CLICKHOUSE_IMAGE.withTag("20.8");
+ public static final DockerImageName CLICKHOUSE_DEFAULT_IMAGE = CLICKHOUSE_IMAGE.withTag("21.3.2.5"); // EOL is 30 Mar 2022
// Altinity Stable Builds Life-Cycle Table https://docs.altinity.com/altinitystablebuilds/#altinity-stable-builds-life-cycle-table
private static final DockerImageName ALTINITY_IMAGE = DockerImageName.parse("altinity/clickhouse-server").asCompatibleSubstituteFor("yandex/clickhouse-server");