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,7 +109,7 @@ 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) {
 | 
					                    Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> {
 | 
				
			||||||
                        if (locals != null) {
 | 
					                        if (locals != null) {
 | 
				
			||||||
                            Variables.setLocalVariables(e, locals);
 | 
					                            Variables.setLocalVariables(e, locals);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
@ -123,26 +117,14 @@ public class EffExecuteStatement extends Effect {
 | 
				
			|||||||
                            ((Map<String, Object>) res).forEach((name, value) -> setVariable(e, name, value));
 | 
					                            ((Map<String, Object>) res).forEach((name, value) -> setVariable(e, name, value));
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        TriggerItem.walk(getNext(), e);
 | 
					                        TriggerItem.walk(getNext(), e);
 | 
				
			||||||
 | 
					                        //the line below is required to prevent memory leaks
 | 
				
			||||||
                        Variables.removeLocals(e);
 | 
					                        Variables.removeLocals(e);
 | 
				
			||||||
                    } else {
 | 
					                    });
 | 
				
			||||||
                        Bukkit.getScheduler().runTask(SkriptDB.getInstance(), () -> {
 | 
					 | 
				
			||||||
                            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);
 | 
					 | 
				
			||||||
                            //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);
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        // 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