public Dialect getDialect()

in wrapper/src/main/java/software/amazon/jdbc/dialect/DialectManager.java [120:229]


  public Dialect getDialect(
      final @NonNull String driverProtocol,
      final @NonNull String url,
      final @NonNull Properties props)
      throws SQLException {

    this.canUpdate = false;
    this.dialect = null;

    final Dialect customDialect = Driver.getCustomDialect();
    if (customDialect != null) {
      this.dialectCode = DialectCodes.CUSTOM;
      this.dialect = customDialect;
      this.logCurrentDialect();
      return this.dialect;
    }

    final String userDialectSetting = DIALECT.getString(props);
    final String dialectCode = !StringUtils.isNullOrEmpty(userDialectSetting)
        ? userDialectSetting
        : knownEndpointDialects.get(url);

    if (!StringUtils.isNullOrEmpty(dialectCode)) {
      final Dialect userDialect = knownDialectsByCode.get(dialectCode);
      if (userDialect != null) {
        this.dialectCode = dialectCode;
        this.dialect = userDialect;
        this.logCurrentDialect();
        return userDialect;
      } else {
        throw new SQLException(
            Messages.get("DialectManager.unknownDialectCode", new Object[] {dialectCode}));
      }
    }

    if (StringUtils.isNullOrEmpty(driverProtocol)) {
      throw new IllegalArgumentException("protocol");
    }

    String host = url;
    final List<HostSpec> hosts = this.connectionUrlParser.getHostsFromConnectionUrl(url, true,
        () -> pluginService.getHostSpecBuilder());
    if (!Utils.isNullOrEmpty(hosts)) {
      host = hosts.get(0).getHost();
    }

    if (driverProtocol.contains("mysql")) {
      RdsUrlType type = this.rdsHelper.identifyRdsType(host);
      if (type.isRdsCluster()) {
        this.canUpdate = true;
        this.dialectCode = DialectCodes.AURORA_MYSQL;
        this.dialect = knownDialectsByCode.get(DialectCodes.AURORA_MYSQL);
        return this.dialect;
      }
      if (type.isRds()) {
        this.canUpdate = true;
        this.dialectCode = DialectCodes.RDS_MYSQL;
        this.dialect = knownDialectsByCode.get(DialectCodes.RDS_MYSQL);
        this.logCurrentDialect();
        return this.dialect;
      }
      this.canUpdate = true;
      this.dialectCode = DialectCodes.MYSQL;
      this.dialect = knownDialectsByCode.get(DialectCodes.MYSQL);
      this.logCurrentDialect();
      return this.dialect;
    }

    if (driverProtocol.contains("postgresql")) {
      RdsUrlType type = this.rdsHelper.identifyRdsType(host);
      if (RdsUrlType.RDS_AURORA_LIMITLESS_DB_SHARD_GROUP.equals(type)) {
        this.canUpdate = false;
        this.dialectCode = DialectCodes.AURORA_PG;
        this.dialect = knownDialectsByCode.get(DialectCodes.AURORA_PG);
        return this.dialect;
      }
      if (type.isRdsCluster()) {
        this.canUpdate = true;
        this.dialectCode = DialectCodes.AURORA_PG;
        this.dialect = knownDialectsByCode.get(DialectCodes.AURORA_PG);
        return this.dialect;
      }
      if (type.isRds()) {
        this.canUpdate = true;
        this.dialectCode = DialectCodes.RDS_PG;
        this.dialect = knownDialectsByCode.get(DialectCodes.RDS_PG);
        this.logCurrentDialect();
        return this.dialect;
      }
      this.canUpdate = true;
      this.dialectCode = DialectCodes.PG;
      this.dialect = knownDialectsByCode.get(DialectCodes.PG);
      this.logCurrentDialect();
      return this.dialect;
    }

    if (driverProtocol.contains("mariadb")) {
      this.canUpdate = true;
      this.dialectCode = DialectCodes.MARIADB;
      this.dialect = knownDialectsByCode.get(DialectCodes.MARIADB);
      this.logCurrentDialect();
      return this.dialect;
    }

    this.canUpdate = true;
    this.dialectCode = DialectCodes.UNKNOWN;
    this.dialect = knownDialectsByCode.get(DialectCodes.UNKNOWN);
    this.logCurrentDialect();
    return this.dialect;
  }