forked from Limework/skript-db
finish experimental (disabled) on complete of sql query event
This commit is contained in:
parent
2eda1418cf
commit
d8cb6fedb5
@ -36,10 +36,10 @@ Executes a statement on a database and optionally stores the result in a variabl
|
|||||||
If a list variable, such as `{test::*}`, is passed, the query result will be mapped to the list
|
If a list variable, such as `{test::*}`, is passed, the query result will be mapped to the list
|
||||||
variable in the form `{test::<column name>::<row number>}`
|
variable in the form `{test::<column name>::<row number>}`
|
||||||
|
|
||||||
If `synchronously` is specified, the SQL query will be done on the current thread.
|
If `quickly` is specified, the SQL query will be done without jumping back to main thread, which speeds it up by 50ms, however that makes code after it to also be on separate thread, you can jump back to main thread by adding `wait a tick`
|
||||||
#### Syntax
|
#### Syntax
|
||||||
```
|
```
|
||||||
[synchronously] execute %string% (in|on) %datasource% [and store [[the] (output|result)[s]] (to|in) [the] [var[iable]] %-objects%]
|
[quickly] execute %string% (in|on) %datasource% [and store [[the] (output|result)[s]] (to|in) [the] [var[iable]] %-objects%]
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
@ -77,4 +77,3 @@ execute unsafe {fully dynamic query} in {sql}
|
|||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import org.bukkit.event.HandlerList;
|
|||||||
public class SQLQueryCompleteEvent extends Event {
|
public class SQLQueryCompleteEvent extends Event {
|
||||||
private final static HandlerList HANDLERS = new HandlerList();
|
private final static HandlerList HANDLERS = new HandlerList();
|
||||||
private String argument;
|
private String argument;
|
||||||
private Object variables;
|
|
||||||
|
|
||||||
public SQLQueryCompleteEvent(String argument) {
|
public SQLQueryCompleteEvent(String argument) {
|
||||||
super(true);
|
super(true);
|
||||||
@ -26,7 +25,7 @@ public class SQLQueryCompleteEvent extends Event {
|
|||||||
return HANDLERS;
|
return HANDLERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getArgument() {
|
public String getQuery() {
|
||||||
return argument;
|
return argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ public class EffExecuteStatement extends Effect {
|
|||||||
static {
|
static {
|
||||||
Skript.registerEffect(EffExecuteStatement.class,
|
Skript.registerEffect(EffExecuteStatement.class,
|
||||||
"execute %string% (in|on) %datasource% " +
|
"execute %string% (in|on) %datasource% " +
|
||||||
"[and store [[the] (output|result)[s]] (to|in) [the] [var[iable]] %-objects%]", "synchronously execute %string% (in|on) %datasource% " +
|
"[and store [[the] (output|result)[s]] (to|in) [the] [var[iable]] %-objects%]", "quickly execute %string% (in|on) %datasource% " +
|
||||||
"[and store [[the] (output|result)[s]] (to|in) [the] [var[iable]] %-objects%]");
|
"[and store [[the] (output|result)[s]] (to|in) [the] [var[iable]] %-objects%]");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,11 +78,13 @@ public class EffExecuteStatement extends Effect {
|
|||||||
DataSource ds = dataSource.getSingle(e);
|
DataSource ds = dataSource.getSingle(e);
|
||||||
Pair<String, List<Object>> query = parseQuery(e);
|
Pair<String, List<Object>> query = parseQuery(e);
|
||||||
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;
|
||||||
|
|
||||||
boolean sync = false;
|
boolean sync = false;
|
||||||
|
|
||||||
|
//if current thread is not main thread, then make this query to not have delays
|
||||||
|
|
||||||
if (!Bukkit.isPrimaryThread()) {
|
if (!Bukkit.isPrimaryThread()) {
|
||||||
sync = true;
|
sync = true;
|
||||||
}
|
}
|
||||||
@ -113,9 +115,12 @@ public class EffExecuteStatement extends Effect {
|
|||||||
|
|
||||||
//also set variables in the sql query complete event
|
//also set variables in the sql query complete event
|
||||||
|
|
||||||
SQLQueryCompleteEvent event = new SQLQueryCompleteEvent("something");
|
//TEMPORARILY DISABLED, AS THIS WOULD WORSEN PERFORMANCE OF THE QUERIES AND NOT BE USED BY MOST PEOPLE.
|
||||||
((Map<String, Object>) res).forEach((name, value) -> setVariable(event, name, value));
|
//I may add config option to enable this later?
|
||||||
SkriptDB.getPlugin(SkriptDB.class).getServer().getPluginManager().callEvent(event);
|
|
||||||
|
//SQLQueryCompleteEvent event = new SQLQueryCompleteEvent(this.query.getSingle(e));
|
||||||
|
//((Map<String, Object>) res).forEach((name, value) -> setVariable(event, name, value));
|
||||||
|
//SkriptDB.getPlugin(SkriptDB.class).getServer().getPluginManager().callEvent(event);
|
||||||
}
|
}
|
||||||
if (isSync || finalSync) {
|
if (isSync || finalSync) {
|
||||||
|
|
||||||
|
60
src/main/java/com/btk5h/skriptdb/skript/ExprSQLQuery.java
Normal file
60
src/main/java/com/btk5h/skriptdb/skript/ExprSQLQuery.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package com.btk5h.skriptdb.skript;
|
||||||
|
|
||||||
|
import ch.njol.skript.ScriptLoader;
|
||||||
|
import ch.njol.skript.Skript;
|
||||||
|
import ch.njol.skript.lang.Expression;
|
||||||
|
import ch.njol.skript.lang.ExpressionType;
|
||||||
|
import ch.njol.skript.lang.SkriptParser;
|
||||||
|
import ch.njol.skript.lang.util.SimpleExpression;
|
||||||
|
import ch.njol.skript.log.ErrorQuality;
|
||||||
|
import ch.njol.util.Kleenean;
|
||||||
|
import com.btk5h.skriptdb.events.SQLQueryCompleteEvent;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores the error from the last executed statement, if there was one.
|
||||||
|
*
|
||||||
|
* @name Last Data Source Error
|
||||||
|
* @pattern [the] [last] (sql|db|data(base|[ ]source)) error
|
||||||
|
* @return text
|
||||||
|
* @since 0.1.0
|
||||||
|
*/
|
||||||
|
public class ExprSQLQuery extends SimpleExpression<String> {
|
||||||
|
static {
|
||||||
|
Skript.registerExpression(ExprSQLQuery.class, String.class,
|
||||||
|
ExpressionType.SIMPLE, "sql query");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String[] get(Event e) {
|
||||||
|
if (e instanceof SQLQueryCompleteEvent){
|
||||||
|
return new String[]{((SQLQueryCompleteEvent) e).getQuery()};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSingle() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends String> getReturnType() {
|
||||||
|
return String.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(Event e, boolean debug) {
|
||||||
|
return "sql query";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean init(final Expression<?>[] expressions, final int matchedPattern, final Kleenean isDelayed, final SkriptParser.ParseResult parseResult) {
|
||||||
|
if (!ScriptLoader.isCurrentEvent(SQLQueryCompleteEvent.class)) {
|
||||||
|
Skript.error("Cannot use 'sql query' outside of a complete of sql query event", ErrorQuality.SEMANTIC_ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user