Add configuration to use the legacy query for old synapse to get room names.
This commit is contained in:
@@ -29,23 +29,27 @@ import java.util.Optional;
|
||||
|
||||
public class Synapse {
|
||||
|
||||
private SqlConnectionPool pool;
|
||||
private final SqlConnectionPool pool;
|
||||
private final SynapseSqlProviderConfig providerConfig;
|
||||
|
||||
public Synapse(SynapseSqlProviderConfig sqlCfg) {
|
||||
this.pool = new SqlConnectionPool(sqlCfg);
|
||||
providerConfig = sqlCfg;
|
||||
}
|
||||
|
||||
public Optional<String> getRoomName(String id) {
|
||||
return pool.withConnFunction(conn -> {
|
||||
PreparedStatement stmt = conn.prepareStatement(SynapseQueries.getRoomName());
|
||||
stmt.setString(1, id);
|
||||
ResultSet rSet = stmt.executeQuery();
|
||||
if (!rSet.next()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
String query = providerConfig.isLegacyRoomNames() ? SynapseQueries.getLegacyRoomName() : SynapseQueries.getRoomName();
|
||||
|
||||
return Optional.ofNullable(rSet.getString(1));
|
||||
return pool.withConnFunction(conn -> {
|
||||
try (PreparedStatement stmt = conn.prepareStatement(query)) {
|
||||
stmt.setString(1, id);
|
||||
ResultSet rSet = stmt.executeQuery();
|
||||
if (!rSet.next()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
return Optional.ofNullable(rSet.getString(1));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -75,4 +75,7 @@ public class SynapseQueries {
|
||||
return "select name from room_stats_state where room_id = ? limit 1";
|
||||
}
|
||||
|
||||
public static String getLegacyRoomName() {
|
||||
return "select r.name from room_names r, events e, (select r1.room_id,max(e1.origin_server_ts) ts from room_names r1, events e1 where r1.event_id = e1.event_id group by r1.room_id) rle where e.origin_server_ts = rle.ts and r.event_id = e.event_id and r.room_id = ?";
|
||||
}
|
||||
}
|
||||
|
@@ -24,9 +24,23 @@ import io.kamax.mxisd.UserIdType;
|
||||
import io.kamax.mxisd.backend.sql.synapse.SynapseQueries;
|
||||
import io.kamax.mxisd.config.sql.SqlConfig;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class SynapseSqlProviderConfig extends SqlConfig {
|
||||
|
||||
private transient final Logger log = LoggerFactory.getLogger(SynapseSqlProviderConfig.class);
|
||||
|
||||
private boolean legacyRoomNames = false;
|
||||
|
||||
public boolean isLegacyRoomNames() {
|
||||
return legacyRoomNames;
|
||||
}
|
||||
|
||||
public void setLegacyRoomNames(boolean legacyRoomNames) {
|
||||
this.legacyRoomNames = legacyRoomNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getProviderName() {
|
||||
return "Synapse SQL";
|
||||
@@ -65,4 +79,12 @@ public class SynapseSqlProviderConfig extends SqlConfig {
|
||||
printConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void printConfig() {
|
||||
super.printConfig();
|
||||
|
||||
if (isEnabled()) {
|
||||
log.info("Use legacy room name query: {}", isLegacyRoomNames());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user