in mysql/lib/dialect/rds_multi_az_mysql_database_dialect.ts [90:126]
private async processTopologyQueryResults(hostListProvider: HostListProvider, writerHostId: string, rows: any[]): Promise<HostInfo[]> {
const hostMap: Map<string, HostInfo> = new Map<string, HostInfo>();
rows.forEach((row) => {
// According to the topology query the result set
// should contain 3 columns: endpoint, id, and port
const endpoint: string = row["endpoint"];
const id: string = row["id"];
const port: number = row["port"];
const isWriter: boolean = id === writerHostId;
const host: HostInfo = hostListProvider.createHost(endpoint.substring(0, endpoint.indexOf(".")), isWriter, 0, Date.now(), port);
host.hostId = id;
host.addAlias(endpoint);
hostMap.set(host.host, host);
});
let hosts: HostInfo[] = [];
const writers: HostInfo[] = [];
for (const [key, info] of hostMap.entries()) {
if (info.role !== HostRole.WRITER) {
hosts.push(info);
} else {
writers.push(info);
}
}
const writerCount: number = writers.length;
if (writerCount === 0) {
logger.error(Messages.get("RdsMultiAzDatabaseDialect.invalidTopology", this.dialectName));
hosts = [];
} else {
hosts.push(writers[0]);
}
return hosts;
}