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