Skip to content

[BUG] - jdbc driver throw exception when count() is used with JSONEachRow #726

@jonathanyuechun

Description

@jonathanyuechun

Valid SQL statement with clickhouse-client:

dev.server.io :) select count() from tutorial.visits_v1 format JSONEachRow

SELECT count()
FROM tutorial.visits_v1
FORMAT JSONEachRow

Query id: afa202e1-54cb-4c64-a628-f8d0711c71dc

{"count()":"1680609"}
↑ Progress: 1.00 rows, 4.10 KB (160.98 rows/s., 660.65 KB/s
1 rows in set. Elapsed: 0.006 sec. 
                 select count() from tutorial.visits_v1 format JSONEachRow

Snippet:

  public static void main(String... args) throws SQLException {
    String url = "jdbc:clickhouse://localhost:8123/tutorial";
    ClickHouseProperties properties = new ClickHouseProperties();
    // set connection options - see more defined in ClickHouseConnectionSettings
    properties.setClientName("Agent #1");
    // set default request options - more in ClickHouseQueryParam
    properties.setSessionId("default-session-id");
    ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);

    String sql = "select count() from visits_v1 format JSONEachRow";
    Map<ClickHouseQueryParam, String> additionalDBParams = new HashMap<>();
    // set request options, which will override the default ones in ClickHouseProperties
    additionalDBParams.put(ClickHouseQueryParam.SESSION_ID, "new-session-id");
    List<String> datas = new ArrayList<>();
    try (ClickHouseConnection conn = dataSource.getConnection();
        ClickHouseStatement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql, additionalDBParams)) {
      while (rs.next()) {
        datas.add(rs.getString(1));
      }
    }
    System.out.println(datas.size());
  }

throws:

Exception in thread "main" ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; ClickHouse response without column types
	at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.getException(ClickHouseExceptionSpecifier.java:92)
	at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:56)
	at ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:25)
	at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:351)
	at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:324)
	at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:319)
	at org.thales.punch.server.services.api.TestMe.main(TestMe.java:35)
Caused by: java.lang.IllegalArgumentException: ClickHouse response without column types
	at ru.yandex.clickhouse.response.ClickHouseResultSet.<init>(ClickHouseResultSet.java:107)
	at ru.yandex.clickhouse.ClickHouseStatementImpl.createResultSet(ClickHouseStatementImpl.java:1121)
	at ru.yandex.clickhouse.ClickHouseStatementImpl.updateResult(ClickHouseStatementImpl.java:224)
	at ru.yandex.clickhouse.ClickHouseStatementImpl.executeQuery(ClickHouseStatementImpl.java:344)
	... 3 more

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions