mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-06 19:09:31 +01:00
implement atomic group insertion
This commit is contained in:
parent
4382d5c56d
commit
7bfd5d4bc8
@ -96,7 +96,10 @@ public class SQLBacking extends AbstractBacking {
|
|||||||
private static final String GROUP_PERMISSIONS_SELECT_PERMISSION = "SELECT name, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE permission=?";
|
private static final String GROUP_PERMISSIONS_SELECT_PERMISSION = "SELECT name, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE permission=?";
|
||||||
|
|
||||||
private static final String GROUP_SELECT_ALL = "SELECT name FROM {prefix}groups";
|
private static final String GROUP_SELECT_ALL = "SELECT name FROM {prefix}groups";
|
||||||
private static final String GROUP_INSERT = "INSERT INTO {prefix}groups VALUES(?)";
|
private static final String MYSQL_GROUP_INSERT = "INSERT INTO {prefix}groups (name) VALUES(?) ON DUPLICATE KEY UPDATE name=name";
|
||||||
|
private static final String H2_GROUP_INSERT = "MERGE INTO {prefix}groups (name) VALUES(?)";
|
||||||
|
private static final String SQLITE_GROUP_INSERT = "INSERT OR IGNORE INTO {prefix}groups (name) VALUES(?)";
|
||||||
|
private static final String POSTGRESQL_GROUP_INSERT = "INSERT INTO {prefix}groups (name) VALUES(?) ON CONFLICT (name) DO NOTHING";
|
||||||
private static final String GROUP_DELETE = "DELETE FROM {prefix}groups WHERE name=?";
|
private static final String GROUP_DELETE = "DELETE FROM {prefix}groups WHERE name=?";
|
||||||
|
|
||||||
private static final String TRACK_INSERT = "INSERT INTO {prefix}tracks VALUES(?, ?)";
|
private static final String TRACK_INSERT = "INSERT INTO {prefix}tracks VALUES(?, ?)";
|
||||||
@ -537,32 +540,32 @@ public class SQLBacking extends AbstractBacking {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean createAndLoadGroup(String name) {
|
public boolean createAndLoadGroup(String name) {
|
||||||
List<String> groups = new ArrayList<>();
|
String query;
|
||||||
try (Connection c = provider.getConnection()) {
|
switch (provider.getName()) {
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(GROUP_SELECT_ALL))) {
|
case "H2":
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
query = H2_GROUP_INSERT;
|
||||||
while (rs.next()) {
|
break;
|
||||||
groups.add(rs.getString("name").toLowerCase());
|
case "SQLite":
|
||||||
}
|
query = SQLITE_GROUP_INSERT;
|
||||||
}
|
break;
|
||||||
}
|
case "PostgreSQL":
|
||||||
|
query = POSTGRESQL_GROUP_INSERT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
query = MYSQL_GROUP_INSERT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
try (Connection c = provider.getConnection()) {
|
||||||
|
try (PreparedStatement ps = c.prepareStatement(prefix.apply(query))) {
|
||||||
|
ps.setString(1, name);
|
||||||
|
ps.execute();
|
||||||
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!groups.contains(name)) {
|
|
||||||
try (Connection c = provider.getConnection()) {
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(prefix.apply(GROUP_INSERT))) {
|
|
||||||
ps.setString(1, name);
|
|
||||||
ps.execute();
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return loadGroup(name);
|
return loadGroup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user