Skip to content

Commit

Permalink
Add generic return type methods
Browse files Browse the repository at this point in the history
  • Loading branch information
ceze88 committed Jul 13, 2024
1 parent c3cd6ba commit 9b7e659
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ public interface DatabaseConnector {
*/
OptionalResult connectOptional(ConnectionOptionalCallback callback);

/**
* Executes a callback with a Connection passed and automatically closes it when finished
*
* @param callback The callback to execute once the connection is retrieved
* @param defaultValue The default value (First value only) to return if the callback fails (Also used to make automatic type inference work)
*
* @return The result of the callback
*/
<T> T connectResult(ConnectResult<T> callback, T... defaultValue);

/**
* Executes a callback with a DSLContext passed and automatically closes it when finished
*
Expand All @@ -50,6 +60,16 @@ public interface DatabaseConnector {
*/
OptionalResult connectDSLOptional(DSLContextOptionalCallback callback);

/**
* Executes a callback with a DSLContext passed and automatically closes it when finished
*
* @param callback The callback to execute once the connection is retrieved
* @param defaultValue The default value (First value only) to return if the callback fails (Also used to make automatic type inference work)
*
* @return The result of the callback
*/
<T> T connectDSLResult(DSLConnectResult<T> callback, T... defaultValue);

/**
* Wraps a connection in a callback which will automagically handle catching sql errors
*/
Expand Down Expand Up @@ -82,6 +102,19 @@ interface DSLContextOptionalCallback {
OptionalResult accept(DSLContext context) throws SQLException;
}

/**
* Wraps a connection in a callback which will
* automagically handle catching sql errors
* Can return a value
*/
interface ConnectResult<T> {
T accept(Connection connection) throws SQLException;
}

interface DSLConnectResult<T> {
T accept(DSLContext context) throws SQLException;
}

/**
* Gets a connection from the database
*
Expand Down
28 changes: 28 additions & 0 deletions Core/src/main/java/com/craftaro/core/database/H2Connector.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,20 @@ public OptionalResult connectOptional(ConnectionOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectResult(ConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(connection);
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
if (this.plugin != null) {
SongodaCore.getLogger().severe("An error occurred executing a H2 query: " + ex.getMessage());
}
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public void connectDSL(DSLContextCallback callback) {
try (Connection connection = getConnection()) {
Expand All @@ -125,6 +139,20 @@ public OptionalResult connectDSLOptional(DSLContextOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectDSLResult(DSLConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(DSL.using(connection, SQLDialect.MYSQL));
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
if (this.plugin != null) {
SongodaCore.getLogger().severe("An error occurred executing a H2 query: " + ex.getMessage());
}
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public Connection getConnection() throws SQLException {
return this.hikari.getConnection();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,18 @@ public OptionalResult connectOptional(ConnectionOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectResult(ConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(connection);
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
this.plugin.getLogger().severe("An error occurred executing a MariaDB query: " + ex.getMessage());
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public void connectDSL(DSLContextCallback callback) {
try (Connection connection = getConnection()){
Expand All @@ -104,6 +116,18 @@ public OptionalResult connectDSLOptional(DSLContextOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectDSLResult(DSLConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(DSL.using(connection, SQLDialect.MARIADB));
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
this.plugin.getLogger().severe("An error occurred executing a MariaDB query: " + ex.getMessage());
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public Connection getConnection() throws SQLException {
return this.hikari.getConnection();
Expand Down
24 changes: 24 additions & 0 deletions Core/src/main/java/com/craftaro/core/database/MySQLConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,18 @@ public OptionalResult connectOptional(ConnectionOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectResult(ConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(connection);
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
SongodaCore.getLogger().severe("An error occurred executing a MySQL query: " + ex.getMessage());
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public void connectDSL(DSLContextCallback callback) {
try (Connection connection = getConnection()) {
Expand All @@ -100,6 +112,18 @@ public OptionalResult connectDSLOptional(DSLContextOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectDSLResult(DSLConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(DSL.using(connection, SQLDialect.MYSQL));
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
SongodaCore.getLogger().severe("An error occurred executing a MySQL query: " + ex.getMessage());
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public Connection getConnection() throws SQLException {
return this.hikari.getConnection();
Expand Down
24 changes: 24 additions & 0 deletions Core/src/main/java/com/craftaro/core/database/SQLiteConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,18 @@ public OptionalResult connectOptional(ConnectionOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectResult(ConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(connection);
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
this.plugin.getLogger().severe("An error occurred executing a SQLite query: " + ex.getMessage());
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public void connectDSL(DSLContextCallback callback) {
try (Connection connection = getConnection()) {
Expand All @@ -90,6 +102,18 @@ public OptionalResult connectDSLOptional(DSLContextOptionalCallback callback) {
return OptionalResult.empty();
}

@Override
public <T> T connectDSLResult(DSLConnectResult<T> callback, T... defaultValue) {
try (Connection connection = getConnection()) {
T result = callback.accept(DSL.using(connection, SQLDialect.SQLITE));
return result != null ? result : defaultValue.length > 0 ? defaultValue[0] : null;
} catch (Exception ex) {
this.plugin.getLogger().severe("An error occurred executing a SQLite query: " + ex.getMessage());
ex.printStackTrace();
return defaultValue.length > 0 ? defaultValue[0] : null;
}
}

@Override
public Connection getConnection() {
try {
Expand Down

0 comments on commit 9b7e659

Please sign in to comment.