I get this point, but here's an alternative point of view:
Do you know the many hacks I had to implement because the JDBC spec folks overlooked adding a SQLInput.getConnection() or SQLOutput.getConnection() method? :)
It's hard to create new objects (Arrays, Blobs, Clobs, SQLXML,
Structs,
etc.)
in JDBC
without having a Connection reference. ThreadLocal to the rescue. In a JDBC context, the PreparedStatement creation can usually be safely expected to happen on the same thread as some later variable binding, so I can put my JDBC Connection in a ThreadLocal somewhere and access it from everywhere else. This isn't the case in R2DBC.
So far, I haven't run into many of these cases yet where I would have needed to get a hold of a Connection internally other than having to close it. But this might change in the future, if R2DBC ever decides to implement better resource management for very large objects, when String or ByteBuffer won't work. My prediction here is that if R2DBC is successful (which we all hope!), then there will be other use-cases of binding directly to the SPI, just as there were with JDBC. There will be more tooling building on it, more libraries proxying it, more people wanting to inject some custom behaviour on this layer (e.g. intercept SQL strings, etc.), so I think that the "ubiquitous Connection", which was a great feature in JDBC, could also be very useful to R2DBC in the future.
Anyway, this is something to keep in mind. I guess it can still be done later.
Cheers,
Lukas