forked from Limework/skript-db
Switch from gradle to maven (preference) and optimize code
This commit is contained in:
@@ -78,37 +78,49 @@ public class EffExecuteStatement extends Effect {
|
||||
Pair<String, List<Object>> query = parseQuery(e);
|
||||
String baseVariable = var != null ? var.toString(e).toLowerCase(Locale.ENGLISH) : null;
|
||||
|
||||
//if data source isn't set
|
||||
if (ds == null)
|
||||
return;
|
||||
|
||||
|
||||
if (isSync) {
|
||||
Object populatedVariables = executeStatement(ds, baseVariable, query);
|
||||
continueScriptExecution(e, populatedVariables);
|
||||
} else {
|
||||
Object locals = Variables.removeLocals(e);
|
||||
|
||||
//execute SQL statement
|
||||
CompletableFuture<Object> sql =
|
||||
CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool);
|
||||
|
||||
//when SQL statement is completed
|
||||
sql.whenComplete((res, err) -> {
|
||||
if (err != null) {
|
||||
err.printStackTrace();
|
||||
}
|
||||
|
||||
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
|
||||
if (locals != null)
|
||||
|
||||
//bring back local variables
|
||||
Variables.setLocalVariables(e, locals);
|
||||
|
||||
//populate SQL data into variables
|
||||
if (!(res instanceof String)) {
|
||||
((Map<String, Object>) res).forEach((name, value) -> setVariable(e, name, value));
|
||||
}
|
||||
//doLater.clear();
|
||||
TriggerItem.walk(getNext(), e);
|
||||
Variables.removeLocals(e);
|
||||
//let's try with this commented, as it may be not needed? let's test!
|
||||
//Variables.removeLocals(e);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -224,6 +236,7 @@ public class EffExecuteStatement extends Effect {
|
||||
variableList.put(baseVariable, crs.getRow());
|
||||
}
|
||||
} else if (!isList) {
|
||||
//if no results are returned and the specified variable isn't a list variable, put the affected rows count in the variable
|
||||
variableList.put(baseVariable, stmt.getUpdateCount());
|
||||
}
|
||||
}
|
||||
68
src/java/com/btk5h/skriptdb/skript/Types.java
Normal file
68
src/java/com/btk5h/skriptdb/skript/Types.java
Normal file
@@ -0,0 +1,68 @@
|
||||
package com.btk5h.skriptdb.skript;
|
||||
|
||||
import ch.njol.skript.classes.ClassInfo;
|
||||
import ch.njol.skript.classes.Parser;
|
||||
import ch.njol.skript.classes.Serializer;
|
||||
import ch.njol.skript.lang.ParseContext;
|
||||
import ch.njol.skript.registrations.Classes;
|
||||
import ch.njol.yggdrasil.Fields;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
|
||||
import java.io.StreamCorruptedException;
|
||||
|
||||
public class Types {
|
||||
static {
|
||||
Classes.registerClass(new ClassInfo<>(HikariDataSource.class, "datasource")
|
||||
.user("datasources?")
|
||||
.parser(new Parser<>() {
|
||||
@Override
|
||||
public HikariDataSource parse(String s, ParseContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(HikariDataSource o, int flags) {
|
||||
return o.getJdbcUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toVariableNameString(HikariDataSource o) {
|
||||
return o.getJdbcUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVariableNamePattern() {
|
||||
return "jdbc:.+";
|
||||
}
|
||||
})
|
||||
.serializer(new Serializer<>() {
|
||||
@Override
|
||||
public Fields serialize(HikariDataSource o) {
|
||||
Fields fields = new Fields();
|
||||
fields.putObject("jdbcurl", o.getJdbcUrl());
|
||||
return fields;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(HikariDataSource o, Fields f) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected HikariDataSource deserialize(Fields fields) throws StreamCorruptedException {
|
||||
HikariDataSource ds = new HikariDataSource();
|
||||
ds.setJdbcUrl((String) fields.getObject("jdbcurl"));
|
||||
return ds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mustSyncDeserialization() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canBeInstantiated() {
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
package com.btk5h.skriptdb.skript;
|
||||
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
|
||||
import java.io.NotSerializableException;
|
||||
import java.io.StreamCorruptedException;
|
||||
|
||||
import ch.njol.skript.classes.ClassInfo;
|
||||
import ch.njol.skript.classes.Parser;
|
||||
import ch.njol.skript.classes.Serializer;
|
||||
import ch.njol.skript.lang.ParseContext;
|
||||
import ch.njol.skript.registrations.Classes;
|
||||
import ch.njol.yggdrasil.Fields;
|
||||
|
||||
public class Types {
|
||||
static {
|
||||
Classes.registerClass(new ClassInfo<>(HikariDataSource.class, "datasource")
|
||||
.user("datasources?")
|
||||
.parser(new Parser<HikariDataSource>() {
|
||||
@Override
|
||||
public HikariDataSource parse(String s, ParseContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(HikariDataSource o, int flags) {
|
||||
return o.getJdbcUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toVariableNameString(HikariDataSource o) {
|
||||
return o.getJdbcUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVariableNamePattern() {
|
||||
return "jdbc:.+";
|
||||
}
|
||||
})
|
||||
.serializer(new Serializer<HikariDataSource>() {
|
||||
@Override
|
||||
public Fields serialize(HikariDataSource o) throws NotSerializableException {
|
||||
Fields fields = new Fields();
|
||||
fields.putObject("jdbcurl", o.getJdbcUrl());
|
||||
return fields;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(HikariDataSource o, Fields f) throws StreamCorruptedException,
|
||||
NotSerializableException {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected HikariDataSource deserialize(Fields fields) throws StreamCorruptedException,
|
||||
NotSerializableException {
|
||||
HikariDataSource ds = new HikariDataSource();
|
||||
ds.setJdbcUrl((String) fields.getObject("jdbcurl"));
|
||||
return ds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mustSyncDeserialization() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canBeInstantiated() {
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user