初步实现mysql适配,但暂时存在returning语法缺失问题

This commit is contained in:
zhangyuheng 2024-06-17 17:51:43 +08:00
parent 2299630e15
commit 03cb1af603
3 changed files with 78 additions and 66 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId> <groupId>cn.lunadeer</groupId>
<artifactId>Dominion</artifactId> <artifactId>Dominion</artifactId>
<version>1.32.0-beta</version> <version>1.33.0-beta</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>Dominion</name> <name>Dominion</name>
@ -82,7 +82,7 @@
<dependency> <dependency>
<groupId>cn.lunadeer</groupId> <groupId>cn.lunadeer</groupId>
<artifactId>MinecraftPluginUtils</artifactId> <artifactId>MinecraftPluginUtils</artifactId>
<version>1.3.2-SNAPSHOT</version> <version>1.3.3-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.BlueMap-Minecraft</groupId> <groupId>com.github.BlueMap-Minecraft</groupId>

View File

@ -8,65 +8,78 @@ public class DatabaseTables {
String sql = ""; String sql = "";
// player name // player name
sql = "CREATE TABLE IF NOT EXISTS player_name (" + Dominion.database.createTableIfNotExists(
" id SERIAL PRIMARY KEY," + "player_name",
" uuid VARCHAR(36) NOT NULL UNIQUE," + new String[]{"id", "uuid", "last_known_name", "last_join_at"},
" last_known_name TEXT NOT NULL," + new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL UNIQUE", "TEXT NOT NULL", "TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"},
" last_join_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP" + null
");"; );
Dominion.database.query(sql);
// dominion table // dominion table
sql = "CREATE TABLE IF NOT EXISTS dominion (" + Dominion.database.createTableIfNotExists(
" id SERIAL PRIMARY KEY," + "dominion",
" owner VARCHAR(36) NOT NULL," + new String[]{"id",
" name TEXT NOT NULL UNIQUE," + "owner",
" world TEXT NOT NULL," + "name",
" x1 INT NOT NULL," + "world",
" y1 INT NOT NULL," + "x1", "y1", "z1", "x2", "y2", "z2",
" z1 INT NOT NULL," + "parent_dom_id",
" x2 INT NOT NULL," + "join_message",
" y2 INT NOT NULL," + "leave_message"},
" z2 INT NOT NULL," + new String[]{
" parent_dom_id INT NOT NULL DEFAULT -1," + "SERIAL PRIMARY KEY",
" join_message TEXT NOT NULL DEFAULT '欢迎', " + "VARCHAR(36) NOT NULL",
" leave_message TEXT NOT NULL DEFAULT '再见', " + "TEXT NOT NULL UNIQUE",
"TEXT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL", "INT NOT NULL",
" FOREIGN KEY (owner) REFERENCES player_name(uuid) ON DELETE CASCADE," + "INT NOT NULL DEFAULT -1",
" FOREIGN KEY (parent_dom_id) REFERENCES dominion(id) ON DELETE CASCADE" + "TEXT NOT NULL DEFAULT '欢迎'",
");"; "TEXT NOT NULL DEFAULT '再见'"},
Dominion.database.query(sql); new String[]{
"FOREIGN KEY (owner) REFERENCES player_name(uuid) ON DELETE CASCADE",
"FOREIGN KEY (parent_dom_id) REFERENCES dominion(id) ON DELETE CASCADE"
}
);
// player privilege // player privilege
sql = "CREATE TABLE IF NOT EXISTS player_privilege (" + Dominion.database.createTableIfNotExists(
" id SERIAL PRIMARY KEY," + "player_privilege",
" player_uuid VARCHAR(36) NOT NULL," + new String[]{"id", "player_uuid", "dom_id", "admin"},
" dom_id INT NOT NULL," + new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL", "INT NOT NULL", "BOOLEAN NOT NULL DEFAULT FALSE"},
new String[]{
"UNIQUE (player_uuid, dom_id)",
"FOREIGN KEY (player_uuid) REFERENCES player_name(uuid) ON DELETE CASCADE",
"FOREIGN KEY (dom_id) REFERENCES dominion(id) ON DELETE CASCADE"
}
);
" admin BOOLEAN NOT NULL DEFAULT FALSE," + Dominion.database.insertRowIfNotExists("player_name",
new String[]{"id", "uuid", "last_known_name"},
new String[]{"-1", "00000000-0000-0000-0000-000000000000", "server"},
0
);
" UNIQUE (player_uuid, dom_id)," + Dominion.database.insertRowIfNotExists("dominion",
" FOREIGN KEY (player_uuid) REFERENCES player_name(uuid) ON DELETE CASCADE," + new String[]{
" FOREIGN KEY (dom_id) REFERENCES dominion(id) ON DELETE CASCADE" + "id",
");"; "owner",
Dominion.database.query(sql); "name",
"world",
sql = "INSERT INTO player_name (" + "x1", "y1", "z1", "x2", "y2", "z2",
"id, uuid, last_known_name" + "parent_dom_id",
") VALUES (" + "join_message",
"-1, '00000000-0000-0000-0000-000000000000', 'server'" + "leave_message"},
") ON CONFLICT DO NOTHING;"; new String[]{
Dominion.database.query(sql); "-1",
"00000000-0000-0000-0000-000000000000",
sql = "INSERT INTO dominion (" + "根领地",
"id, owner, name, world, x1, y1, z1, x2, y2, z2, parent_dom_id, join_message, leave_message" + "all",
") VALUES (" + "-2147483648", "-2147483648", "-2147483648",
"-1, '00000000-0000-0000-0000-000000000000', '根领地', 'all', " + "2147483647", "2147483647", "2147483647",
"-2147483648, -2147483648, -2147483648, " + "-1",
"2147483647, 2147483647, 2147483647, -1, " + "欢迎",
"'欢迎', '再见'" + "再见"},
") ON CONFLICT DO NOTHING;"; 0
Dominion.database.query(sql); );
for (Flag flag : Flag.getAllDominionFlags()) { for (Flag flag : Flag.getAllDominionFlags()) {
Dominion.database.addColumnIfNotExists("dominion", Dominion.database.addColumnIfNotExists("dominion",
@ -84,16 +97,15 @@ public class DatabaseTables {
Dominion.database.addColumnIfNotExists("dominion", "tp_location", "TEXT NOT NULL DEFAULT 'default'"); Dominion.database.addColumnIfNotExists("dominion", "tp_location", "TEXT NOT NULL DEFAULT 'default'");
// 1.31.0 // 1.31.0
sql = "CREATE TABLE IF NOT EXISTS privilege_template (" + Dominion.database.createTableIfNotExists(
" id SERIAL PRIMARY KEY," + "privilege_template",
" creator VARCHAR(36) NOT NULL," + new String[]{"id", "creator", "name", "admin"},
" name TEXT NOT NULL," + new String[]{"SERIAL PRIMARY KEY", "VARCHAR(36) NOT NULL", "TEXT NOT NULL", "BOOLEAN NOT NULL DEFAULT FALSE"},
" admin BOOLEAN NOT NULL DEFAULT FALSE," + new String[]{
"UNIQUE (creator, name)",
" UNIQUE (creator, name)," + "FOREIGN KEY (creator) REFERENCES player_name(uuid) ON DELETE CASCADE"
" FOREIGN KEY (creator) REFERENCES player_name(uuid) ON DELETE CASCADE" + }
");"; );
Dominion.database.query(sql);
for (Flag flag : Flag.getAllPrivilegeFlags()) { for (Flag flag : Flag.getAllPrivilegeFlags()) {
Dominion.database.addColumnIfNotExists("privilege_template", Dominion.database.addColumnIfNotExists("privilege_template",

View File

@ -1,5 +1,5 @@
Database: Database:
Type: sqlite # pgsql, sqlite Type: sqlite # pgsql, sqlite, mysql
Host: localhost Host: localhost
Port: 5432 Port: 5432
Name: dominion Name: dominion