diff --git a/clickhouse-client/pom.xml b/clickhouse-client/pom.xml
index 71d5f5bc4..6bd9316cb 100644
--- a/clickhouse-client/pom.xml
+++ b/clickhouse-client/pom.xml
@@ -91,6 +91,7 @@
META-INF/services/*
+ com/clickhouse/client/ClickHouseTestClient.class
diff --git a/jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/ClickHouseParser.g4 b/jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/ClickHouseParser.g4
index 1dc7d6509..896ffb7bf 100644
--- a/jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/ClickHouseParser.g4
+++ b/jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/ClickHouseParser.g4
@@ -382,6 +382,7 @@ topClause
fromClause
: FROM joinExpr
+ | FROM identifier LPAREN QUERY RPAREN
;
arrayJoinClause
diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java
index ac6cf3db8..10fafcae3 100644
--- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java
+++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java
@@ -33,16 +33,18 @@
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
-import java.sql.ShardingKey;
import java.sql.Statement;
import java.sql.Struct;
+import java.util.Arrays;
import java.util.Calendar;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
public class ConnectionImpl implements Connection, JdbcV2Wrapper {
private static final Logger log = LoggerFactory.getLogger(ConnectionImpl.class);
@@ -548,7 +550,9 @@ public Properties getClientInfo() throws SQLException {
@Override
public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
try {
- return new com.clickhouse.jdbc.types.Array(List.of(elements), typeName, JdbcUtils.convertToSqlType(ClickHouseDataType.valueOf(typeName)).getVendorTypeNumber());
+ List