Class MySQLTranslator

  • All Implemented Interfaces:
    ADQLTranslator

    public class MySQLTranslator
    extends JDBCTranslator

    Translates all ADQL objects into an SQL interrogation query designed for MySQL.

    Important: The geometrical functions are translated exactly as in ADQL. You will probably need to extend this translator to correctly manage the geometrical functions.

    Since:
    2.1
    Version:
    2.1 (08/2017)
    Author:
    Grégory Mantelet (ARI)
    • Field Detail

      • DEFAULT_VARIABLE_LENGTH

        public static int DEFAULT_VARIABLE_LENGTH
        MySQL requires a length for variable-length types such as CHAR, VARCHAR, BINARY and VARBINARY. This static attributes is the default value set by this translator if no length is specified.
      • caseSensitivity

        protected byte caseSensitivity
        Indicate the case sensitivity to apply to each SQL identifier (only SCHEMA, TABLE and COLUMN).

        Note: In this implementation, this field is set by the constructor and never modified elsewhere. It would be better to never modify it after the construction in order to keep a certain consistency.

    • Constructor Detail

      • MySQLTranslator

        public MySQLTranslator()
        Build a MySQLTranslator which always translates in SQL all identifiers (schema, table and column) in a case sensitive manner ; in other words, schema, table and column names will be surrounded by back-quotes in the SQL translation.
      • MySQLTranslator

        public MySQLTranslator​(boolean allCaseSensitive)
        Build a MySQLTranslator which always translates in SQL all identifiers (schema, table and column) in the specified case sensitivity ; in other words, schema, table and column names will all be surrounded or not by back-quotes in the SQL translation.
        Parameters:
        allCaseSensitive - true to translate all identifiers in a case sensitive manner (surrounded by back-quotes), false for case insensitivity.
      • MySQLTranslator

        public MySQLTranslator​(boolean catalog,
                               boolean schema,
                               boolean table,
                               boolean column)
        Build a MySQLTranslator which will always translate in SQL identifiers with the defined case sensitivity.
        Parameters:
        catalog - true to translate catalog names with back-quotes (case sensitive in the DBMS), false otherwise.
        schema - true to translate schema names with back-quotes (case sensitive in the DBMS), false otherwise.
        table - true to translate table names with back-quotes (case sensitive in the DBMS), false otherwise.
        column - true to translate column names with back-quotes (case sensitive in the DBMS), false otherwise.
    • Method Detail

      • isCaseSensitive

        public boolean isCaseSensitive​(IdentifierField field)
        Description copied from class: JDBCTranslator

        Tell whether the specified identifier MUST be translated so that being interpreted case sensitively or not. By default, an identifier that must be translated with case sensitivity will be surrounded by double quotes. But, if this function returns FALSE, the SQL name will be written just as given in the metadata, without double quotes.

        WARNING: An IdentifierField object can be a SCHEMA, TABLE, COLUMN and ALIAS. However, in this translator, aliases are translated like in ADQL (so, with the same case sensitivity specification as in ADQL). So, this function will never be used to know the case sensitivity to apply to an alias. It is then useless to write a special behavior for the ALIAS value.

        Specified by:
        isCaseSensitive in class JDBCTranslator
        Parameters:
        field - The identifier whose the case sensitive to apply is asked.
        Returns:
        true if the specified identifier must be translated case sensitivity, false otherwise (included if ALIAS or NULL).
      • appendIdentifier

        public java.lang.StringBuffer appendIdentifier​(java.lang.StringBuffer str,
                                                       java.lang.String id,
                                                       boolean caseSensitive)
        Description copied from class: JDBCTranslator
        Appends the given identifier to the given StringBuffer.
        Overrides:
        appendIdentifier in class JDBCTranslator
        Parameters:
        str - The string buffer.
        id - The identifier to append.
        caseSensitive - true to format the identifier so that preserving the case sensitivity, false otherwise.
        Returns:
        The string buffer + identifier.
      • convertTypeFromDB

        public DBType convertTypeFromDB​(int dbmsType,
                                        java.lang.String rawDbmsTypeName,
                                        java.lang.String dbmsTypeName,
                                        java.lang.String[] params)
        Description copied from class: JDBCTranslator
        Convert any type provided by a JDBC driver into a type understandable by the ADQL/TAP library.
        Specified by:
        convertTypeFromDB in class JDBCTranslator
        Parameters:
        dbmsType - Type returned by a JDBC driver. Note: this value is returned by ResultSetMetadata.getColumnType(int) and correspond to a type of java.sql.Types
        rawDbmsTypeName - Full name of the type returned by a JDBC driver. Note: this name is returned by ResultSetMetadata.getColumnTypeName(int) ; this name may contain parameters
        dbmsTypeName - Name of type, without the eventual parameters. Note: this name is extracted from rawDbmsTypeName.
        params - The eventual type parameters (e.g. char string length). Note: these parameters are extracted from rawDbmsTypeName.
        Returns:
        The corresponding ADQL/TAP type or NULL if the specified type is unknown.
      • convertTypeToDB

        public java.lang.String convertTypeToDB​(DBType type)
        Description copied from class: JDBCTranslator

        Convert any type provided by the ADQL/TAP library into a type understandable by a JDBC driver.

        Note: The returned DBMS type may contain some parameters between brackets.

        Specified by:
        convertTypeToDB in class JDBCTranslator
        Parameters:
        type - The ADQL/TAP library's type to convert.
        Returns:
        The corresponding DBMS type or NULL if the specified type is unknown.
      • translateGeometryFromDB

        public STCS.Region translateGeometryFromDB​(java.lang.Object jdbcColValue)
                                            throws ParseException
        Description copied from class: JDBCTranslator

        Parse the given JDBC column value as a geometry object and convert it into a STCS.Region.

        Note: Generally the returned object will be used to get its STC-S expression.

        Note: If the given column value is NULL, NULL will be returned.

        Important note: This function is called ONLY for value of columns flagged as geometries by JDBCTranslator.convertTypeFromDB(int, String, String, String[]). So the value should always be of the expected type and format. However, if it turns out that the type is wrong and that the conversion is finally impossible, this function SHOULD throw a ParseException.

        Specified by:
        translateGeometryFromDB in class JDBCTranslator
        Parameters:
        jdbcColValue - A JDBC column value (returned by ResultSet.getObject(int)).
        Returns:
        The corresponding STCS.Region if the given value is a geometry.
        Throws:
        ParseException - If the given object is not a geometrical object or can not be transformed into a STCS.Region object.
      • translateGeometryToDB

        public java.lang.Object translateGeometryToDB​(STCS.Region region)
                                               throws ParseException
        Description copied from class: JDBCTranslator

        Convert the given STC region into a DB column value.

        Note: This function is used only by the UPLOAD feature, to import geometries provided as STC-S expression in a VOTable document inside a DB column.

        Note: If the given region is NULL, NULL will be returned.

        Specified by:
        translateGeometryToDB in class JDBCTranslator
        Parameters:
        region - The region to store in the DB.
        Returns:
        The corresponding DB column object.
        Throws:
        ParseException - If the given STC Region can not be converted into a DB object.