forked from Limework/skript-db
		
	Code cleanup, better skript 2.6.1 support, update mariadb driver, possible bugfix, add example to README
This commit is contained in:
		
							parent
							
								
									dbce1d33f9
								
							
						
					
					
						commit
						f92b16a09f
					
				
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							| @ -84,6 +84,18 @@ execute "select %unsafe {columns variable}% from %{table variable}%" in {sql} | |||||||
| execute unsafe {fully dynamic query} in {sql} | execute unsafe {fully dynamic query} in {sql} | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | #### FAQ: How to return sql data in a function? | ||||||
|  | You can't because functions don't allow delays, but you can use skript-reflect sections for this: | ||||||
|  | ``` | ||||||
|  | on load: | ||||||
|  | 	create new section stored in {-section::getPlayersFromDatabase}: | ||||||
|  | 		execute "SELECT uuid FROM table" in {-sql} and store the result in {_result::*} | ||||||
|  | 		return {_result::uuid::*} | ||||||
|  | command /showplayers [<text>]: | ||||||
|  | 	trigger: | ||||||
|  | 		run section {-section::getPlayersFromDatabase} async and store result in {_uuids::*} and wait | ||||||
|  | 		send "%{_uuids::*}%" | ||||||
|  | ``` | ||||||
| --- | --- | ||||||
| ### Configuration | ### Configuration | ||||||
| plugins/skript-db/config.yml | plugins/skript-db/config.yml | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								pom.xml
									
									
									
									
									
								
							| @ -6,7 +6,7 @@ | |||||||
| 
 | 
 | ||||||
|     <groupId>com.btk5h</groupId> |     <groupId>com.btk5h</groupId> | ||||||
|     <artifactId>skript-db</artifactId> |     <artifactId>skript-db</artifactId> | ||||||
|     <version>1.3.7</version> |     <version>1.3.8</version> | ||||||
|     <packaging>jar</packaging> |     <packaging>jar</packaging> | ||||||
| 
 | 
 | ||||||
|     <repositories> |     <repositories> | ||||||
| @ -93,14 +93,14 @@ | |||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>com.github.SkriptLang</groupId> |             <groupId>com.github.SkriptLang</groupId> | ||||||
|             <artifactId>Skript</artifactId> |             <artifactId>Skript</artifactId> | ||||||
|             <version>2.6-beta3</version> |             <version>2.6.1</version> | ||||||
|             <scope>provided</scope> |             <scope>provided</scope> | ||||||
|         </dependency> |         </dependency> | ||||||
|         <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --> |         <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --> | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>org.mariadb.jdbc</groupId> |             <groupId>org.mariadb.jdbc</groupId> | ||||||
|             <artifactId>mariadb-java-client</artifactId> |             <artifactId>mariadb-java-client</artifactId> | ||||||
|             <version>3.0.3</version> |             <version>3.0.9</version> | ||||||
|             <scope>compile</scope> |             <scope>compile</scope> | ||||||
|         </dependency> |         </dependency> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -83,25 +83,19 @@ public class EffExecuteStatement extends Effect { | |||||||
|         //if data source isn't set |         //if data source isn't set | ||||||
|         if (ds == null) return; |         if (ds == null) return; | ||||||
| 
 | 
 | ||||||
|         boolean sync = !Bukkit.isPrimaryThread(); |  | ||||||
| 
 |  | ||||||
|         //if current thread is not main thread, then make this query to not have delays |         //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 | ||||||
| 
 |  | ||||||
|         CompletableFuture<Object> sql = null; |  | ||||||
|         Object resources = null; |  | ||||||
|         if (!sync) { |         if (!sync) { | ||||||
|             sql = CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool); |             CompletableFuture<Object> sql = CompletableFuture.supplyAsync(() -> executeStatement(ds, baseVariable, query), threadPool); | ||||||
|         } else { |  | ||||||
|             resources = executeStatement(ds, baseVariable, query); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         //when SQL statement is completed |  | ||||||
|         boolean finalSync = sync; |  | ||||||
|         if (sql != null) { |  | ||||||
|             sql.whenComplete((res, err) -> { |             sql.whenComplete((res, err) -> { | ||||||
|                 if (err != null) { |                 if (err != null) { | ||||||
|                     err.printStackTrace(); |                     err.printStackTrace(); | ||||||
| @ -115,16 +109,6 @@ public class EffExecuteStatement extends Effect { | |||||||
|                     //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 (isSync || finalSync) { |  | ||||||
|                         if (locals != null) { |  | ||||||
|                             Variables.setLocalVariables(e, locals); |  | ||||||
|                         } |  | ||||||
|                         if (!(res instanceof String)) { |  | ||||||
|                             ((Map<String, Object>) res).forEach((name, value) -> setVariable(e, name, value)); |  | ||||||
|                         } |  | ||||||
|                         TriggerItem.walk(getNext(), e); |  | ||||||
|                         Variables.removeLocals(e); |  | ||||||
|                     } else { |  | ||||||
|                     Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> { |                     Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> { | ||||||
|                         if (locals != null) { |                         if (locals != null) { | ||||||
|                             Variables.setLocalVariables(e, locals); |                             Variables.setLocalVariables(e, locals); | ||||||
| @ -134,15 +118,13 @@ public class EffExecuteStatement extends Effect { | |||||||
|                         } |                         } | ||||||
|                         TriggerItem.walk(getNext(), e); |                         TriggerItem.walk(getNext(), e); | ||||||
|                         //the line below is required to prevent memory leaks |                         //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); |                         Variables.removeLocals(e); | ||||||
|                     }); |                     }); | ||||||
|                 } |                 } | ||||||
|                 } |  | ||||||
|             }); |             }); | ||||||
|         // sync executed SQL query, same as above, just sync |         // sync executed SQL query, same as above, just sync | ||||||
|         } else { |         } else { | ||||||
|  |             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) { | ||||||
| @ -167,7 +149,6 @@ public class EffExecuteStatement extends Effect { | |||||||
|     @Override |     @Override | ||||||
|     protected TriggerItem walk(Event e) { |     protected TriggerItem walk(Event e) { | ||||||
|         debug(e, true); |         debug(e, true); | ||||||
|         //I think no longer needed as of 1.3.0, uncomment if something breaks |  | ||||||
|         if (!isSync) { |         if (!isSync) { | ||||||
|             Delay.addDelayedEvent(e); |             Delay.addDelayedEvent(e); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -30,10 +30,6 @@ public class Types { | |||||||
|                         return o.getJdbcUrl(); |                         return o.getJdbcUrl(); | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     @Override |  | ||||||
|                     public String getVariableNamePattern() { |  | ||||||
|                         return "jdbc:.+"; |  | ||||||
|                     } |  | ||||||
|                 }) |                 }) | ||||||
|                 .serializer(new Serializer<HikariDataSource>() { |                 .serializer(new Serializer<HikariDataSource>() { | ||||||
|                     @Override |                     @Override | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user