diff --git a/src/main/java/io/kamax/mxisd/backend/sql/synapse/Synapse.java b/src/main/java/io/kamax/mxisd/backend/sql/synapse/Synapse.java index 3898d36..73aa1ea 100644 --- a/src/main/java/io/kamax/mxisd/backend/sql/synapse/Synapse.java +++ b/src/main/java/io/kamax/mxisd/backend/sql/synapse/Synapse.java @@ -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 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)); + } }); } - } diff --git a/src/main/java/io/kamax/mxisd/backend/sql/synapse/SynapseQueries.java b/src/main/java/io/kamax/mxisd/backend/sql/synapse/SynapseQueries.java index 64b8d99..1839cbd 100644 --- a/src/main/java/io/kamax/mxisd/backend/sql/synapse/SynapseQueries.java +++ b/src/main/java/io/kamax/mxisd/backend/sql/synapse/SynapseQueries.java @@ -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 = ?"; + } } diff --git a/src/main/java/io/kamax/mxisd/config/sql/synapse/SynapseSqlProviderConfig.java b/src/main/java/io/kamax/mxisd/config/sql/synapse/SynapseSqlProviderConfig.java index 747a18e..9359362 100644 --- a/src/main/java/io/kamax/mxisd/config/sql/synapse/SynapseSqlProviderConfig.java +++ b/src/main/java/io/kamax/mxisd/config/sql/synapse/SynapseSqlProviderConfig.java @@ -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()); + } + } }