From 56ba47adcea369229992a4255721012e78721466 Mon Sep 17 00:00:00 2001
From: jkee <jkee@yandex-team.ru>
Date: Mon, 23 Mar 2015 21:44:42 +0300
Subject: [PATCH] METR-15511: meta fixes

---
 .../metrika/clickhouse/CHConnection.java      | 23 +++++++++++--------
 .../clickhouse/CHDatabaseMetadata.java        |  2 +-
 .../metrika/clickhouse/CHStatement.java       |  7 ++++--
 .../clickhouse/copypaste/CHResultSet.java     | 12 +++++++---
 4 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHConnection.java b/src/main/java/ru/yandex/metrika/clickhouse/CHConnection.java
index a1f78cc5..c9f986c0 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 7a0eb49a..3d609e70 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 07f5cf69..bff0647c 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 888602a8..ea0c0ff1 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
-- 
GitLab