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