Skip to content

Commit f56eaa8

Browse files
authored
Handle BIT(1) as Boolean by Default (#286)
Motivation: BIT(1) should be treated as `Boolean`. Modification: set `Boolean.class` as `BIT(1)'s default java type. Result: Ensures `BIT(1)` is handled as `Boolean` by default. like mysql-connector-j's implementation. Resolves #277
1 parent bc227f1 commit f56eaa8

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

r2dbc-mysql/src/main/java/io/asyncer/r2dbc/mysql/codec/DefaultCodecs.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.asyncer.r2dbc.mysql.MySqlParameter;
2020
import io.asyncer.r2dbc.mysql.api.MySqlReadableMetadata;
21+
import io.asyncer.r2dbc.mysql.constant.MySqlType;
2122
import io.asyncer.r2dbc.mysql.internal.util.InternalArrays;
2223
import io.asyncer.r2dbc.mysql.message.FieldValue;
2324
import io.asyncer.r2dbc.mysql.message.LargeFieldValue;
@@ -358,11 +359,21 @@ private <T> T decodeMassive(LargeFieldValue value, MySqlReadableMetadata metadat
358359
* @param type the {@link Class} specified by the user.
359360
* @return the {@link Class} to use for decoding.
360361
*/
361-
private static Class<?> chooseClass(MySqlReadableMetadata metadata, Class<?> type) {
362-
Class<?> javaType = metadata.getType().getJavaType();
362+
private static Class<?> chooseClass(final MySqlReadableMetadata metadata, Class<?> type) {
363+
final Class<?> javaType = getDefaultJavaType(metadata);
363364
return type.isAssignableFrom(javaType) ? javaType : type;
364365
}
365366

367+
private static Class<?> getDefaultJavaType(final MySqlReadableMetadata metadata) {
368+
final MySqlType type = metadata.getType();
369+
// ref: https://github.com/asyncer-io/r2dbc-mysql/issues/277
370+
// BIT(1) should be treated as Boolean by default.
371+
if (type == MySqlType.BIT && Integer.valueOf(1).equals(metadata.getPrecision())) {
372+
return Boolean.class;
373+
}
374+
return type.getJavaType();
375+
}
376+
366377
static final class Builder implements CodecsBuilder {
367378

368379
@GuardedBy("lock")

0 commit comments

Comments
 (0)