Skip to content
  • gmantele's avatar
    [ADQL,TAP] Basic MySQL support. · cf721ff2
    gmantele authored
    On the contrary to other DBMS, MySQL supports schemas, but as databases.
    Which means that JDBCConnection gets from the JDBC driver that MySQL does
    not support schemas and so it tries to access TAP_SCHEMA tables with a
    'TAP_SCHEMA_' prefix instead of 'TAP_SCHEMA.' one. Since MySQL does
    behave like it supports schemas, JDBCConnection.supportsSchema must be
    set to 'true' if the DBMS is MySQL.
    
    Besides, since no schemas are returned by the JDBC driver
    (cf DatabaseMetadata.listSchema(...)), the function
    JDBCConnection.isSchemaExisting(String, DatabaseMetaData) must always assume
    that the specified schema exists if the DBMS is MySQL. This is particularly
    important when the existence of 'TAP_UPLOAD' must be checked, because if the
    function returns 'false' the library will attempt to create the database/schema
    'TAP_UPLOAD' and will obviously fail due to a lack of permissions. Of course,
    it means that the TAP implementor must create manually the schema/database
    'TAP_UPLOAD' him-/her-self.
    
    The second particularity of MySQL is the quote character for identifiers.
    It is a back-quote (`) instead of a double quote ("). To reflect this
    difference, JDBCTranslator.appendIdentifier(...) has been overwritten in a new
    JDBCTranslator extension: MySQLTranslator.
    
    The translation of all SQL types and mathematical functions have been adapted to
    MySQL according to the online documentation. Few tests have been done locally
    with a tiny database. This seems to work but further testing should be
    performed in order to ensure the stability of this implementation.
    cf721ff2