in cloud-spanner-r2dbc/src/main/java/com/google/cloud/spanner/r2dbc/v2/ClientLibraryBinder.java [106:139]
static void bind(Statement.Builder builder, String name, Object value) {
Assert.requireNonNull(name, "Column name must not be null");
Assert.requireNonNull(value, "Value must not be null");
Object finalValue;
Class<?> valueClass;
final SpannerType spannerType;
if (value instanceof Parameter) {
Parameter param = (Parameter) value;
finalValue = param.getValue();
Type type = param.getType();
spannerType = type instanceof SpannerType ? (SpannerType) param.getType() : null;
valueClass = type.getJavaType();
} else if (isTypedNull(value)) {
finalValue = null;
valueClass = ((TypedNull) value).getType();
spannerType = null;
} else {
finalValue = value;
valueClass = value.getClass();
spannerType = null;
}
Optional<ClientLibraryTypeBinder> optionalBinder = binders.stream()
.filter(e -> e.canBind(valueClass, spannerType))
.findFirst();
if (!optionalBinder.isPresent()) {
throw new BindingFailureException("Can't find a binder for type: " + valueClass);
}
optionalBinder.get().bind(builder, name, finalValue, spannerType);
}