ClickHouse / clickhouse-java

ClickHouse Java Clients & JDBC Driver
https://clickhouse.com
Apache License 2.0
1.44k stars 530 forks source link

R2DBC client: ClickHouseResult map implementation logs but doesn't propagate exceptions. #1819

Open andrescrz opened 2 weeks ago

andrescrz commented 2 weeks ago

Describe the bug

For the R2DBC client, in ClickHouseResult class, the map method implementation logs but doesn't propagate exceptions. However, in the same class the flatMap method implementation both logs and propagates exceptions. See code:

Steps to reproduce

  1. Execute any statement producing aResult object.
  2. Any error triggered within the biFunction argument passed to map will be logged but not propagated. For instance, just throw a new IllegalArgumentException.
  3. Exception is logged but not propagated.

Expected behaviour

Unpropagated exceptions highly increases the chances of errors being unnoticed, unless logs are observed or analysed.

The expected behaviour is propagating the exception, like flatMap method does.

Code example

import io.r2dbc.spi.ConnectionFactory;
import reactor.core.publisher.Mono;

public class ClickHouseRepository {

    ConnectionFactory connectionFactory;

    Mono<Void> example() {
        return Mono.from(connectionFactory.create())
                .flatMapMany(connection -> connection.createStatement("SELECT 1").execute())
                .map(result -> result.map((row, rowMetadata) -> new IllegalArgumentException()))
                .then();
    }
}

Error log

Provided function caused exception: IllegalArgumentException

However, exception is just logged and not propagated.

Configuration

Environment

ClickHouse server