Add configuration to use the legacy query for old synapse to get room names.
This commit is contained in:
@@ -29,15 +29,19 @@ import java.util.Optional;
|
|||||||
|
|
||||||
public class Synapse {
|
public class Synapse {
|
||||||
|
|
||||||
private SqlConnectionPool pool;
|
private final SqlConnectionPool pool;
|
||||||
|
private final SynapseSqlProviderConfig providerConfig;
|
||||||
|
|
||||||
public Synapse(SynapseSqlProviderConfig sqlCfg) {
|
public Synapse(SynapseSqlProviderConfig sqlCfg) {
|
||||||
this.pool = new SqlConnectionPool(sqlCfg);
|
this.pool = new SqlConnectionPool(sqlCfg);
|
||||||
|
providerConfig = sqlCfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<String> getRoomName(String id) {
|
public Optional<String> getRoomName(String id) {
|
||||||
|
String query = providerConfig.isLegacyRoomNames() ? SynapseQueries.getLegacyRoomName() : SynapseQueries.getRoomName();
|
||||||
|
|
||||||
return pool.withConnFunction(conn -> {
|
return pool.withConnFunction(conn -> {
|
||||||
PreparedStatement stmt = conn.prepareStatement(SynapseQueries.getRoomName());
|
try (PreparedStatement stmt = conn.prepareStatement(query)) {
|
||||||
stmt.setString(1, id);
|
stmt.setString(1, id);
|
||||||
ResultSet rSet = stmt.executeQuery();
|
ResultSet rSet = stmt.executeQuery();
|
||||||
if (!rSet.next()) {
|
if (!rSet.next()) {
|
||||||
@@ -45,7 +49,7 @@ public class Synapse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Optional.ofNullable(rSet.getString(1));
|
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";
|
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.backend.sql.synapse.SynapseQueries;
|
||||||
import io.kamax.mxisd.config.sql.SqlConfig;
|
import io.kamax.mxisd.config.sql.SqlConfig;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class SynapseSqlProviderConfig extends SqlConfig {
|
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
|
@Override
|
||||||
protected String getProviderName() {
|
protected String getProviderName() {
|
||||||
return "Synapse SQL";
|
return "Synapse SQL";
|
||||||
@@ -65,4 +79,12 @@ public class SynapseSqlProviderConfig extends SqlConfig {
|
|||||||
printConfig();
|
printConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void printConfig() {
|
||||||
|
super.printConfig();
|
||||||
|
|
||||||
|
if (isEnabled()) {
|
||||||
|
log.info("Use legacy room name query: {}", isLegacyRoomNames());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user