Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
2.4.2
-
None
Description
The JDBC escape syntax scalar conversion functions are technically optional but there are inconsistencies and only partial support in the MariaDB Connector/J:
- The no args override org.mariadb.jdbc.MariaDbDatabaseMetaData#supportsConvert() always returns true
- However the overloaded and also overridden org.mariadb.jdbc.MariaDbDatabaseMetaData#supportsConvert(int, int) returns false for all from/to SQL types
- Appendix C.5 of the JDBC 4.2 specification lists several (optional) Conversion Function SQL types
- org.mariadb.jdbc.internal.util.Utils#replaceFunctionParameter actually does handle implement some of the JDBC convert implementations, primarily by stripping "SQL_" from the SQL type parameter, and then only supporting the server side version of convert()
Ideally more of the JDBC Conversion Function SQL types could be supported, such as {fn convert(SomeColumn, VARCHAR)} being replaced client side with something like CONCAT(SomeColumn).
The above was discovered trying to use Lightbend's Slick MySQLProfile with the MariaDB Connector/J. The Slick method .asColumnOf[String] is what invokes the JDBC escape syntax conversion function with a SQL type of VARCHAR.