Skip to content

"Failed to read row" with JDBC v2 & OUTPUT_FORMAT_BINARY_WRITE_JSON_AS_STRING #2359

Closed
@redox

Description

@redox

Description

Following #1833 (comment) I was trying to play with OUTPUT_FORMAT_BINARY_WRITE_JSON_AS_STRING and hit a Failed to read row issue.

I ended up reproducing the issue in a src/test/java/com/clickhouse/jdbc/DataTypeTests.java test:

Steps to reproduce

    @Test(groups = { "integration" })
    public void testJSONTypeSimpleStatement() throws SQLException {
        if (earlierThan(25, 4)) {
            return;
        }

        runQuery("CREATE TABLE test_json (order Int8, "
                + "json JSON"
                + ") ENGINE = MergeTree ORDER BY ()");

        // Insert random (valid) values
        long seed = System.currentTimeMillis();
        Random rand = new Random(seed);
        log.info("Random seed was: {}", seed);

        String json = "{\"key1\": " + rand.nextDouble() + ", \"key2\": " + rand.nextInt()
                + ", \"key3\": [\"value3\", 4]}";
        insertData(String.format("INSERT INTO test_json VALUES ( 1, '%s' )", json));

        // Check the results
        Properties props = new Properties();
        props.setProperty(
                ClientConfigProperties.serverSetting(ServerSettings.OUTPUT_FORMAT_BINARY_WRITE_JSON_AS_STRING),
                "1");
        try (Connection conn = getJdbcConnection(props)) {
            try (Statement stmt = conn.createStatement()) {
                try (ResultSet rs = stmt.executeQuery("SELECT * FROM test_json ORDER BY order")) {
                    assertTrue(rs.next());
                    assertEquals(rs.getString("json"), json);

                    assertFalse(rs.next());
                }
            }
        }
    }

Error Log or Exception StackTrace

[INFO] Running com.clickhouse.jdbc.DataTypeTests
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.272 s <<< FAILURE! -- in com.clickhouse.jdbc.DataTypeTests
[ERROR] com.clickhouse.jdbc.DataTypeTests.testJSONTypeSimpleStatement -- Time elapsed: 0.103 s <<< FAILURE!
java.sql.SQLException: Failed to read row
	at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:69)
	at com.clickhouse.jdbc.internal.ExceptionUtils.toSqlState(ExceptionUtils.java:42)
	at com.clickhouse.jdbc.ResultSetImpl.next(ResultSetImpl.java:105)
	at com.clickhouse.jdbc.DataTypeTests.testJSONTypeSimpleStatement(DataTypeTests.java:1118)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:136)
	at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:658)
	at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:219)
	at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
	at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:923)
	at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:192)
	at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
	at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.testng.TestRunner.privateRun(TestRunner.java:808)
	at org.testng.TestRunner.run(TestRunner.java:603)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:429)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:423)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:383)
	at org.testng.SuiteRunner.run(SuiteRunner.java:326)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1249)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
	at org.testng.TestNG.runSuites(TestNG.java:1092)
	at org.testng.TestNG.run(TestNG.java:1060)
	at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:155)
	at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:102)
	at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:91)
	at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:137)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: com.clickhouse.client.api.ClientException: Failed to read row
	at com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader.next(AbstractBinaryFormatReader.java:254)
	at com.clickhouse.jdbc.ResultSetImpl.next(ResultSetImpl.java:103)
	... 34 more
Caused by: java.io.EOFException: End of stream reached before reading all data
	at com.clickhouse.client.api.data_formats.internal.BinaryStreamReader.readNBytes(BinaryStreamReader.java:548)
	at com.clickhouse.client.api.data_formats.internal.BinaryStreamReader.readNBytes(BinaryStreamReader.java:530)
	at com.clickhouse.client.api.data_formats.internal.BinaryStreamReader.readString(BinaryStreamReader.java:1038)
	at com.clickhouse.client.api.data_formats.internal.BinaryStreamReader.readJsonData(BinaryStreamReader.java:1191)
	at com.clickhouse.client.api.data_formats.internal.BinaryStreamReader.readValue(BinaryStreamReader.java:218)
	at com.clickhouse.client.api.data_formats.internal.BinaryStreamReader.readValue(BinaryStreamReader.java:82)
	at com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader.readRecord(AbstractBinaryFormatReader.java:175)
	at com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader.next(AbstractBinaryFormatReader.java:245)
	... 35 more

Environment

  • Client version: HEAD
  • Language version: jdk17
  • OS: macos

ClickHouse Server

  • ClickHouse Server version: (default from mvn verify)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugdata-typedata type processing issuesjdbc-readreading data with jdbcjdbc-v2jdbc-v2 issues

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions