Skip to content

Commit c2c044f

Browse files
authored
feat: support for postgresql (#2368)
* feat: support for postgresql feat: fabric now includes jdbc driver * fix: missing auto commit * chore: remove database drivers * feat: update de and en configs * feat: support for other languages
1 parent 2d785fd commit c2c044f

File tree

15 files changed

+364
-24
lines changed

15 files changed

+364
-24
lines changed

common/src/main/java/ac/grim/grimac/manager/violationdatabase/ViolationDatabaseManager.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import ac.grim.grimac.manager.init.ReloadableInitable;
77
import ac.grim.grimac.manager.init.start.StartableInitable;
88
import ac.grim.grimac.manager.violationdatabase.mysql.MySQLViolationDatabase;
9+
import ac.grim.grimac.manager.violationdatabase.postgresql.PostgresqlViolationDatabase;
910
import ac.grim.grimac.manager.violationdatabase.sqlite.SQLiteViolationDatabase;
1011
import ac.grim.grimac.player.GrimPlayer;
1112
import ac.grim.grimac.utils.anticheat.LogUtil;
@@ -93,6 +94,28 @@ public void load() {
9394
}
9495
}
9596

97+
case "POSTGRESQL" -> {
98+
String host = cfg.getStringElse("history.database.host", "localhost:3306");
99+
String db = cfg.getStringElse("history.database.database", "grimac");
100+
String user = cfg.getStringElse("history.database.username", "root");
101+
String pwd = cfg.getStringElse("history.database.password", "password");
102+
103+
if (database instanceof PostgresqlViolationDatabase postgresql
104+
&& postgresql.sameConfig(host, db, user, pwd)) {
105+
break; // nothing changed → keep pool
106+
}
107+
database.disconnect();
108+
database = new PostgresqlViolationDatabase(host, db, user, pwd);
109+
try {
110+
database.connect();
111+
loaded = true;
112+
} catch (SQLException e) {
113+
LogUtil.error(e);
114+
this.database = NoOpViolationDatabase.INSTANCE;
115+
loaded = false;
116+
}
117+
}
118+
96119
default -> { // NOOP or invalid
97120
if (!(database instanceof NoOpViolationDatabase)) {
98121
database.disconnect();
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ac.grim.grimac.manager.violationdatabase.postgresql;
2+
3+
import ac.grim.grimac.manager.violationdatabase.DatabaseDialect;
4+
5+
public class PostgresqlDialect implements DatabaseDialect {
6+
7+
@Override
8+
public String getUuidColumnType() {
9+
return "UUID";
10+
}
11+
12+
@Override
13+
public String getAutoIncrementPrimaryKeySyntax() {
14+
return "BIGSERIAL PRIMARY KEY";
15+
}
16+
17+
@Override
18+
public String getInsertOrIgnoreSyntax(String tableName, String columnNames) {
19+
return "INSERT INTO " + tableName + " (" + columnNames + ") VALUES (?) ON CONFLICT DO NOTHING";
20+
}
21+
22+
@Override
23+
public String getUniqueConstraintViolationSQLState() {
24+
return "23505"; // Postgresql duplicate key error
25+
}
26+
27+
@Override
28+
public int getUniqueConstraintViolationErrorCode() {
29+
return 0; // Postgresql is not using numbers
30+
}
31+
}

common/src/main/java/ac/grim/grimac/manager/violationdatabase/postgresql/PostgresqlViolationDatabase.java

Lines changed: 286 additions & 0 deletions
Large diffs are not rendered by default.

common/src/main/resources/config/de.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ history:
218218
# Welcher Servername soll für den History‑Befehl eingetragen werden? Nützlich, wenn dieselbe Datenbank für mehrere Server verwendet wird
219219
server-name: Prison
220220
database:
221-
# SQLITE für lokale Speicherung, MYSQL für eine externe MySQL‑Datenbank. Wird nur nach Serverneustart aktualisiert
221+
# SQLITE für lokale Speicherung, MYSQL oder POSTGRESQL für eine externe Datenbank. Wird nur nach Serverneustart aktualisiert
222222
type: SQLITE
223-
# MySQL‑Verbindungsdetails
223+
# Datenbank verbindungsdetails
224224
host: localhost
225225
port: 3306
226226
database: grim

common/src/main/resources/config/en.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ history:
218218
# What should the inserted server name be for the history command? This is useful if you use the same database for multiple servers
219219
server-name: Prison
220220
database:
221-
# Use SQLITE for local storage, use MYSQL if you have an external MySQL database. This is only updated on server restart
221+
# Use SQLITE for local storage, use MYSQL or POSTGRESQL if you have an external database. This is only updated on server restart
222222
type: SQLITE
223-
# MySQL connection details
223+
# database connection details
224224
host: localhost
225225
port: 3306
226226
database: grim

common/src/main/resources/config/es.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,9 @@ history:
220220
# ¿Qué nombre de servidor debe insertarse para el comando history? Útil si compartes la misma base de datos entre varios servidores
221221
server-name: Prison
222222
database:
223-
# Usa SQLITE para almacenamiento local o MYSQL si tienes una base de datos MySQL externa. Solo se actualiza al reiniciar el servidor
223+
# Use SQLITE para almacenamiento local, use MYSQL o POSTGRESQL si tiene una base de datos externa. Esto solo se actualiza al reiniciar el servidor
224224
type: SQLITE
225-
# Detalles de conexión MySQL
225+
# Detalles de conexión de la base de datos
226226
host: localhost
227227
port: 3306
228228
database: grim

common/src/main/resources/config/fr.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,9 @@ history:
215215
# Quel nom de serveur doit être inséré pour la commande history ? Utile si vous utilisez la même base de données pour plusieurs serveurs
216216
server-name: Prison
217217
database:
218-
# Utilisez SQLITE pour un stockage local, MYSQL si vous disposez d’une base MySQL externe. Mis à jour seulement au redémarrage du serveur
218+
# Utilisez SQLITE pour le stockage local, utilisez MYSQL ou POSTGRESQL si vous avez une base de données externe. Ceci n'est mis à jour qu'au redémarrage du serveur
219219
type: SQLITE
220-
# Détails de connexion MySQL
220+
# Détails de connexion à la base de données
221221
host: localhost
222222
port: 3306
223223
database: grim

common/src/main/resources/config/it.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,9 @@ history:
196196
# Quale nome server deve essere inserito per il comando history? Utile se usi lo stesso database per più server
197197
server-name: Prison
198198
database:
199-
# Usa SQLITE per larchiviazione locale, MYSQL se hai un database MySQL esterno. Aggiornato solo al riavvio del server
199+
# Usa SQLITE per l'archiviazione locale, usa MYSQL o POSTGRESQL se hai un database esterno. Questo viene aggiornato solo al riavvio del server
200200
type: SQLITE
201-
# Dettagli di connessione MySQL
201+
# Dettagli di connessione al database
202202
host: localhost
203203
port: 3306
204204
database: grim

common/src/main/resources/config/ja.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,9 @@ history:
227227
# history コマンドで挿入されるサーバー名は? 複数サーバーで同じデータベースを使用する場合に便利
228228
server-name: Prison
229229
database:
230-
# ローカル保存には SQLITE、外部 MySQL データベースには MYSQL を使用します。サーバー再起動時にのみ反映
230+
# ローカルストレージにはSQLITEを使用し、外部データベースがある場合はMYSQLまたはPOSTGRESQLを使用してください。これはサーバー再起動時にのみ更新されます
231231
type: SQLITE
232-
# MySQL 接続情報
232+
# データベース接続の詳細
233233
host: localhost
234234
port: 3306
235235
database: grim

common/src/main/resources/config/nl.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ history:
218218
# Welke servernaam moet voor het history‑commando worden ingevoerd? Handig als je dezelfde database voor meerdere servers gebruikt
219219
server-name: Prison
220220
database:
221-
# Gebruik SQLITE voor lokale opslag, MYSQL voor een externe MySQL‑database. Alleen bijgewerkt na een serverherstart
221+
# Gebruik SQLITE voor lokale opslag, gebruik MYSQL of POSTGRESQL als u een externe database heeft. Dit wordt alleen bijgewerkt bij het herstarten van de server
222222
type: SQLITE
223-
# MySQL‑verbindingsgegevens
223+
# Databaseverbindingsgegevens
224224
host: localhost
225225
port: 3306
226226
database: grim

0 commit comments

Comments
 (0)