public ConnectionInfo obtainConnectionInfoNatively()

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();
    }
  }