forked from Limework/skript-db
Fix no vars if execute is last line & fix code cleanup
This commit is contained in:
parent
f92b16a09f
commit
eb89699ed5
@ -60,7 +60,8 @@ public class EffExecuteStatement extends Effect {
|
|||||||
private VariableString var;
|
private VariableString var;
|
||||||
private boolean isLocal;
|
private boolean isLocal;
|
||||||
private boolean isList;
|
private boolean isList;
|
||||||
private boolean isSync;
|
private boolean quickly;
|
||||||
|
private boolean isSync = false;
|
||||||
|
|
||||||
private void continueScriptExecution(Event e, Object populatedVariables) {
|
private void continueScriptExecution(Event e, Object populatedVariables) {
|
||||||
lastError = null;
|
lastError = null;
|
||||||
@ -82,19 +83,10 @@ public class EffExecuteStatement extends Effect {
|
|||||||
String baseVariable = var != null ? var.toString(e).toLowerCase(Locale.ENGLISH) : null;
|
String baseVariable = var != null ? var.toString(e).toLowerCase(Locale.ENGLISH) : null;
|
||||||
//if data source isn't set
|
//if data source isn't set
|
||||||
if (ds == null) return;
|
if (ds == null) return;
|
||||||
|
|
||||||
//if current thread is not main thread, then make this query to not have delays
|
|
||||||
boolean sync = !Bukkit.isPrimaryThread();
|
|
||||||
if (sync) {
|
|
||||||
isSync = true;
|
|
||||||
} else if (isSync) {
|
|
||||||
sync = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Object locals = Variables.removeLocals(e);
|
Object locals = Variables.removeLocals(e);
|
||||||
|
|
||||||
//execute SQL statement
|
//execute SQL statement
|
||||||
if (!sync) {
|
if (Bukkit.isPrimaryThread()) {
|
||||||
CompletableFuture<Object> sql = CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool);
|
CompletableFuture<Object> sql = CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool);
|
||||||
sql.whenComplete((res, err) -> {
|
sql.whenComplete((res, err) -> {
|
||||||
if (err != null) {
|
if (err != null) {
|
||||||
@ -105,12 +97,12 @@ public class EffExecuteStatement extends Effect {
|
|||||||
if (res instanceof String) {
|
if (res instanceof String) {
|
||||||
lastError = (String) res;
|
lastError = (String) res;
|
||||||
}
|
}
|
||||||
if (getNext() != null) {
|
//if local variables are present
|
||||||
//if local variables are present
|
//bring back local variables
|
||||||
//bring back local variables
|
//populate SQL data into variables
|
||||||
//populate SQL data into variables
|
if (!quickly) {
|
||||||
Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> {
|
Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> {
|
||||||
if (locals != null) {
|
if (locals != null && getNext() != null) {
|
||||||
Variables.setLocalVariables(e, locals);
|
Variables.setLocalVariables(e, locals);
|
||||||
}
|
}
|
||||||
if (!(res instanceof String)) {
|
if (!(res instanceof String)) {
|
||||||
@ -120,36 +112,45 @@ public class EffExecuteStatement extends Effect {
|
|||||||
//the line below is required to prevent memory leaks
|
//the line below is required to prevent memory leaks
|
||||||
Variables.removeLocals(e);
|
Variables.removeLocals(e);
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
if (locals != null && getNext() != null) {
|
||||||
|
Variables.setLocalVariables(e, locals);
|
||||||
|
}
|
||||||
|
if (!(res instanceof String)) {
|
||||||
|
((Map<String, Object>) res).forEach((name, value) -> setVariable(e, name, value));
|
||||||
|
}
|
||||||
|
TriggerItem.walk(getNext(), e);
|
||||||
|
//the line below is required to prevent memory leaks
|
||||||
|
Variables.removeLocals(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// sync executed SQL query, same as above, just sync
|
// sync executed SQL query, same as above, just sync
|
||||||
} else {
|
} else {
|
||||||
|
isSync = true;
|
||||||
Object resources = executeStatement(ds, baseVariable, query);
|
Object resources = executeStatement(ds, baseVariable, query);
|
||||||
//handle last error syntax data
|
//handle last error syntax data
|
||||||
lastError = null;
|
lastError = null;
|
||||||
if (resources instanceof String) {
|
if (resources instanceof String) {
|
||||||
lastError = (String) resources;
|
lastError = (String) resources;
|
||||||
}
|
}
|
||||||
if (getNext() != null) {
|
//if local variables are present
|
||||||
//if local variables are present
|
//bring back local variables
|
||||||
//bring back local variables
|
//populate SQL data into variables
|
||||||
//populate SQL data into variables
|
if (locals != null && getNext() != null) {
|
||||||
if (locals != null) {
|
Variables.setLocalVariables(e, locals);
|
||||||
Variables.setLocalVariables(e, locals);
|
|
||||||
}
|
|
||||||
if (!(resources instanceof String)) {
|
|
||||||
((Map<String, Object>) resources).forEach((name, value) -> setVariable(e, name, value));
|
|
||||||
}
|
|
||||||
TriggerItem.walk(getNext(), e);
|
|
||||||
Variables.removeLocals(e);
|
|
||||||
}
|
}
|
||||||
|
if (!(resources instanceof String)) {
|
||||||
|
((Map<String, Object>) resources).forEach((name, value) -> setVariable(e, name, value));
|
||||||
|
}
|
||||||
|
TriggerItem.walk(getNext(), e);
|
||||||
|
Variables.removeLocals(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TriggerItem walk(Event e) {
|
protected TriggerItem walk(Event e) {
|
||||||
debug(e, true);
|
debug(e, true);
|
||||||
if (!isSync) {
|
if (!quickly || !isSync) {
|
||||||
Delay.addDelayedEvent(e);
|
Delay.addDelayedEvent(e);
|
||||||
}
|
}
|
||||||
execute(e);
|
execute(e);
|
||||||
@ -335,7 +336,7 @@ public class EffExecuteStatement extends Effect {
|
|||||||
}
|
}
|
||||||
dataSource = (Expression<HikariDataSource>) exprs[1];
|
dataSource = (Expression<HikariDataSource>) exprs[1];
|
||||||
Expression<?> expr = exprs[2];
|
Expression<?> expr = exprs[2];
|
||||||
isSync = matchedPattern == 1;
|
quickly = matchedPattern == 1;
|
||||||
if (expr instanceof Variable) {
|
if (expr instanceof Variable) {
|
||||||
Variable<?> varExpr = (Variable<?>) expr;
|
Variable<?> varExpr = (Variable<?>) expr;
|
||||||
var = varExpr.getName();
|
var = varExpr.getName();
|
||||||
|
Loading…
Reference in New Issue
Block a user