mirromutth/r2dbc-mysql

IN collection clause doesn't work

pillowbalcony opened this issue · 1 comments

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.

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