Alexander Falb created CALCITE-4855:
---------------------------------------

             Summary: SQLFeatureNotSupported with avatica-remote and MariaDB
                 Key: CALCITE-4855
                 URL: https://issues.apache.org/jira/browse/CALCITE-4855
             Project: Calcite
          Issue Type: Bug
          Components: avatica
    Affects Versions: avatica-1.19.0, 1.27.0
            Reporter: Alexander Falb


I'm currently experimenting with a Calcite/Avatica-Remote Javaapplicatioin and 
MariaDB server. 

When connecting directly to the MariaDB (without Calcite) 
"jdbc:mariadb://localhost..." my PreparedStatement prepares and executes just 
fine, the same holds true when using only Calcite 
"jdbc:calcite:schemaType=JDBC;schema.jdbcUrl=jdbc:mariadb://localhost..."

But as soon as I start the standalone Avatica server (same MariaDB server, same 
MariaDB JDBC driver version) and connect through it 
"jdbc:avatica:remote:url=..." I get the following exception on my 
clientapplication when preparing my PreparedStatement:
{code:java}
 org.apache.calcite.avatica.AvaticaSqlException: Error -1 (00000) : while 
preparing SQL: SELECT id FROM ent WHERE col = ?
        at org.apache.calcite.avatica.Helper.createException(Helper.java:54)
        at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:358)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:175)
{code}
I started debugging the avatica server and found the cause:
{code:java}
java.sql.SQLFeatureNotSupportedException: Getting parameter type metadata are 
not supported
        at 
org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54)
        at 
org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.notSupported(ExceptionFactory.java:172)
        at 
org.mariadb.jdbc.MariaDbParameterMetaData.getParameterType(MariaDbParameterMetaData.java:133)
        at 
org.apache.calcite.avatica.jdbc.JdbcMeta.parameters(JdbcMeta.java:277)
        at org.apache.calcite.avatica.jdbc.JdbcMeta.signature(JdbcMeta.java:288)
        at org.apache.calcite.avatica.jdbc.JdbcMeta.prepare(JdbcMeta.java:721)
        at 
org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:201)
{code}
It looks like MariaDB does not support getParameterType(int param): 
[https://jira.mariadb.org/browse/CONJ-568] and 
[https://jira.mariadb.org/browse/MDEV-15031].

Is there a way to prevent avatica-server from calling this method?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to