diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHConnection.java b/src/main/java/ru/yandex/metrika/clickhouse/CHConnection.java
index a1f78cc58e123255277730dd54bbfe851fb76efe..c9f986c00be8158a3d669a07e1d477ce2f58065b 100644
--- a/src/main/java/ru/yandex/metrika/clickhouse/CHConnection.java
+++ b/src/main/java/ru/yandex/metrika/clickhouse/CHConnection.java
@@ -41,6 +41,20 @@ public class CHConnection implements Connection {
         return LogProxy.wrap(Statement.class, new CHStatement(httpclient, source, properties));
     }
 
+    @Override
+    public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
+        return createStatement(resultSetType, resultSetConcurrency, ResultSet.CLOSE_CURSORS_AT_COMMIT);
+    }
+
+    @Override
+    public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+        if (resultSetType != ResultSet.TYPE_FORWARD_ONLY && resultSetConcurrency != ResultSet.CONCUR_READ_ONLY
+                && resultSetHoldability != ResultSet.CLOSE_CURSORS_AT_COMMIT) {
+            throw new SQLFeatureNotSupportedException();
+        }
+        return createStatement();
+    }
+
     @Override
     public PreparedStatement prepareStatement(String sql) throws SQLException {
         return null;
@@ -135,10 +149,6 @@ public class CHConnection implements Connection {
 
     }
 
-    @Override
-    public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
-        return null;
-    }
 
     @Override
     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
@@ -190,11 +200,6 @@ public class CHConnection implements Connection {
 
     }
 
-    @Override
-    public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
-        return null;
-    }
-
     @Override
     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         return null;
diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHDatabaseMetadata.java b/src/main/java/ru/yandex/metrika/clickhouse/CHDatabaseMetadata.java
index 7a0eb49a81982dbd98be3d2d5721d0552f6af823..3d609e70ea853b8083f071b8f198bc3896ed30d8 100644
--- a/src/main/java/ru/yandex/metrika/clickhouse/CHDatabaseMetadata.java
+++ b/src/main/java/ru/yandex/metrika/clickhouse/CHDatabaseMetadata.java
@@ -345,7 +345,7 @@ public class CHDatabaseMetadata implements DatabaseMetaData {
 
     @Override
     public String getCatalogSeparator() throws SQLException {
-        return ":";
+        return ".";
     }
 
     @Override
diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java b/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java
index 07f5cf6943930dc5bcaf18da7c17fcc1a6c36284..bff0647cbfb1ceadb29a1fa7842a9efab6f50449 100644
--- a/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java
+++ b/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java
@@ -38,6 +38,8 @@ public class CHStatement implements Statement {
 
     private CHResultSet currentResult;
 
+    private int maxRows;
+
     public CHStatement(CloseableHttpClient client, ClickHouseSource source,
                        HttpConnectionProperties properties) {
         this.client = client;
@@ -54,6 +56,7 @@ public class CHStatement implements Statement {
                     extractDBName(sql),
                     extractTableName(sql)
             );
+            currentResult.setMaxRows(maxRows);
             return currentResult;
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -99,12 +102,12 @@ public class CHStatement implements Statement {
 
     @Override
     public int getMaxRows() throws SQLException {
-        return 0;
+        return maxRows;
     }
 
     @Override
     public void setMaxRows(int max) throws SQLException {
-
+        maxRows = max;
     }
 
     @Override
diff --git a/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResultSet.java b/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResultSet.java
index 888602a8a576a42416e9e78abce9234c81a933c9..ea0c0ff15b50a691d94c5c1f3d8c5f2e22da8ac1 100644
--- a/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResultSet.java
+++ b/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResultSet.java
@@ -23,6 +23,9 @@ public class CHResultSet extends AbstractResultSet {
 
     private static final Logger log = Logger.of(CHResultSet.class);
 
+    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //
+
     private final StreamSplitter bis;
 
     private final String db;
@@ -32,8 +35,7 @@ public class CHResultSet extends AbstractResultSet {
     private final String[] columns;
     private final String[] types;
 
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //
-    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //
+    private int maxRows;
 
     // current line
     private ByteFragment[] values;
@@ -86,7 +88,7 @@ public class CHResultSet extends AbstractResultSet {
         if (nextLine == null) {
             try {
                 nextLine = bis.next();
-                if (nextLine == null || nextLine.length() == 0) {
+                if (nextLine == null || nextLine.length() == 0 || (maxRows != 0 && rowNumber >= maxRows)) {
                     bis.close();
                 }
             } catch (IOException e) {
@@ -386,6 +388,10 @@ public class CHResultSet extends AbstractResultSet {
         return table;
     }
 
+    public void setMaxRows(int maxRows) {
+        this.maxRows = maxRows;
+    }
+
     /////
 
     // 1-based insex in column list