Hi Kuassi,
Thanks for your message. Regarding your questions about compliance:
1. Publishers are not expected to support multiple subscribers in general. While multiple subscribers can be supported where it makes sense (Connection.setAutoCommit(…), Connection.beginTransaction()), it's not a requirement.
2. No, Statement.execute() should support a single subscriber only. Otherwise, the same statement could be executed multiple times. Moreover, stream-like parameters (like BLOB/CLOB) of a parameterized query would have been already in a consumed state so that the driver cannot construct the query.
3. This is because Oracle uses locators to obtain large objects? I think that's something worth discussing. We hadn't had such a case previously. The spec to use String/ByteBuffer came from the fact that the currently available drivers don't have a dedicated BLOB/CLOB type. Instead, they materialize the content directly which makes consumption of large objects convenient. I would recommend to not block in these cases. For the time being, how about returning R2DBC's Blob/Clob type instead? It's different from what the spec mandates, but we should do something that makes sense.
Can you provide a bit more details for which data types the R2DBC spec would require your driver to block? Maybe we can relax the spec in those areas and be more specific where BLOB/CLOB should map to R2DBC's Blob and Clob types without breaking too many things.
Thanks for letting us know about the documentation mismatch. I filed a ticket [0] to fix it.
Cheers,
Mark