Update to Java 16 + replace javatuples usage with records
This commit is contained in:
		| @@ -13,7 +13,7 @@ | |||||||
| 			<attribute name="test" value="true"/> | 			<attribute name="test" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
| 	</classpathentry> | 	</classpathentry> | ||||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> | 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16"> | ||||||
| 		<attributes> | 		<attributes> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| eclipse.preferences.version=1 | eclipse.preferences.version=1 | ||||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=16 | ||||||
| org.eclipse.jdt.core.compiler.compliance=11 | org.eclipse.jdt.core.compiler.compliance=16 | ||||||
| org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | ||||||
| org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | ||||||
| org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | ||||||
| org.eclipse.jdt.core.compiler.release=disabled | org.eclipse.jdt.core.compiler.release=disabled | ||||||
| org.eclipse.jdt.core.compiler.source=11 | org.eclipse.jdt.core.compiler.source=16 | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ | |||||||
| 			<attribute name="test" value="true"/> | 			<attribute name="test" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
| 	</classpathentry> | 	</classpathentry> | ||||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> | 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16"> | ||||||
| 		<attributes> | 		<attributes> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| eclipse.preferences.version=1 | eclipse.preferences.version=1 | ||||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=16 | ||||||
| org.eclipse.jdt.core.compiler.compliance=11 | org.eclipse.jdt.core.compiler.compliance=16 | ||||||
| org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | ||||||
| org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | ||||||
| org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | ||||||
| org.eclipse.jdt.core.compiler.release=disabled | org.eclipse.jdt.core.compiler.release=disabled | ||||||
| org.eclipse.jdt.core.compiler.source=11 | org.eclipse.jdt.core.compiler.source=16 | ||||||
|   | |||||||
| @@ -27,16 +27,16 @@ | |||||||
|             <version>${bungeecord.version}</version> |             <version>${bungeecord.version}</version> | ||||||
|             <scope>compile</scope> |             <scope>compile</scope> | ||||||
|         </dependency> |         </dependency> | ||||||
|         <dependency> |         <!-- <dependency> | ||||||
|             <groupId>org.javatuples</groupId> |             <groupId>org.javatuples</groupId> | ||||||
|             <artifactId>javatuples</artifactId> |             <artifactId>javatuples</artifactId> | ||||||
|             <version>1.2</version> |             <version>1.2</version> | ||||||
|             <scope>compile</scope> |             <scope>compile</scope> | ||||||
|         </dependency> |         </dependency> --> | ||||||
|         <dependency> |         <dependency> | ||||||
| 		    <groupId>io.github.classgraph</groupId> | 		    <groupId>io.github.classgraph</groupId> | ||||||
| 		    <artifactId>classgraph</artifactId> | 		    <artifactId>classgraph</artifactId> | ||||||
| 		    <version>4.8.90</version> | 		    <version>4.8.108</version> | ||||||
|             <scope>compile</scope> |             <scope>compile</scope> | ||||||
| 		</dependency> | 		</dependency> | ||||||
|     </dependencies> |     </dependencies> | ||||||
|   | |||||||
| @@ -5,8 +5,6 @@ import java.util.ArrayList; | |||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.regex.Pattern; | import java.util.regex.Pattern; | ||||||
|  |  | ||||||
| import org.javatuples.Pair; |  | ||||||
|  |  | ||||||
| import net.md_5.bungee.api.ChatColor; | import net.md_5.bungee.api.ChatColor; | ||||||
|  |  | ||||||
| public class ChatColorUtil { | public class ChatColorUtil { | ||||||
| @@ -257,10 +255,12 @@ public class ChatColorUtil { | |||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
| 	public static class ChatValueGradient { | 	public static class ChatValueGradient { | ||||||
| 		List<Pair<Float, ChatColor>> colors = new ArrayList<>(); | 		private record GradientValueColor(float value, ChatColor color) { } | ||||||
|  | 		 | ||||||
|  | 		List<GradientValueColor> colors = new ArrayList<>(); | ||||||
| 		 | 		 | ||||||
| 		public synchronized ChatValueGradient add(float v, ChatColor col) { | 		public synchronized ChatValueGradient add(float v, ChatColor col) { | ||||||
| 			colors.add(Pair.with(v, col)); | 			colors.add(new GradientValueColor(v, col)); | ||||||
| 			return this; | 			return this; | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| @@ -268,23 +268,23 @@ public class ChatColorUtil { | |||||||
| 			if (colors.isEmpty()) | 			if (colors.isEmpty()) | ||||||
| 				throw new IllegalStateException("Must define at least one color in this ChatValueGradient instance."); | 				throw new IllegalStateException("Must define at least one color in this ChatValueGradient instance."); | ||||||
| 			if (colors.size() == 1) | 			if (colors.size() == 1) | ||||||
| 				return colors.get(0).getValue1(); | 				return colors.get(0).color(); | ||||||
| 			 | 			 | ||||||
| 			colors.sort((p1, p2) -> Float.compare(p1.getValue0(), p2.getValue0())); | 			colors.sort((p1, p2) -> Float.compare(p1.value(), p2.value())); | ||||||
| 			 | 			 | ||||||
| 			if (v <= colors.get(0).getValue0()) | 			if (v <= colors.get(0).value()) | ||||||
| 				return colors.get(0).getValue1(); | 				return colors.get(0).color(); | ||||||
| 			if (v >= colors.get(colors.size() - 1).getValue0()) | 			if (v >= colors.get(colors.size() - 1).value()) | ||||||
| 				return colors.get(colors.size() - 1).getValue1(); | 				return colors.get(colors.size() - 1).color(); | ||||||
| 			 | 			 | ||||||
| 			int p1 = 1; | 			int p1 = 1; | ||||||
| 			for (; p1 < colors.size(); p1++) { | 			for (; p1 < colors.size(); p1++) { | ||||||
| 				if (colors.get(p1).getValue0() >= v) | 				if (colors.get(p1).value() >= v) | ||||||
| 					break; | 					break; | ||||||
| 			} | 			} | ||||||
| 			int p0 = p1 - 1; | 			int p0 = p1 - 1; | ||||||
| 			float v0 = colors.get(p0).getValue0(), v1 = colors.get(p1).getValue0(); | 			float v0 = colors.get(p0).value(), v1 = colors.get(p1).value(); | ||||||
| 			ChatColor cc0 = colors.get(p0).getValue1(), cc1 = colors.get(p1).getValue1(); | 			ChatColor cc0 = colors.get(p0).color(), cc1 = colors.get(p1).color(); | ||||||
| 			 | 			 | ||||||
| 			return interpolateColor(v0, v1, v, cc0, cc1); | 			return interpolateColor(v0, v1, v, cc0, cc1); | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -13,8 +13,6 @@ import java.util.Map; | |||||||
| import java.util.Objects; | import java.util.Objects; | ||||||
| import java.util.function.Consumer; | import java.util.function.Consumer; | ||||||
|  |  | ||||||
| import org.javatuples.Pair; |  | ||||||
|  |  | ||||||
| import fr.pandacube.lib.core.util.Log; | import fr.pandacube.lib.core.util.Log; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -70,12 +68,12 @@ public final class DB { | |||||||
| 		Collection<SQLField<E, ?>> tableFields = elem.getFields().values(); | 		Collection<SQLField<E, ?>> tableFields = elem.getFields().values(); | ||||||
| 		boolean first = true; | 		boolean first = true; | ||||||
| 		for (SQLField<E, ?> f : tableFields) { | 		for (SQLField<E, ?> f : tableFields) { | ||||||
| 			Pair<String, List<Object>> statementPart = f.forSQLPreparedStatement(); | 			ParameterizedSQLString statementPart = f.forSQLPreparedStatement(); | ||||||
| 			params.addAll(statementPart.getValue1()); | 			params.addAll(statementPart.parameters()); | ||||||
|  |  | ||||||
| 			if (!first) sql += ", "; | 			if (!first) sql += ", "; | ||||||
| 			first = false; | 			first = false; | ||||||
| 			sql += statementPart.getValue0(); | 			sql += statementPart.sqlString(); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		sql += ", PRIMARY KEY id(id))"; | 		sql += ", PRIMARY KEY id(id))"; | ||||||
| @@ -197,9 +195,9 @@ public final class DB { | |||||||
| 			List<Object> params = new ArrayList<>(); | 			List<Object> params = new ArrayList<>(); | ||||||
|  |  | ||||||
| 			if (where != null) { | 			if (where != null) { | ||||||
| 				Pair<String, List<Object>> ret = where.toSQL(); | 				ParameterizedSQLString ret = where.toSQL(); | ||||||
| 				sql += " WHERE " + ret.getValue0(); | 				sql += " WHERE " + ret.sqlString(); | ||||||
| 				params.addAll(ret.getValue1()); | 				params.addAll(ret.parameters()); | ||||||
| 			} | 			} | ||||||
| 			if (orderBy != null) sql += " ORDER BY " + orderBy.toSQL(); | 			if (orderBy != null) sql += " ORDER BY " + orderBy.toSQL(); | ||||||
| 			if (limit != null) sql += " LIMIT " + limit; | 			if (limit != null) sql += " LIMIT " + limit; | ||||||
| @@ -233,9 +231,9 @@ public final class DB { | |||||||
| 			List<Object> params = new ArrayList<>(); | 			List<Object> params = new ArrayList<>(); | ||||||
|  |  | ||||||
| 			if (where != null) { | 			if (where != null) { | ||||||
| 				Pair<String, List<Object>> ret = where.toSQL(); | 				ParameterizedSQLString ret = where.toSQL(); | ||||||
| 				sql += " WHERE " + ret.getValue0(); | 				sql += " WHERE " + ret.sqlString(); | ||||||
| 				params.addAll(ret.getValue1()); | 				params.addAll(ret.parameters()); | ||||||
| 			} | 			} | ||||||
| 			sql += ";"; | 			sql += ";"; | ||||||
| 			 | 			 | ||||||
| @@ -302,12 +300,12 @@ public final class DB { | |||||||
| 			return truncateTable(elemClass); | 			return truncateTable(elemClass); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		Pair<String, List<Object>> whereData = where.toSQL(); | 		ParameterizedSQLString whereData = where.toSQL(); | ||||||
| 		 | 		 | ||||||
| 		String sql = "DELETE FROM " + getTableName(elemClass) | 		String sql = "DELETE FROM " + getTableName(elemClass) | ||||||
| 				+ " WHERE " + whereData.getValue0() | 				+ " WHERE " + whereData.sqlString() | ||||||
| 				+ ";"; | 				+ ";"; | ||||||
| 		List<Object> params = new ArrayList<>(whereData.getValue1()); | 		List<Object> params = new ArrayList<>(whereData.parameters()); | ||||||
| 		 | 		 | ||||||
| 		return customUpdateStatement(sql, params); | 		return customUpdateStatement(sql, params); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,7 @@ | |||||||
|  | package fr.pandacube.lib.core.db; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public record ParameterizedSQLString(String sqlString, List<Object> parameters) { | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -4,13 +4,11 @@ import java.util.ArrayList; | |||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| import org.javatuples.Pair; |  | ||||||
|  |  | ||||||
| import fr.pandacube.lib.core.db.SQLWhere.SQLWhereComp; | import fr.pandacube.lib.core.db.SQLWhere.SQLWhereComp; | ||||||
|  | import fr.pandacube.lib.core.db.SQLWhere.SQLWhereComp.SQLComparator; | ||||||
| import fr.pandacube.lib.core.db.SQLWhere.SQLWhereIn; | import fr.pandacube.lib.core.db.SQLWhere.SQLWhereIn; | ||||||
| import fr.pandacube.lib.core.db.SQLWhere.SQLWhereLike; | import fr.pandacube.lib.core.db.SQLWhere.SQLWhereLike; | ||||||
| import fr.pandacube.lib.core.db.SQLWhere.SQLWhereNull; | import fr.pandacube.lib.core.db.SQLWhere.SQLWhereNull; | ||||||
| import fr.pandacube.lib.core.db.SQLWhere.SQLWhereComp.SQLComparator; |  | ||||||
|  |  | ||||||
| public class SQLField<E extends SQLElement<E>, T> { | public class SQLField<E extends SQLElement<E>, T> { | ||||||
|  |  | ||||||
| @@ -40,10 +38,10 @@ public class SQLField<E extends SQLElement<E>, T> { | |||||||
| 		this(t, nul, false, deflt); | 		this(t, nul, false, deflt); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* package */ Pair<String, List<Object>> forSQLPreparedStatement() { | 	/* package */ ParameterizedSQLString forSQLPreparedStatement() { | ||||||
| 		List<Object> params = new ArrayList<>(1); | 		List<Object> params = new ArrayList<>(1); | ||||||
| 		if (defaultValue != null && !autoIncrement) params.add(defaultValue); | 		if (defaultValue != null && !autoIncrement) params.add(defaultValue); | ||||||
| 		return new Pair<>("`" + getName() + "` " + type.toString() + (canBeNull ? " NULL" : " NOT NULL") | 		return new ParameterizedSQLString("`" + getName() + "` " + type.toString() + (canBeNull ? " NULL" : " NOT NULL") | ||||||
| 				+ (autoIncrement ? " AUTO_INCREMENT" : "") | 				+ (autoIncrement ? " AUTO_INCREMENT" : "") | ||||||
| 				+ ((defaultValue == null || autoIncrement) ? "" : " DEFAULT ?"), params); | 				+ ((defaultValue == null || autoIncrement) ? "" : " DEFAULT ?"), params); | ||||||
| 	} | 	} | ||||||
| @@ -72,7 +70,7 @@ public class SQLField<E extends SQLElement<E>, T> { | |||||||
| 	 */ | 	 */ | ||||||
| 	@Override | 	@Override | ||||||
| 	public String toString() { | 	public String toString() { | ||||||
| 		return forSQLPreparedStatement().getValue0().replaceFirst("\\?", | 		return forSQLPreparedStatement().sqlString().replaceFirst("\\?", | ||||||
| 				(defaultValue != null && !autoIncrement) ? defaultValue.toString() : ""); | 				(defaultValue != null && !autoIncrement) ? defaultValue.toString() : ""); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,8 +5,6 @@ import java.util.HashMap; | |||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
|  |  | ||||||
| import org.javatuples.Pair; |  | ||||||
|  |  | ||||||
| import fr.pandacube.lib.core.util.Log; | import fr.pandacube.lib.core.util.Log; | ||||||
|  |  | ||||||
| public class SQLUpdate<E extends SQLElement<E>> { | public class SQLUpdate<E extends SQLElement<E>> { | ||||||
| @@ -57,9 +55,9 @@ public class SQLUpdate<E extends SQLElement<E>> { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (where != null) { | 		if (where != null) { | ||||||
| 			Pair<String, List<Object>> ret = where.toSQL(); | 			ParameterizedSQLString ret = where.toSQL(); | ||||||
| 			sql += " WHERE " + ret.getValue0(); | 			sql += " WHERE " + ret.sqlString(); | ||||||
| 			params.addAll(ret.getValue1()); | 			params.addAll(ret.parameters()); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		sql += ";"; | 		sql += ";"; | ||||||
|   | |||||||
| @@ -5,18 +5,16 @@ import java.util.Collection; | |||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.logging.Level; | import java.util.logging.Level; | ||||||
|  |  | ||||||
| import org.javatuples.Pair; |  | ||||||
|  |  | ||||||
| import fr.pandacube.lib.core.util.Log; | import fr.pandacube.lib.core.util.Log; | ||||||
|  |  | ||||||
| public abstract class SQLWhere<E extends SQLElement<E>> { | public abstract class SQLWhere<E extends SQLElement<E>> { | ||||||
|  |  | ||||||
| 	public abstract Pair<String, List<Object>> toSQL() throws DBException; | 	public abstract ParameterizedSQLString toSQL() throws DBException; | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public String toString() { | 	public String toString() { | ||||||
| 		try { | 		try { | ||||||
| 			return toSQL().getValue0(); | 			return toSQL().sqlString(); | ||||||
| 		} catch (DBException e) { | 		} catch (DBException e) { | ||||||
| 			Log.warning(e); | 			Log.warning(e); | ||||||
| 			return "[SQLWhere.toString() error (see logs)]"; | 			return "[SQLWhere.toString() error (see logs)]"; | ||||||
| @@ -66,7 +64,7 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		@Override | 		@Override | ||||||
| 		public Pair<String, List<Object>> toSQL() throws DBException { | 		public ParameterizedSQLString toSQL() throws DBException { | ||||||
| 			if (conditions.isEmpty()) { | 			if (conditions.isEmpty()) { | ||||||
| 				throw new DBException("SQLWhereChain needs at least one element inside !"); | 				throw new DBException("SQLWhereChain needs at least one element inside !"); | ||||||
| 			} | 			} | ||||||
| @@ -79,12 +77,12 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 				if (!first) sql += " " + operator.sql + " "; | 				if (!first) sql += " " + operator.sql + " "; | ||||||
| 				first = false; | 				first = false; | ||||||
|  |  | ||||||
| 				Pair<String, List<Object>> ret = w.toSQL(); | 				ParameterizedSQLString ret = w.toSQL(); | ||||||
| 				sql += "(" + ret.getValue0() + ")"; | 				sql += "(" + ret.sqlString() + ")"; | ||||||
| 				params.addAll(ret.getValue1()); | 				params.addAll(ret.parameters()); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			return new Pair<>(sql, params); | 			return new ParameterizedSQLString(sql, params); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		protected enum SQLBoolOp { | 		protected enum SQLBoolOp { | ||||||
| @@ -169,10 +167,10 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		@Override | 		@Override | ||||||
| 		public Pair<String, List<Object>> toSQL() throws DBException { | 		public ParameterizedSQLString toSQL() throws DBException { | ||||||
| 			List<Object> params = new ArrayList<>(); | 			List<Object> params = new ArrayList<>(); | ||||||
| 			SQLElement.addValueToSQLObjectList(params, left, right); | 			SQLElement.addValueToSQLObjectList(params, left, right); | ||||||
| 			return new Pair<>("`" + left.getName() + "` " + comp.sql + " ? ", params); | 			return new ParameterizedSQLString("`" + left.getName() + "` " + comp.sql + " ? ", params); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		/* package */ enum SQLComparator { | 		/* package */ enum SQLComparator { | ||||||
| @@ -217,11 +215,11 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		@Override | 		@Override | ||||||
| 		public Pair<String, List<Object>> toSQL() throws DBException { | 		public ParameterizedSQLString toSQL() throws DBException { | ||||||
| 			List<Object> params = new ArrayList<>(); | 			List<Object> params = new ArrayList<>(); | ||||||
| 			 | 			 | ||||||
| 			if (values.isEmpty()) | 			if (values.isEmpty()) | ||||||
| 				return new Pair<>(" 1=0 ", params); | 				return new ParameterizedSQLString(" 1=0 ", params); | ||||||
| 			 | 			 | ||||||
| 			for (Object v : values) | 			for (Object v : values) | ||||||
| 				SQLElement.addValueToSQLObjectList(params, field, v); | 				SQLElement.addValueToSQLObjectList(params, field, v); | ||||||
| @@ -230,7 +228,7 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 			for (int i = 0; i < questions.length; i++) | 			for (int i = 0; i < questions.length; i++) | ||||||
| 				questions[i] = i % 2 == 0 ? '?' : ','; | 				questions[i] = i % 2 == 0 ? '?' : ','; | ||||||
| 			 | 			 | ||||||
| 			return new Pair<>("`" + field.getName() + "` IN (" + new String(questions) + ") ", params); | 			return new ParameterizedSQLString("`" + field.getName() + "` IN (" + new String(questions) + ") ", params); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
| @@ -261,10 +259,10 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		@Override | 		@Override | ||||||
| 		public Pair<String, List<Object>> toSQL() { | 		public ParameterizedSQLString toSQL() { | ||||||
| 			ArrayList<Object> params = new ArrayList<>(); | 			ArrayList<Object> params = new ArrayList<>(); | ||||||
| 			params.add(likeExpr); | 			params.add(likeExpr); | ||||||
| 			return new Pair<>("`" + field.getName() + "` LIKE ? ", params); | 			return new ParameterizedSQLString("`" + field.getName() + "` LIKE ? ", params); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
| @@ -297,8 +295,8 @@ public abstract class SQLWhere<E extends SQLElement<E>> { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		@Override | 		@Override | ||||||
| 		public Pair<String, List<Object>> toSQL() { | 		public ParameterizedSQLString toSQL() { | ||||||
| 			return new Pair<>("`" + fild.getName() + "` IS " + ((nulll) ? "NULL" : "NOT NULL"), new ArrayList<>()); | 			return new ParameterizedSQLString("`" + fild.getName() + "` IS " + ((nulll) ? "NULL" : "NOT NULL"), new ArrayList<>()); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -11,8 +11,6 @@ import java.util.concurrent.TimeUnit; | |||||||
| import java.util.function.ToIntBiFunction; | import java.util.function.ToIntBiFunction; | ||||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||||
|  |  | ||||||
| import org.javatuples.Pair; |  | ||||||
|  |  | ||||||
| import com.google.common.cache.Cache; | import com.google.common.cache.Cache; | ||||||
| import com.google.common.cache.CacheBuilder; | import com.google.common.cache.CacheBuilder; | ||||||
| import com.google.common.cache.CacheLoader; | import com.google.common.cache.CacheLoader; | ||||||
| @@ -39,15 +37,16 @@ public class PlayerFinder { | |||||||
| 			.maximumSize(1000) | 			.maximumSize(1000) | ||||||
| 			.build(); | 			.build(); | ||||||
| 	 | 	 | ||||||
| 	private static Cache<Pair<String, Boolean>, UUID> playerId = CacheBuilder.newBuilder() | 	record PlayerIdCacheKey(String pName, boolean old) { } | ||||||
|  | 	private static Cache<PlayerIdCacheKey, UUID> playerId = CacheBuilder.newBuilder() | ||||||
| 			.expireAfterWrite(2, TimeUnit.MINUTES) | 			.expireAfterWrite(2, TimeUnit.MINUTES) | ||||||
| 			.maximumSize(1000) | 			.maximumSize(1000) | ||||||
| 			.build(); | 			.build(); | ||||||
| 	 | 	 | ||||||
| 	public static void clearCacheEntry(UUID pId, String pName) { | 	public static void clearCacheEntry(UUID pId, String pName) { | ||||||
| 		playerLastKnownName.invalidate(pId); | 		playerLastKnownName.invalidate(pId); | ||||||
| 		playerId.invalidate(Pair.with(pName.toLowerCase(), true)); | 		playerId.invalidate(new PlayerIdCacheKey(pName.toLowerCase(), true)); | ||||||
| 		playerId.invalidate(Pair.with(pName.toLowerCase(), false)); | 		playerId.invalidate(new PlayerIdCacheKey(pName.toLowerCase(), false)); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static String getLastKnownName(UUID id) { | 	public static String getLastKnownName(UUID id) { | ||||||
| @@ -88,7 +87,7 @@ public class PlayerFinder { | |||||||
| 			return null; // évite une recherche inutile dans la base de donnée | 			return null; // évite une recherche inutile dans la base de donnée | ||||||
|  |  | ||||||
| 		try { | 		try { | ||||||
| 			return playerId.get(Pair.with(exactName.toLowerCase(), old), () -> { | 			return playerId.get(new PlayerIdCacheKey(exactName.toLowerCase(), old), () -> { | ||||||
| 				try { | 				try { | ||||||
| 					SQLPlayer el = DB.getFirst(SQLPlayer.class, | 					SQLPlayer el = DB.getFirst(SQLPlayer.class, | ||||||
| 							SQLPlayer.playerName.like(exactName.replace("_", "\\_")), | 							SQLPlayer.playerName.like(exactName.replace("_", "\\_")), | ||||||
| @@ -204,14 +203,15 @@ public class PlayerFinder { | |||||||
| 		return DIFF_CHAR_DISTANCE; | 		return DIFF_CHAR_DISTANCE; | ||||||
| 	}; | 	}; | ||||||
| 	 | 	 | ||||||
| 	private static LoadingCache<String, List<Pair<String, UUID>>> namesCache = CacheBuilder.newBuilder() | 	record NamesCacheResult(String name, UUID id) { } | ||||||
|  | 	private static LoadingCache<String, List<NamesCacheResult>> namesCache = CacheBuilder.newBuilder() | ||||||
| 			.expireAfterWrite(2, TimeUnit.MINUTES) | 			.expireAfterWrite(2, TimeUnit.MINUTES) | ||||||
| 			.maximumSize(1) | 			.maximumSize(1) | ||||||
| 			.build(CacheLoader.from((String k) -> { | 			.build(CacheLoader.from((String k) -> { | ||||||
| 				List<Pair<String, UUID>> cached = new ArrayList<>(); | 				List<NamesCacheResult> cached = new ArrayList<>(); | ||||||
| 				try { | 				try { | ||||||
| 					DB.forEach(SQLPlayerNameHistory.class, el -> { | 					DB.forEach(SQLPlayerNameHistory.class, el -> { | ||||||
| 						cached.add(Pair.with(el.get(SQLPlayerNameHistory.playerName), el.get(SQLPlayerNameHistory.playerId))); | 						cached.add(new NamesCacheResult(el.get(SQLPlayerNameHistory.playerName), el.get(SQLPlayerNameHistory.playerId))); | ||||||
| 					}); | 					}); | ||||||
| 				} catch (DBException e) { | 				} catch (DBException e) { | ||||||
| 					throw new RuntimeException(e); | 					throw new RuntimeException(e); | ||||||
| @@ -226,12 +226,12 @@ public class PlayerFinder { | |||||||
| 				List<FoundName> foundNames = new ArrayList<>(); | 				List<FoundName> foundNames = new ArrayList<>(); | ||||||
| 				try { | 				try { | ||||||
| 					namesCache.get("").forEach(el -> { | 					namesCache.get("").forEach(el -> { | ||||||
| 						String name = el.getValue0(); | 						String name = el.name(); | ||||||
| 						int dist = new LevenshteinDistance(name.toLowerCase(), query, SURPLUS_CHAR_DISTANCE, MISSING_CHAR_DISTANCE, CHAR_DISTANCE).getCurrentDistance(); | 						int dist = new LevenshteinDistance(name.toLowerCase(), query, SURPLUS_CHAR_DISTANCE, MISSING_CHAR_DISTANCE, CHAR_DISTANCE).getCurrentDistance(); | ||||||
| 						if (dist <= SEARCH_MAX_DISTANCE) { | 						if (dist <= SEARCH_MAX_DISTANCE) { | ||||||
| 							FoundName n = new FoundName(); | 							FoundName n = new FoundName(); | ||||||
| 							n.dist = dist; | 							n.dist = dist; | ||||||
| 							n.id = el.getValue1(); | 							n.id = el.id(); | ||||||
| 							n.name = name; | 							n.name = name; | ||||||
| 							foundNames.add(n); | 							foundNames.add(n); | ||||||
| 						} | 						} | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
| 	</classpathentry> | 	</classpathentry> | ||||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> | 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16"> | ||||||
| 		<attributes> | 		<attributes> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| eclipse.preferences.version=1 | eclipse.preferences.version=1 | ||||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=16 | ||||||
| org.eclipse.jdt.core.compiler.compliance=11 | org.eclipse.jdt.core.compiler.compliance=16 | ||||||
| org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled | ||||||
| org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | ||||||
| org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore | ||||||
| org.eclipse.jdt.core.compiler.release=disabled | org.eclipse.jdt.core.compiler.release=disabled | ||||||
| org.eclipse.jdt.core.compiler.source=11 | org.eclipse.jdt.core.compiler.source=16 | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -37,8 +37,8 @@ | |||||||
|  |  | ||||||
|     <properties> |     <properties> | ||||||
|         <build.number>unknown</build.number> |         <build.number>unknown</build.number> | ||||||
|         <maven.compiler.source>11</maven.compiler.source> |         <maven.compiler.source>16</maven.compiler.source> | ||||||
|         <maven.compiler.target>11</maven.compiler.target> |         <maven.compiler.target>16</maven.compiler.target> | ||||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||||
|          |          | ||||||
|         <bungeecord.version>1.16-R0.4-SNAPSHOT</bungeecord.version> |         <bungeecord.version>1.16-R0.4-SNAPSHOT</bungeecord.version> | ||||||
| @@ -54,9 +54,9 @@ | |||||||
|  |  | ||||||
|     <dependencies> |     <dependencies> | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>junit</groupId> | 		    <groupId>org.junit.jupiter</groupId> | ||||||
|             <artifactId>junit</artifactId> | 		    <artifactId>junit-jupiter-api</artifactId> | ||||||
|             <version>4.12</version> | 		    <version>5.7.2</version> | ||||||
| 		    <scope>test</scope> | 		    <scope>test</scope> | ||||||
| 		</dependency> | 		</dependency> | ||||||
|     </dependencies> |     </dependencies> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user