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,21 +112,31 @@ 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) { |             if (locals != null && getNext() != null) { | ||||||
|                 Variables.setLocalVariables(e, locals); |                 Variables.setLocalVariables(e, locals); | ||||||
|             } |             } | ||||||
|             if (!(resources instanceof String)) { |             if (!(resources instanceof String)) { | ||||||
| @ -144,12 +146,11 @@ public class EffExecuteStatement extends Effect { | |||||||
|             Variables.removeLocals(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