Skip to content

Conversation

@grantatspothero
Copy link
Contributor

@grantatspothero grantatspothero commented Nov 30, 2021

When upgrading from the jdbc driver from 2.x to 3.x I noticed this following error occurring in tests (for the trinodb project)

Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, message: Error parsing 'inf' as java.lang.Float; For input string: "inf"
	at ru.yandex.clickhouse.response.parser.ClickHouseValueParser$ClickHouseValueParserFunctionWrapper.parse(ClickHouseValueParser.java:243)
	at ru.yandex.clickhouse.response.ClickHouseResultSet.getObject(ClickHouseResultSet.java:749)

The root cause of the problem is ResultSet.getFloat and ResultSet.getObject(Float.class) use different parsing functions (a custom double parser for getFloat and Float::valueOf for getObject): https://github.com/ClickHouse/clickhouse-jdbc/blob/v0.3.1-patch/clickhouse-jdbc/src/main/java/ru/yandex/clickhouse/response/parser/ClickHouseValueParser.java#L43-L45

Clickhouse sends [+|-]?inf over the wire (not [+|-]?Infinity) so if you use ResultSet.getObject(Float.class) the Float::valueOf function errors out.

The fix is just creating a custom float parser (much like the double parser) such that both float and double parsing perform the same logic.

@CLAassistant
Copy link

CLAassistant commented Nov 30, 2021

CLA assistant check
All committers have signed the CLA.

@grantatspothero grantatspothero force-pushed the grantnicholas/fixJdbcDriverFloatInfNaNHandling branch from 27c0324 to 3a1799c Compare November 30, 2021 21:20
assertEquals(70511139L, rs.getLong(2));
}

@Test
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing changed about this testcase, intellij just warned me it was missing a "@test" annotation.

@grantatspothero grantatspothero force-pushed the grantnicholas/fixJdbcDriverFloatInfNaNHandling branch 2 times, most recently from e34f857 to 3ca5c06 Compare November 30, 2021 21:31
@zhicwu zhicwu changed the base branch from master to develop December 1, 2021 00:21
@zhicwu
Copy link
Contributor

zhicwu commented Dec 1, 2021

Thank you @grantatspothero for the contribution. We're working on 0.3.2 which is a complete rewrite and we'll move to a RowBinary-based new JDBC driver, which supports nan/inf(examples).

Anyway, I changed target branch from master to develop, could you resolve the conflict there so that I can merge?

ResultSet.getFloat and ResultSet.getObject(Float.class) did not agree with each other
@grantatspothero grantatspothero force-pushed the grantnicholas/fixJdbcDriverFloatInfNaNHandling branch from 3ca5c06 to 6cc8b68 Compare December 1, 2021 19:43
@github-actions
Copy link

github-actions bot commented Dec 1, 2021

Benchmark                                (client)  (connection)  (statement)   (type)   Mode  Cnt     Score     Error  Units
Basic.insertOneRandomNumber  clickhouse-http-jdbc         reuse       normal  default  thrpt   20   258.756 ±  35.054  ops/s
Basic.insertOneRandomNumber  clickhouse-http-jdbc         reuse     prepared  default  thrpt   20   252.505 ±  35.647  ops/s
Basic.insertOneRandomNumber  clickhouse-http-jdbc           new       normal  default  thrpt   20   243.917 ±  32.236  ops/s
Basic.insertOneRandomNumber  clickhouse-http-jdbc           new     prepared  default  thrpt   20   248.517 ±  31.097  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc         reuse       normal  default  thrpt   20   259.091 ±  28.353  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc         reuse     prepared  default  thrpt   20   260.237 ±  29.675  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc           new       normal  default  thrpt   20   259.073 ±  28.601  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc           new     prepared  default  thrpt   20   258.186 ±  29.974  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc         reuse       normal  default  thrpt   20  1355.665 ± 125.595  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc         reuse     prepared  default  thrpt   20  1351.085 ±  98.627  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc           new       normal  default  thrpt   20  1400.914 ±  67.411  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc           new     prepared  default  thrpt   20  1398.154 ±  87.152  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc         reuse       normal  default  thrpt   20   918.427 ±  71.743  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc         reuse     prepared  default  thrpt   20   902.058 ±  47.891  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc           new       normal  default  thrpt   20   914.256 ±  64.811  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc           new     prepared  default  thrpt   20   926.738 ±  74.310  ops/s

@github-actions
Copy link

github-actions bot commented Dec 1, 2021

Benchmark                                (client)  (connection)  (statement)   (type)   Mode  Cnt     Score    Error  Units
Basic.insertOneRandomNumber  clickhouse-http-jdbc         reuse       normal  default  thrpt   20   253.757 ± 36.329  ops/s
Basic.insertOneRandomNumber  clickhouse-http-jdbc         reuse     prepared  default  thrpt   20   240.919 ± 25.193  ops/s
Basic.insertOneRandomNumber  clickhouse-http-jdbc           new       normal  default  thrpt   20   240.949 ± 30.414  ops/s
Basic.insertOneRandomNumber  clickhouse-http-jdbc           new     prepared  default  thrpt   20   235.576 ± 29.218  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc         reuse       normal  default  thrpt   20   254.683 ± 28.852  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc         reuse     prepared  default  thrpt   20   252.636 ± 28.562  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc           new       normal  default  thrpt   20   250.699 ± 29.617  ops/s
Basic.insertOneRandomNumber  clickhouse-grpc-jdbc           new     prepared  default  thrpt   20   250.488 ± 26.818  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc         reuse       normal  default  thrpt   20  1064.820 ± 80.568  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc         reuse     prepared  default  thrpt   20  1088.893 ± 87.063  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc           new       normal  default  thrpt   20  1126.507 ± 60.790  ops/s
Basic.selectOneRandomNumber  clickhouse-http-jdbc           new     prepared  default  thrpt   20  1088.640 ± 82.126  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc         reuse       normal  default  thrpt   20   793.507 ± 50.993  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc         reuse     prepared  default  thrpt   20   753.007 ± 55.489  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc           new       normal  default  thrpt   20   747.653 ± 55.806  ops/s
Basic.selectOneRandomNumber  clickhouse-grpc-jdbc           new     prepared  default  thrpt   20   773.741 ± 51.440  ops/s

@grantatspothero
Copy link
Contributor Author

@zhicwu Just a bump

@zhicwu
Copy link
Contributor

zhicwu commented Dec 7, 2021

@zhicwu Just a bump

Sorry for the late response. Will merge this pull request after I'm done with another.

@zhicwu zhicwu merged commit 30bda80 into ClickHouse:develop Dec 9, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants