From 9346285c087980176c1350df575ad5344a4b45cd Mon Sep 17 00:00:00 2001 From: HaHaWTH Date: Mon, 29 Jan 2024 22:28:30 +0800 Subject: [PATCH] H2 database support --- pom.xml | 5 --- .../java/fr/xephi/authme/datasource/H2.java | 45 ++++++++++--------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index 945b4552..8859b43e 100644 --- a/pom.xml +++ b/pom.xml @@ -346,11 +346,6 @@ com.google.gson fr.xephi.authme.libs.com.google.gson - - org.h2 - fr.xephi.authme.libs.org.h2 - - diff --git a/src/main/java/fr/xephi/authme/datasource/H2.java b/src/main/java/fr/xephi/authme/datasource/H2.java index 97ed85ea..17a55118 100644 --- a/src/main/java/fr/xephi/authme/datasource/H2.java +++ b/src/main/java/fr/xephi/authme/datasource/H2.java @@ -81,7 +81,7 @@ public class H2 extends AbstractSqlDataSource { */ protected void connect() throws SQLException { try { - Class.forName("fr.xephi.authme.libs.org.h2.Driver"); + Class.forName("org.h2.Driver"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Failed to load H2 JDBC class", e); } @@ -109,32 +109,32 @@ public class H2 extends AbstractSqlDataSource { DatabaseMetaData md = con.getMetaData(); if (isColumnMissing(md, col.REAL_NAME)) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.REAL_NAME + " VARCHAR(255) NOT NULL DEFAULT 'Player';"); } if (isColumnMissing(md, col.PASSWORD)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.PASSWORD + " VARCHAR(255) NOT NULL DEFAULT '';"); + + " ADD COLUMN IF NOT EXISTS " + col.PASSWORD + " VARCHAR(255) NOT NULL DEFAULT '';"); } if (!col.SALT.isEmpty() && isColumnMissing(md, col.SALT)) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + col.SALT + " VARCHAR(255);"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.SALT + " VARCHAR(255);"); } if (isColumnMissing(md, col.LAST_IP)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.LAST_IP + " VARCHAR(40);"); + + " ADD COLUMN IF NOT EXISTS " + col.LAST_IP + " VARCHAR(40);"); } if (isColumnMissing(md, col.LAST_LOGIN)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.LAST_LOGIN + " BIGINT;"); + + " ADD COLUMN IF NOT EXISTS " + col.LAST_LOGIN + " BIGINT;"); } if (isColumnMissing(md, col.REGISTRATION_IP)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.REGISTRATION_IP + " VARCHAR(40);"); + + " ADD COLUMN IF NOT EXISTS " + col.REGISTRATION_IP + " VARCHAR(40);"); } if (isColumnMissing(md, col.REGISTRATION_DATE)) { @@ -142,58 +142,63 @@ public class H2 extends AbstractSqlDataSource { } if (isColumnMissing(md, col.LASTLOC_X)) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + col.LASTLOC_X + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.LASTLOC_X + " DOUBLE NOT NULL DEFAULT '0.0';"); - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + col.LASTLOC_Y + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.LASTLOC_Y + " DOUBLE NOT NULL DEFAULT '0.0';"); - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + col.LASTLOC_Z + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.LASTLOC_Z + " DOUBLE NOT NULL DEFAULT '0.0';"); } if (isColumnMissing(md, col.LASTLOC_WORLD)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.LASTLOC_WORLD + " VARCHAR(255) NOT NULL DEFAULT 'world';"); + + " ADD COLUMN IF NOT EXISTS " + col.LASTLOC_WORLD + " VARCHAR(255) NOT NULL DEFAULT 'world';"); } if (isColumnMissing(md, col.LASTLOC_YAW)) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.LASTLOC_YAW + " FLOAT;"); } if (isColumnMissing(md, col.LASTLOC_PITCH)) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN IF NOT EXISTS " + col.LASTLOC_PITCH + " FLOAT;"); } if (isColumnMissing(md, col.EMAIL)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.EMAIL + " VARCHAR(255);"); + + " ADD COLUMN IF NOT EXISTS " + col.EMAIL + " VARCHAR(255);"); } if (isColumnMissing(md, col.IS_LOGGED)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.IS_LOGGED + " INT NOT NULL DEFAULT '0';"); + + " ADD COLUMN IF NOT EXISTS " + col.IS_LOGGED + " INT NOT NULL DEFAULT '0';"); } if (isColumnMissing(md, col.HAS_SESSION)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.HAS_SESSION + " INT NOT NULL DEFAULT '0';"); + + " ADD COLUMN IF NOT EXISTS " + col.HAS_SESSION + " INT NOT NULL DEFAULT '0';"); } if (isColumnMissing(md, col.TOTP_KEY)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.TOTP_KEY + " VARCHAR(32);"); + + " ADD COLUMN IF NOT EXISTS " + col.TOTP_KEY + " VARCHAR(32);"); } if (!col.PLAYER_UUID.isEmpty() && isColumnMissing(md, col.PLAYER_UUID)) { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.PLAYER_UUID + " VARCHAR(36)"); + + " ADD COLUMN IF NOT EXISTS " + col.PLAYER_UUID + " VARCHAR(36)"); } } logger.info("H2 Setup finished"); } - + /** + * Checks if a column is missing. + * @deprecated Not working in H2 database(always true), replaced by statement "IF NOT EXISTS" + * @return true/false + */ + @Deprecated private boolean isColumnMissing(DatabaseMetaData metaData, String columnName) throws SQLException { try (ResultSet rs = metaData.getColumns(null, null, tableName, columnName)) { return !rs.next(); @@ -380,7 +385,7 @@ public class H2 extends AbstractSqlDataSource { */ private void addRegistrationDateColumn(Statement st) throws SQLException { st.executeUpdate("ALTER TABLE " + tableName - + " ADD COLUMN " + col.REGISTRATION_DATE + " BIGINT NOT NULL DEFAULT '0';"); + + " ADD COLUMN IF NOT EXISTS " + col.REGISTRATION_DATE + " BIGINT NOT NULL DEFAULT '0';"); // Use the timestamp from Java to avoid timezone issues in case JVM and database are out of sync long currentTimestamp = System.currentTimeMillis();