ClickHouse / ClickHouse/clickhouse-java
jdbc-v2: Issue with parameter data type
- Lenguaje dominante
- Java
- Estrellas
- 1.6k
- Forks
- 636
- Merge medio
- 2 d 23 h
- PR fusionados (30 d)
- 29
Descripción
## Description
When running a prepared statement with `COALESCE` and a date, the execution fails due to type.
Am not entirely sure whether it's an issue with the JDBC driver (which serializes the date as a String in `PreparedStatementImpl#encodeObject` - nothing wrong with that) or the server (which should deserialize it with the proper type, or `COALESCE` which should handle types better - see https://github.com/ClickHouse/ClickHouse/issues/57292 , although most other databases handle this use case).
### Steps to reproduce
See the code below.
### Error Log or Exception StackTrace
```
Caused by: com.clickhouse.client.api.ServerException: Code: 386. DB::Exception: There is no supertype for types Date32, String because some of them are String/FixedString/Enum and some of them are not: In scope SELECT COALESCE(date, '2025-12-31') FROM test_local_date. (NO_COMMON_TYPE) (version 25.8.7.3 (official build))
at com.clickhouse.client.api.internal.HttpAPIClientHelper.readError(HttpAPIClientHelper.java:403)
```
### Expected Behaviour
The query should return without error.
### Code Example
```java
@Test
void required_testJdbcWithLocalDate() throws Exception {
final String url = "jdbc:ch://localhost:" + SERVER.getFirstMappedPort();
final Properties info = new Properties();
info.put("user", SERVER.getClickhouseUser());
info.put("password", SERVER.getClickhousePassword());
try (final Connection conn = DriverManager.getConnection(url, info)) {
conn.prepareStatement("CREATE TABLE test_local_date"
+ " (id Int64, date Nullable(Date32)) ENGINE = MergeTree() ORDER BY id").execute();
conn.prepareStatement("INSERT INTO test_local_date VALUES (1, null)").execute();
try (final PreparedStatement preparedStatement = conn.prepareStatement("SELECT COALESCE(date, ?) FROM test_local_date")) {
preparedStatement.setObject(1, LocalDate.of(2025, 12, 31));
preparedStatement.executeQuery();
}
}
}
```
### Configuration
#### Client Configuration
#### Environment
* [ ] Cloud
* Client version: clickhouse-jdbc 0.9.4
* Language version:
* OS:
#### ClickHouse Server
* ClickHouse Server version: 25.8.7.3
Guía de contribución
Línea de trabajo
Comienza con la reproducción JDBC proporcionada e inspecciona PreparedStatementImpl#encodeObject, que el informe identifica como el punto de serialización de fechas. Ejecuta la consulta contra la versión de ClickHouse Server indicada y determina si el fallo pertenece a la codificación de parámetros, a la deserialización del servidor o al manejo de tipos de COALESCE; se considera hecho cuando la consulta devuelve el resultado sin errores.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- databases
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100