in old/dekaf-mysql/src/main/java/org/jetbrains/dekaf/jdbc/MysqlIntermediateFacade.java [55:106]
public ConnectionInfo obtainConnectionInfoNatively() {
String[] env;
Version serverVersion = null, driverVersion;
final JdbcIntermediateSession session = openSession();
try {
// environment
env = session.queryOneRow(CONNECTION_INFO_QUERY, 4, String.class);
String verComment = env == null ? null : env[3];
if (verComment != null) verComment = verComment.toLowerCase(Locale.ENGLISH);
if (env == null) env = new String[] {null, null, null};
// versions
String rdbmsName, serverVersionStr, driverVersionStr;
try {
DatabaseMetaData md = session.getConnection().getMetaData();
serverVersionStr = md.getDatabaseProductVersion();
driverVersionStr = md.getDriverVersion();
rdbmsName = md.getDatabaseProductName();
if (rdbmsName == null) rdbmsName = session.getConnection().getClass().getName();
}
catch (SQLException sqle) {
throw getExceptionRecognizer().recognizeException(sqle, "getting versions using JDBC metadata");
}
if (rdbmsName.equals("MySQL")) {
int pos = serverVersionStr.indexOf(Mysql.MARIADB_FLAVOUR);
if (pos != -1) {
serverVersion = extractMariaVersionImpl(pos, serverVersionStr);
if (serverVersion != Version.ZERO) rdbmsName = Mysql.MARIADB_FLAVOUR;
else serverVersion = null;
}
else if (verComment != null) {
if (verComment.startsWith("memsql")) {
rdbmsName = Mysql.MEMSQL_FLAVOUR;
String[] memVer = session.queryOneRow("select @@memsql_version", 1, String.class);
if (memVer != null && memVer[0] != null) serverVersion = extractVersion(memVer[0], SIMPLE_VERSION_PATTERN, 1);
}
else if (verComment.startsWith("mariadb")) rdbmsName = Mysql.MARIADB_FLAVOUR;
}
}
if (serverVersion == null) serverVersion = extractVersion(serverVersionStr, SIMPLE_VERSION_PATTERN, 1);
driverVersion = extractVersion(driverVersionStr, SIMPLE_VERSION_PATTERN, 1);
// ok
return new ConnectionInfo(rdbmsName, env[0], env[1], env[2], serverVersion, driverVersion);
}
finally {
session.close();
}
}