mirromutth / r2dbc-mysql

R2DBC MySQL Implementation
Apache License 2.0
656 stars 100 forks source link

IN collection clause doesn't work #238

Open pillowbalcony opened 2 years ago

pillowbalcony commented 2 years ago

Hi, I'm working on a sql using operator IN:

Mono<List<Map<String, Object>>> result = databaseClient.sql("select * from users where id in (?)")
                .bind(0, new Integer[] {1, 2, 3})
                .map(this::mapRowData)
                .all()
                .collectList();

However it gets an error during execution:

java.lang.IllegalArgumentException: Cannot encode value of type 'class [Ljava.lang.Integer;'

    at dev.miku.r2dbc.mysql.codec.DefaultCodecs.encode(DefaultCodecs.java:178)
    at dev.miku.r2dbc.mysql.ParametrizedStatementSupport.bind(ParametrizedStatementSupport.java:72)
    at dev.miku.r2dbc.mysql.ParametrizedStatementSupport.bind(ParametrizedStatementSupport.java:39)
    at org.springframework.r2dbc.core.DefaultDatabaseClient$DefaultGenericExecuteSpec.lambda$bindByIndex$6(DefaultDatabaseClient.java:442)
... 
rest omitted

I checked the whole codec list and can not find a codec supporting this clause.

subrata71 commented 2 years ago

Queries with IN clauses are widely used. It's time MySQL r2dbc driver had support for this.