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