From dbce1d33f9ac43ec1daa9c610f25d59754e4a55a Mon Sep 17 00:00:00 2001 From: Govindas Date: Thu, 8 Dec 2022 17:59:45 +0200 Subject: [PATCH] Revert minimizeJar due to bug & fix sync queries in non-main thread --- pom.xml | 7 +- .../skriptdb/skript/EffExecuteStatement.java | 102 ++++++++++-------- 2 files changed, 61 insertions(+), 48 deletions(-) diff --git a/pom.xml b/pom.xml index 6ccfd19..b477439 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.btk5h skript-db - 1.3.5 + 1.3.7 jar @@ -19,8 +19,8 @@ https://jitpack.io - commons-pool2 - https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 + mvnrepository + https://mvnrepository.com PaperMC @@ -56,7 +56,6 @@ 3.2.3 false - true diff --git a/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java b/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java index 3cc6886..1d6a59a 100644 --- a/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java +++ b/src/main/java/com/btk5h/skriptdb/skript/EffExecuteStatement.java @@ -90,49 +90,32 @@ public class EffExecuteStatement extends Effect { Object locals = Variables.removeLocals(e); //execute SQL statement - CompletableFuture sql = - CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool); + + CompletableFuture sql = null; + Object resources = null; + if (!sync) { + sql = CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool); + } else { + resources = executeStatement(ds, baseVariable, query); + } //when SQL statement is completed boolean finalSync = sync; - sql.whenComplete((res, err) -> { - if (err != null) { - err.printStackTrace(); - } - - //handle last error syntax data - lastError = null; - if (res instanceof String) { - lastError = (String) res; - } - - if (getNext() != null) { - //if local variables are present - //bring back local variables - - //populate SQL data into variables - if (!(res instanceof String)) { - - //also set variables in the sql query complete event - - //TEMPORARILY DISABLED, AS THIS WOULD WORSEN PERFORMANCE OF THE QUERIES AND NOT BE USED BY MOST PEOPLE. - //I may add config option to enable this later? - - //SQLQueryCompleteEvent event = new SQLQueryCompleteEvent(this.query.getSingle(e)); - //((Map) res).forEach((name, value) -> setVariable(event, name, value)); - //SkriptDB.getPlugin(SkriptDB.class).getServer().getPluginManager().callEvent(event); + if (sql != null) { + sql.whenComplete((res, err) -> { + if (err != null) { + err.printStackTrace(); } - if (isSync || finalSync) { - if (locals != null) { - Variables.setLocalVariables(e, locals); - } - if (!(res instanceof String)) { - ((Map) res).forEach((name, value) -> setVariable(e, name, value)); - } - TriggerItem.walk(getNext(), e); - Variables.removeLocals(e); - } else { - Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> { + //handle last error syntax data + lastError = null; + if (res instanceof String) { + lastError = (String) res; + } + if (getNext() != null) { + //if local variables are present + //bring back local variables + //populate SQL data into variables + if (isSync || finalSync) { if (locals != null) { Variables.setLocalVariables(e, locals); } @@ -140,14 +123,45 @@ public class EffExecuteStatement extends Effect { ((Map) res).forEach((name, value) -> setVariable(e, name, value)); } TriggerItem.walk(getNext(), e); - //the line below is required to prevent memory leaks - //no functionality difference notice with it being removed from my test, but the memory gets filled with leaks - //so it must be kept Variables.removeLocals(e); - }); + } else { + Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> { + if (locals != null) { + Variables.setLocalVariables(e, locals); + } + if (!(res instanceof String)) { + ((Map) res).forEach((name, value) -> setVariable(e, name, value)); + } + TriggerItem.walk(getNext(), e); + //the line below is required to prevent memory leaks + //no functionality difference notice with it being removed from my test, but the memory gets filled with leaks + //so it must be kept + Variables.removeLocals(e); + }); + } } + }); + // sync executed SQL query, same as above, just sync + } else { + //handle last error syntax data + lastError = null; + if (resources instanceof String) { + lastError = (String) resources; } - }); + if (getNext() != null) { + //if local variables are present + //bring back local variables + //populate SQL data into variables + if (locals != null) { + Variables.setLocalVariables(e, locals); + } + if (!(resources instanceof String)) { + ((Map) resources).forEach((name, value) -> setVariable(e, name, value)); + } + TriggerItem.walk(getNext(), e); + Variables.removeLocals(e); + } + } } @Override