[
https://issues.apache.org/jira/browse/CAMEL-26150?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26150 started by Claus Ibsen.
-------------------------------------------
> camel-clickhouse - query results in binary formats (RowBinary, Native,
> Parquet) are corrupted by decoding them as UTF-8 text
> ----------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26150
> URL: https://issues.apache.org/jira/browse/CAMEL-26150
> Project: Camel
> Issue Type: Bug
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of clickhouse (CAMEL-24961, PR
> #28393).
> h4. 1. Query results in binary formats are corrupted
> {{ClickHouseProducer.doQuery}} (main 2a465aa4814c, line 160) reads the
> response stream into {{new String(bytes, UTF_8)}} whatever the {{format}} is.
> With a binary format such as RowBinary, Native or Parquet, the bytes that are
> not valid UTF-8 are replaced, so the body cannot be decoded and no error is
> raised. Checked on 4.24.0-SNAPSHOT with ClickHouse 26.9 in Docker.
> Proposed: set the body as byte[] (or an InputStream) for binary formats, and
> keep a String for text formats.
> h4. 2. Inserting a List of Maps, or of POJOs that are not registered, fails
> with an NPE
> {{ClickHouseProducer.insertList}} (main 2a465aa4814c, line 127) passes the
> List to {{client.insert(target, data, settings)}}. client-v2 only supports
> POJOs whose class was registered with the client, so a List of Maps or of
> other POJOs fails with a NullPointerException inside client-v2 that does not
> say why. Checked on 4.24.0-SNAPSHOT with ClickHouse 26.9 in Docker.
> Proposed: check the element type before the call and fail with a clear
> message (Maps not supported, POJO class not registered).
> h4. 3. Doc: CamelClickHouseReadRows is the rows the server read, not the rows
> returned
> {{ClickHouseConstants.READ_ROWS}} (main 2a465aa4814c, lines 34-35) is
> described as "The number of rows read by a query operation", and {{doQuery}}
> (line 163) sets it from {{response.getReadRows()}}, which is the number of
> rows the server scanned. For a query with a WHERE or a LIMIT this is not the
> number of rows in the result. Checked on 4.24.0-SNAPSHOT with ClickHouse 26.9
> in Docker.
> Proposed: describe the header as the rows the server read (scanned), not the
> rows returned.
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)