Compare commits
	
		
			12 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 48c32a3744 | |||
| fc521d2287 | |||
| 15125e2d6d | |||
| 6f1dd991c5 | |||
| 009831f5db | |||
| 1bcdb1df8c | |||
| 7ae948bb79 | |||
| 29402fc27e | |||
| eca28292d5 | |||
| aef4cdabc3 | |||
| 04114aa0cf | |||
| 575102fbfa | 
							
								
								
									
										11
									
								
								.classpath
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								.classpath
									
									
									
									
									
								
							| @@ -30,5 +30,16 @@ | |||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
| 	</classpathentry> | 	</classpathentry> | ||||||
|  | 	<classpathentry kind="src" path="target/generated-sources/annotations"> | ||||||
|  | 		<attributes> | ||||||
|  | 			<attribute name="optional" value="true"/> | ||||||
|  | 		</attributes> | ||||||
|  | 	</classpathentry> | ||||||
|  | 	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> | ||||||
|  | 		<attributes> | ||||||
|  | 			<attribute name="optional" value="true"/> | ||||||
|  | 			<attribute name="test" value="true"/> | ||||||
|  | 		</attributes> | ||||||
|  | 	</classpathentry> | ||||||
| 	<classpathentry kind="output" path="target/classes"/> | 	<classpathentry kind="output" path="target/classes"/> | ||||||
| </classpath> | </classpath> | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ | |||||||
| 	<modelVersion>4.0.0</modelVersion> | 	<modelVersion>4.0.0</modelVersion> | ||||||
| 	<groupId>kangaroo-and-rabbit</groupId> | 	<groupId>kangaroo-and-rabbit</groupId> | ||||||
| 	<artifactId>archidata</artifactId> | 	<artifactId>archidata</artifactId> | ||||||
| 	<version>0.6.1</version> | 	<version>0.6.3</version> | ||||||
| 	<properties> | 	<properties> | ||||||
| 		<maven.compiler.version>3.1</maven.compiler.version> | 		<maven.compiler.version>3.1</maven.compiler.version> | ||||||
| 		<maven.compiler.source>21</maven.compiler.source> | 		<maven.compiler.source>21</maven.compiler.source> | ||||||
| @@ -107,7 +107,12 @@ | |||||||
| 		<dependency> | 		<dependency> | ||||||
| 			<groupId>com.fasterxml.jackson.core</groupId> | 			<groupId>com.fasterxml.jackson.core</groupId> | ||||||
| 			<artifactId>jackson-databind</artifactId> | 			<artifactId>jackson-databind</artifactId> | ||||||
| 			<version>2.16.0</version> | 			<version>2.16.1</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>com.fasterxml.jackson.dataformat</groupId> | ||||||
|  | 			<artifactId>jackson-dataformat-csv</artifactId> | ||||||
|  | 			<version>2.16.1</version> | ||||||
| 		</dependency> | 		</dependency> | ||||||
| 		<dependency> | 		<dependency> | ||||||
| 			<groupId>jakarta.servlet</groupId> | 			<groupId>jakarta.servlet</groupId> | ||||||
|   | |||||||
| @@ -5,6 +5,9 @@ import java.sql.PreparedStatement; | |||||||
| import java.sql.SQLException; | import java.sql.SQLException; | ||||||
|  |  | ||||||
| import org.kar.archidata.dataAccess.DataAccess; | import org.kar.archidata.dataAccess.DataAccess; | ||||||
|  | import org.kar.archidata.dataAccess.QueryOption; | ||||||
|  | import org.kar.archidata.dataAccess.QueryOptions; | ||||||
|  | import org.kar.archidata.dataAccess.options.DBInterfaceOption; | ||||||
| import org.kar.archidata.db.DBEntry; | import org.kar.archidata.db.DBEntry; | ||||||
| import org.kar.archidata.model.User; | import org.kar.archidata.model.User; | ||||||
|  |  | ||||||
| @@ -12,21 +15,22 @@ public class UserDB { | |||||||
|  |  | ||||||
| 	public UserDB() {} | 	public UserDB() {} | ||||||
|  |  | ||||||
| 	public static User getUsers(final long userId) throws Exception { | 	public static User getUsers(final long userId, QueryOption... option) throws Exception { | ||||||
| 		return DataAccess.get(User.class, userId); | 		return DataAccess.get(User.class, userId, option); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static User getUserOrCreate(final long userId, final String userLogin) throws Exception { | 	public static User getUserOrCreate(final long userId, final String userLogin, QueryOption... option) throws Exception { | ||||||
| 		final User user = getUsers(userId); | 		final User user = getUsers(userId); | ||||||
| 		if (user != null) { | 		if (user != null) { | ||||||
| 			return user; | 			return user; | ||||||
| 		} | 		} | ||||||
| 		createUsersInfoFromOAuth(userId, userLogin); | 		createUsersInfoFromOAuth(userId, userLogin, option); | ||||||
| 		return getUsers(userId); | 		return getUsers(userId); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	private static void createUsersInfoFromOAuth(final long userId, final String login) throws IOException { | 	private static void createUsersInfoFromOAuth(final long userId, final String login, QueryOption... option) throws IOException { | ||||||
| 		final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		QueryOptions options = new QueryOptions(option); | ||||||
|  | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final String query = "INSERT INTO `user` (`id`, `login`, `lastConnection`, `admin`, `blocked`, `removed`) VALUE (?,?,now(3),'0','0','0')"; | 		final String query = "INSERT INTO `user` (`id`, `login`, `lastConnection`, `admin`, `blocked`, `removed`) VALUE (?,?,now(3),'0','0','0')"; | ||||||
| 		try { | 		try { | ||||||
| 			final PreparedStatement ps = entry.connection.prepareStatement(query); | 			final PreparedStatement ps = entry.connection.prepareStatement(query); | ||||||
|   | |||||||
| @@ -364,4 +364,17 @@ public class AnnotationTools { | |||||||
| 		return null; | 		return null; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	public static Field getFieldNamed(final Class<?> clazz, final String name) throws Exception { | ||||||
|  | 		for (final Field field : clazz.getFields()) { | ||||||
|  | 			// static field is only for internal global declaration ==> remove it .. | ||||||
|  | 			if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { | ||||||
|  | 				continue; | ||||||
|  | 			} | ||||||
|  | 			if (AnnotationTools.getFieldName(field).equals(name)) { | ||||||
|  | 				return field; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return null; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ import jakarta.ws.rs.core.StreamingOutput; | |||||||
| @Path("/data") | @Path("/data") | ||||||
| @Produces(MediaType.APPLICATION_JSON) | @Produces(MediaType.APPLICATION_JSON) | ||||||
| public class DataResource { | public class DataResource { | ||||||
| 	private static final Logger LOGGER = LoggerFactory.getLogger(MediaType.class); | 	private static final Logger LOGGER = LoggerFactory.getLogger(DataResource.class); | ||||||
| 	private final static int CHUNK_SIZE = 1024 * 1024; // 1MB chunks | 	private final static int CHUNK_SIZE = 1024 * 1024; // 1MB chunks | ||||||
| 	private final static int CHUNK_SIZE_IN = 50 * 1024 * 1024; // 1MB chunks | 	private final static int CHUNK_SIZE_IN = 50 * 1024 * 1024; // 1MB chunks | ||||||
| 	/** Upload some datas */ | 	/** Upload some datas */ | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ import java.lang.reflect.Constructor; | |||||||
| import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||||
| import java.sql.PreparedStatement; | import java.sql.PreparedStatement; | ||||||
| import java.sql.ResultSet; | import java.sql.ResultSet; | ||||||
|  | import java.sql.ResultSetMetaData; | ||||||
| import java.sql.SQLException; | import java.sql.SQLException; | ||||||
| import java.sql.Statement; | import java.sql.Statement; | ||||||
| import java.sql.Timestamp; | import java.sql.Timestamp; | ||||||
| @@ -15,7 +16,6 @@ import java.util.ArrayList; | |||||||
| import java.util.Date; | import java.util.Date; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| import org.kar.archidata.GlobalConfiguration; |  | ||||||
| import org.kar.archidata.annotation.AnnotationTools; | import org.kar.archidata.annotation.AnnotationTools; | ||||||
| import org.kar.archidata.annotation.CreationTimestamp; | import org.kar.archidata.annotation.CreationTimestamp; | ||||||
| import org.kar.archidata.annotation.DataDefault; | import org.kar.archidata.annotation.DataDefault; | ||||||
| @@ -26,6 +26,8 @@ import org.kar.archidata.dataAccess.addOn.AddOnManyToOne; | |||||||
| import org.kar.archidata.dataAccess.addOn.AddOnSQLTableExternalForeinKeyAsList; | import org.kar.archidata.dataAccess.addOn.AddOnSQLTableExternalForeinKeyAsList; | ||||||
| import org.kar.archidata.dataAccess.options.CheckFunction; | import org.kar.archidata.dataAccess.options.CheckFunction; | ||||||
| import org.kar.archidata.dataAccess.options.Condition; | import org.kar.archidata.dataAccess.options.Condition; | ||||||
|  | import org.kar.archidata.dataAccess.options.DBInterfaceOption; | ||||||
|  | import org.kar.archidata.dataAccess.options.DBInterfaceRoot; | ||||||
| import org.kar.archidata.dataAccess.options.FilterValue; | import org.kar.archidata.dataAccess.options.FilterValue; | ||||||
| import org.kar.archidata.dataAccess.options.TransmitKey; | import org.kar.archidata.dataAccess.options.TransmitKey; | ||||||
| import org.kar.archidata.db.DBEntry; | import org.kar.archidata.db.DBEntry; | ||||||
| @@ -41,12 +43,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; | |||||||
| import jakarta.ws.rs.InternalServerErrorException; | import jakarta.ws.rs.InternalServerErrorException; | ||||||
|  |  | ||||||
| /* TODO list: | /* TODO list: | ||||||
|    - useful code to manage external query: List<T> query<T>(class<T> clazz, String query, List<Object> parameters); |  | ||||||
| 		 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2"); |  | ||||||
| 		 ResultSetMetaData rsmd = rs.getMetaData(); |  | ||||||
| 		 String name = rsmd.getColumnName(1); |  | ||||||
|    - Manage to group of SQL action to permit to commit only at the end. |    - Manage to group of SQL action to permit to commit only at the end. | ||||||
|  |  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /** Data access is an abstraction class that permit to access on the DB with a function wrapping that permit to minimize the SQL writing of SQL code. This interface support the SQL and SQLite | /** Data access is an abstraction class that permit to access on the DB with a function wrapping that permit to minimize the SQL writing of SQL code. This interface support the SQL and SQLite | ||||||
| @@ -73,7 +70,8 @@ public class DataAccess { | |||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static boolean isDBExist(final String name) throws InternalServerErrorException { | 	public static boolean isDBExist(final String name, final QueryOption... option) throws InternalServerErrorException { | ||||||
|  | 		final QueryOptions options = new QueryOptions(option); | ||||||
| 		if ("sqlite".equals(ConfigBaseVariable.getDBType())) { | 		if ("sqlite".equals(ConfigBaseVariable.getDBType())) { | ||||||
| 			// no base manage in sqLite ... | 			// no base manage in sqLite ... | ||||||
| 			// TODO: check if the file exist or not ... | 			// TODO: check if the file exist or not ... | ||||||
| @@ -81,7 +79,7 @@ public class DataAccess { | |||||||
| 		} | 		} | ||||||
| 		DBEntry entry; | 		DBEntry entry; | ||||||
| 		try { | 		try { | ||||||
| 			entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, true); | 			entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		} catch (final IOException ex) { | 		} catch (final IOException ex) { | ||||||
| 			ex.printStackTrace(); | 			ex.printStackTrace(); | ||||||
| 			LOGGER.error("Can not check if the DB exist!!! {}", ex.getMessage()); | 			LOGGER.error("Can not check if the DB exist!!! {}", ex.getMessage()); | ||||||
| @@ -124,7 +122,7 @@ public class DataAccess { | |||||||
| 			return true; | 			return true; | ||||||
| 		} | 		} | ||||||
| 		try { | 		try { | ||||||
| 			return 1 == DataAccess.executeSimpleQuerry("CREATE DATABASE `" + name + "`;", true); | 			return 1 == DataAccess.executeSimpleQuerry("CREATE DATABASE `" + name + "`;", new DBInterfaceRoot(true)); | ||||||
| 		} catch (final SQLException | IOException ex) { | 		} catch (final SQLException | IOException ex) { | ||||||
| 			ex.printStackTrace(); | 			ex.printStackTrace(); | ||||||
| 			LOGGER.error("Can not check if the DB exist!!! {}", ex.getMessage()); | 			LOGGER.error("Can not check if the DB exist!!! {}", ex.getMessage()); | ||||||
| @@ -132,7 +130,8 @@ public class DataAccess { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static boolean isTableExist(final String name) throws InternalServerErrorException { | 	public static boolean isTableExist(final String name, final QueryOption... option) throws InternalServerErrorException { | ||||||
|  | 		final QueryOptions options = new QueryOptions(option); | ||||||
| 		try { | 		try { | ||||||
| 			String request = ""; | 			String request = ""; | ||||||
| 			if ("sqlite".equals(ConfigBaseVariable.getDBType())) { | 			if ("sqlite".equals(ConfigBaseVariable.getDBType())) { | ||||||
| @@ -143,14 +142,14 @@ public class DataAccess { | |||||||
| 						AND name = ?; | 						AND name = ?; | ||||||
| 						"""; | 						"""; | ||||||
| 				// PreparedStatement ps = entry.connection.prepareStatement("show tables"); | 				// PreparedStatement ps = entry.connection.prepareStatement("show tables"); | ||||||
| 				final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 				final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 				final PreparedStatement ps = entry.connection.prepareStatement(request); | 				final PreparedStatement ps = entry.connection.prepareStatement(request); | ||||||
| 				ps.setString(1, name); | 				ps.setString(1, name); | ||||||
| 				final ResultSet ret = ps.executeQuery(); | 				final ResultSet ret = ps.executeQuery(); | ||||||
| 				final int count = ret.getInt("total"); | 				final int count = ret.getInt("total"); | ||||||
| 				return count == 1; | 				return count == 1; | ||||||
| 			} else { | 			} else { | ||||||
| 				final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 				final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 				// TODO : Maybe connect with a temporary not specified connection interface to a db ... | 				// TODO : Maybe connect with a temporary not specified connection interface to a db ... | ||||||
| 				final PreparedStatement ps = entry.connection.prepareStatement("show tables"); | 				final PreparedStatement ps = entry.connection.prepareStatement("show tables"); | ||||||
| 				final ResultSet rs = ps.executeQuery(); | 				final ResultSet rs = ps.executeQuery(); | ||||||
| @@ -447,6 +446,196 @@ public class DataAccess { | |||||||
| 		count.inc(); | 		count.inc(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// TODO: this function will replace the previous one !!! | ||||||
|  | 	protected static RetreiveFromDB createSetValueFromDbCallback(final int count, final Field field) throws Exception { | ||||||
|  | 		final Class<?> type = field.getType(); | ||||||
|  | 		if (type == Long.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Long tmp = rs.getLong(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == long.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Long tmp = rs.getLong(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					// field.set(data, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.setLong(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == Integer.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Integer tmp = rs.getInt(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == int.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Integer tmp = rs.getInt(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					// field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.setInt(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == Float.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Float tmp = rs.getFloat(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == float.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Float tmp = rs.getFloat(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					// field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.setFloat(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == Double.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Double tmp = rs.getDouble(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == double.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Double tmp = rs.getDouble(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					// field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.setDouble(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == Boolean.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Boolean tmp = rs.getBoolean(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == boolean.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Boolean tmp = rs.getBoolean(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					// field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.setBoolean(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == Timestamp.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final Timestamp tmp = rs.getTimestamp(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == Date.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				try { | ||||||
|  | 					final Timestamp tmp = rs.getTimestamp(count); | ||||||
|  | 					if (rs.wasNull()) { | ||||||
|  | 						field.set(obj, null); | ||||||
|  | 					} else { | ||||||
|  | 						field.set(obj, Date.from(tmp.toInstant())); | ||||||
|  | 					} | ||||||
|  | 				} catch (final SQLException ex) { | ||||||
|  | 					final String tmp = rs.getString(count); | ||||||
|  | 					LOGGER.error("Fail to parse the SQL time !!! {}", tmp); | ||||||
|  | 					if (rs.wasNull()) { | ||||||
|  | 						field.set(obj, null); | ||||||
|  | 					} else { | ||||||
|  | 						final Date date = DateTools.parseDate(tmp); | ||||||
|  | 						LOGGER.error("Fail to parse the SQL time !!! {}", date); | ||||||
|  | 						field.set(obj, date); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == LocalDate.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final java.sql.Date tmp = rs.getDate(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp.toLocalDate()); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == LocalTime.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final java.sql.Time tmp = rs.getTime(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp.toLocalTime()); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type == String.class) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final String tmp = rs.getString(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					field.set(obj, tmp); | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		if (type.isEnum()) { | ||||||
|  | 			return (final ResultSet rs, final Object obj) -> { | ||||||
|  | 				final String tmp = rs.getString(count); | ||||||
|  | 				if (rs.wasNull()) { | ||||||
|  | 					field.set(obj, null); | ||||||
|  | 				} else { | ||||||
|  | 					boolean find = false; | ||||||
|  | 					final Object[] arr = type.getEnumConstants(); | ||||||
|  | 					for (final Object elem : arr) { | ||||||
|  | 						if (elem.toString().equals(tmp)) { | ||||||
|  | 							field.set(obj, elem); | ||||||
|  | 							find = true; | ||||||
|  | 							break; | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					if (!find) { | ||||||
|  | 						throw new DataAccessException("Enum value does not exist in the Model: '" + tmp + "'"); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 		} | ||||||
|  | 		throw new DataAccessException("Unknown Field Type"); | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	public static boolean isAddOnField(final Field field) { | 	public static boolean isAddOnField(final Field field) { | ||||||
| 		return findAddOnforField(field) != null; | 		return findAddOnforField(field) != null; | ||||||
| 	} | 	} | ||||||
| @@ -480,7 +669,7 @@ public class DataAccess { | |||||||
| 			check.getChecker().check("", data, AnnotationTools.getFieldsNames(clazz)); | 			check.getChecker().check("", data, AnnotationTools.getFieldsNames(clazz)); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final List<Field> asyncFieldUpdate = new ArrayList<>(); | 		final List<Field> asyncFieldUpdate = new ArrayList<>(); | ||||||
| 		Long uniqueSQLID = null; | 		Long uniqueSQLID = null; | ||||||
| 		final String tableName = AnnotationTools.getTableName(clazz, options); | 		final String tableName = AnnotationTools.getTableName(clazz, options); | ||||||
| @@ -622,7 +811,6 @@ public class DataAccess { | |||||||
| 			ex.printStackTrace(); | 			ex.printStackTrace(); | ||||||
| 		} finally { | 		} finally { | ||||||
| 			entry.close(); | 			entry.close(); | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 		final List<LazyGetter> asyncActions = new ArrayList<>(); | 		final List<LazyGetter> asyncActions = new ArrayList<>(); | ||||||
| 		for (final Field field : asyncFieldUpdate) { | 		for (final Field field : asyncFieldUpdate) { | ||||||
| @@ -734,9 +922,9 @@ public class DataAccess { | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		final List<LazyGetter> asyncActions = new ArrayList<>(); | 		final List<LazyGetter> asyncActions = new ArrayList<>(); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		// real add in the BDD: | 		// real add in the BDD: | ||||||
| 		try { | 		try (entry) { | ||||||
| 			final String tableName = AnnotationTools.getTableName(clazz, options); | 			final String tableName = AnnotationTools.getTableName(clazz, options); | ||||||
| 			// boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(SQLIfNotExists.class).length != 0; | 			// boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(SQLIfNotExists.class).length != 0; | ||||||
| 			final StringBuilder query = new StringBuilder(); | 			final StringBuilder query = new StringBuilder(); | ||||||
| @@ -830,9 +1018,6 @@ public class DataAccess { | |||||||
| 			} | 			} | ||||||
| 		} catch (final SQLException ex) { | 		} catch (final SQLException ex) { | ||||||
| 			ex.printStackTrace(); | 			ex.printStackTrace(); | ||||||
| 		} finally { |  | ||||||
| 			entry.close(); |  | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 		for (final LazyGetter action : asyncActions) { | 		for (final LazyGetter action : asyncActions) { | ||||||
| 			action.doRequest(); | 			action.doRequest(); | ||||||
| @@ -885,26 +1070,20 @@ public class DataAccess { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static int executeSimpleQuerry(final String query, final boolean root) throws SQLException, IOException { | 	public static int executeSimpleQuerry(final String query, final QueryOption... option) throws SQLException, IOException { | ||||||
| 		final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, root); | 		final QueryOptions options = new QueryOptions(option); | ||||||
|  | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final Statement stmt = entry.connection.createStatement(); | 		final Statement stmt = entry.connection.createStatement(); | ||||||
| 		return stmt.executeUpdate(query); | 		return stmt.executeUpdate(query); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static int executeSimpleQuerry(final String query) throws SQLException, IOException { | 	public static boolean executeQuerry(final String query, final QueryOption... option) throws SQLException, IOException { | ||||||
| 		return executeSimpleQuerry(query, false); | 		final QueryOptions options = new QueryOptions(option); | ||||||
| 	} | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
|  |  | ||||||
| 	public static boolean executeQuerry(final String query, final boolean root) throws SQLException, IOException { |  | ||||||
| 		final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, root); |  | ||||||
| 		final Statement stmt = entry.connection.createStatement(); | 		final Statement stmt = entry.connection.createStatement(); | ||||||
| 		return stmt.execute(query); | 		return stmt.execute(query); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static boolean executeQuerry(final String query) throws SQLException, IOException { |  | ||||||
| 		return executeQuerry(query, false); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	public static <T> T getWhere(final Class<T> clazz, final QueryOption... option) throws Exception { | 	public static <T> T getWhere(final Class<T> clazz, final QueryOption... option) throws Exception { | ||||||
| 		final QueryOptions options = new QueryOptions(option); | 		final QueryOptions options = new QueryOptions(option); | ||||||
| 		options.add(new Limit(1)); | 		options.add(new Limit(1)); | ||||||
| @@ -915,8 +1094,6 @@ public class DataAccess { | |||||||
| 		return values.get(0); | 		return values.get(0); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* public static <T> List<T> getsWhere(final Class<T> clazz, final QueryItem condition) throws Exception { return getsWhere(clazz, condition, null); } */ |  | ||||||
|  |  | ||||||
| 	public static void generateSelectField(final StringBuilder querySelect, final StringBuilder query, final Class<?> clazz, final QueryOptions options, final CountInOut count) throws Exception { | 	public static void generateSelectField(final StringBuilder querySelect, final StringBuilder query, final Class<?> clazz, final QueryOptions options, final CountInOut count) throws Exception { | ||||||
| 		final boolean readAllfields = QueryOptions.readAllColomn(options); | 		final boolean readAllfields = QueryOptions.readAllColomn(options); | ||||||
| 		final String tableName = AnnotationTools.getTableName(clazz, options); | 		final String tableName = AnnotationTools.getTableName(clazz, options); | ||||||
| @@ -966,7 +1143,7 @@ public class DataAccess { | |||||||
| 		} | 		} | ||||||
| 		final List<LazyGetter> lazyCall = new ArrayList<>(); | 		final List<LazyGetter> lazyCall = new ArrayList<>(); | ||||||
| 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final List<T> outs = new ArrayList<>(); | 		final List<T> outs = new ArrayList<>(); | ||||||
| 		// real add in the BDD: | 		// real add in the BDD: | ||||||
| 		try { | 		try { | ||||||
| @@ -1019,7 +1196,6 @@ public class DataAccess { | |||||||
| 			ex.printStackTrace(); | 			ex.printStackTrace(); | ||||||
| 		} finally { | 		} finally { | ||||||
| 			entry.close(); | 			entry.close(); | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 		return outs; | 		return outs; | ||||||
| 	} | 	} | ||||||
| @@ -1070,7 +1246,7 @@ public class DataAccess { | |||||||
| 			condition = new Condition(); | 			condition = new Condition(); | ||||||
| 		} | 		} | ||||||
| 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		long count = 0; | 		long count = 0; | ||||||
| 		// real add in the BDD: | 		// real add in the BDD: | ||||||
| 		try { | 		try { | ||||||
| @@ -1172,8 +1348,7 @@ public class DataAccess { | |||||||
| 		final String tableName = AnnotationTools.getTableName(clazz, options); | 		final String tableName = AnnotationTools.getTableName(clazz, options); | ||||||
| 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | ||||||
| 		// find the deleted field | 		// find the deleted field | ||||||
|  | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); |  | ||||||
| 		final StringBuilder query = new StringBuilder(); | 		final StringBuilder query = new StringBuilder(); | ||||||
| 		query.append("DELETE FROM `"); | 		query.append("DELETE FROM `"); | ||||||
| 		query.append(tableName); | 		query.append(tableName); | ||||||
| @@ -1187,7 +1362,6 @@ public class DataAccess { | |||||||
| 			return ps.executeUpdate(); | 			return ps.executeUpdate(); | ||||||
| 		} finally { | 		} finally { | ||||||
| 			entry.close(); | 			entry.close(); | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -1207,8 +1381,7 @@ public class DataAccess { | |||||||
| 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | 		final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | ||||||
| 		/* String updateFieldName = null; if ("sqlite".equalsIgnoreCase(ConfigBaseVariable.getDBType())) { updateFieldName = AnnotationTools.getUpdatedFieldName(clazz); } */ | 		/* String updateFieldName = null; if ("sqlite".equalsIgnoreCase(ConfigBaseVariable.getDBType())) { updateFieldName = AnnotationTools.getUpdatedFieldName(clazz); } */ | ||||||
| 		// find the deleted field | 		// find the deleted field | ||||||
|  | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); |  | ||||||
| 		final StringBuilder query = new StringBuilder(); | 		final StringBuilder query = new StringBuilder(); | ||||||
| 		query.append("UPDATE `"); | 		query.append("UPDATE `"); | ||||||
| 		query.append(tableName); | 		query.append(tableName); | ||||||
| @@ -1226,7 +1399,6 @@ public class DataAccess { | |||||||
| 			return ps.executeUpdate(); | 			return ps.executeUpdate(); | ||||||
| 		} finally { | 		} finally { | ||||||
| 			entry.close(); | 			entry.close(); | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -1251,7 +1423,7 @@ public class DataAccess { | |||||||
| 		if (deletedFieldName == null) { | 		if (deletedFieldName == null) { | ||||||
| 			throw new DataAccessException("The class " + clazz.getCanonicalName() + " has no deleted field"); | 			throw new DataAccessException("The class " + clazz.getCanonicalName() + " has no deleted field"); | ||||||
| 		} | 		} | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final StringBuilder query = new StringBuilder(); | 		final StringBuilder query = new StringBuilder(); | ||||||
| 		query.append("UPDATE `"); | 		query.append("UPDATE `"); | ||||||
| 		query.append(tableName); | 		query.append(tableName); | ||||||
| @@ -1268,14 +1440,13 @@ public class DataAccess { | |||||||
| 			return ps.executeUpdate(); | 			return ps.executeUpdate(); | ||||||
| 		} finally { | 		} finally { | ||||||
| 			entry.close(); | 			entry.close(); | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static void drop(final Class<?> clazz, final QueryOption... option) throws Exception { | 	public static void drop(final Class<?> clazz, final QueryOption... option) throws Exception { | ||||||
| 		final QueryOptions options = new QueryOptions(option); | 		final QueryOptions options = new QueryOptions(option); | ||||||
| 		final String tableName = AnnotationTools.getTableName(clazz, options); | 		final String tableName = AnnotationTools.getTableName(clazz, options); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final StringBuilder query = new StringBuilder(); | 		final StringBuilder query = new StringBuilder(); | ||||||
| 		query.append("DROP TABLE IF EXISTS `"); | 		query.append("DROP TABLE IF EXISTS `"); | ||||||
| 		query.append(tableName); | 		query.append(tableName); | ||||||
| @@ -1301,14 +1472,13 @@ public class DataAccess { | |||||||
| 			} | 			} | ||||||
| 		} finally { | 		} finally { | ||||||
| 			entry.close(); | 			entry.close(); | ||||||
| 			entry = null; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static void cleanAll(final Class<?> clazz, final QueryOption... option) throws Exception { | 	public static void cleanAll(final Class<?> clazz, final QueryOption... option) throws Exception { | ||||||
| 		final QueryOptions options = new QueryOptions(option); | 		final QueryOptions options = new QueryOptions(option); | ||||||
| 		final String tableName = AnnotationTools.getTableName(clazz, options); | 		final String tableName = AnnotationTools.getTableName(clazz, options); | ||||||
| 		DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | 		DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
| 		final StringBuilder query = new StringBuilder(); | 		final StringBuilder query = new StringBuilder(); | ||||||
| 		query.append("DELETE FROM `"); | 		query.append("DELETE FROM `"); | ||||||
| 		query.append(tableName); | 		query.append(tableName); | ||||||
| @@ -1338,4 +1508,87 @@ public class DataAccess { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	/* - useful code to manage external query: List<T> query<T>(class<T> clazz, ); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2"); */ | ||||||
|  | 	public static <TYPE> List<TYPE> query(final Class<TYPE> clazz, final String query, final List<Object> parameters, final QueryOption... option) throws Exception { | ||||||
|  | 		final QueryOptions options = new QueryOptions(option); | ||||||
|  | 		return query(clazz, query, parameters, options); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public static <TYPE> List<TYPE> query(final Class<TYPE> clazz, final String queryBase, final List<Object> parameters, final QueryOptions options) throws Exception { | ||||||
|  | 		final List<LazyGetter> lazyCall = new ArrayList<>(); | ||||||
|  | 		// TODO ... final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); | ||||||
|  | 		final DBEntry entry = DBInterfaceOption.getAutoEntry(options); | ||||||
|  |  | ||||||
|  | 		Condition condition = options.get(Condition.class); | ||||||
|  | 		if (condition == null) { | ||||||
|  | 			condition = new Condition(); | ||||||
|  | 		} | ||||||
|  | 		final StringBuilder query = new StringBuilder(queryBase); | ||||||
|  | 		final List<TYPE> outs = new ArrayList<>(); | ||||||
|  | 		// real add in the BDD: | ||||||
|  | 		try { | ||||||
|  | 			final CountInOut count = new CountInOut(); | ||||||
|  | 			condition.whereAppendQuery(query, null, options, null); | ||||||
|  | 			LOGGER.warn("generate the query: '{}'", query.toString()); | ||||||
|  | 			// prepare the request: | ||||||
|  | 			final PreparedStatement ps = entry.connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS); | ||||||
|  | 			final CountInOut iii = new CountInOut(1); | ||||||
|  | 			if (parameters != null) { | ||||||
|  | 				for (final Object elem : parameters) { | ||||||
|  | 					DataAccess.addElement(ps, elem, iii); | ||||||
|  | 				} | ||||||
|  | 				iii.inc(); | ||||||
|  | 			} | ||||||
|  | 			condition.injectQuerry(ps, iii); | ||||||
|  | 			// execute the request | ||||||
|  | 			final ResultSet rs = ps.executeQuery(); | ||||||
|  | 			final ResultSetMetaData rsmd = rs.getMetaData(); | ||||||
|  | 			final List<RetreiveFromDB> actionToRetreive = new ArrayList<>(); | ||||||
|  | 			for (int jjj = 0; jjj < rsmd.getColumnCount(); jjj++) { | ||||||
|  | 				final String name = rsmd.getColumnName(jjj + 1); | ||||||
|  | 				// find field name ... | ||||||
|  | 				final Field field = AnnotationTools.getFieldNamed(clazz, name); | ||||||
|  | 				if (field == null) { | ||||||
|  | 					throw new DataAccessException("Querry with unknown field: '" + name + "'"); | ||||||
|  | 				} | ||||||
|  | 				// create the callback... | ||||||
|  | 				final RetreiveFromDB element = createSetValueFromDbCallback(jjj + 1, field); | ||||||
|  | 				actionToRetreive.add(element); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			while (rs.next()) { | ||||||
|  | 				count.value = 1; | ||||||
|  | 				final CountInOut countNotNull = new CountInOut(0); | ||||||
|  | 				Object data = null; | ||||||
|  | 				for (final Constructor<?> contructor : clazz.getConstructors()) { | ||||||
|  | 					if (contructor.getParameterCount() == 0) { | ||||||
|  | 						data = contructor.newInstance(); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				if (data == null) { | ||||||
|  | 					// TODO... | ||||||
|  | 				} else { | ||||||
|  | 					for (final RetreiveFromDB action : actionToRetreive) { | ||||||
|  | 						action.doRequest(rs, data); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				@SuppressWarnings("unchecked") | ||||||
|  | 				final TYPE out = (TYPE) data; | ||||||
|  | 				outs.add(out); | ||||||
|  | 			} | ||||||
|  | 			LOGGER.info("Async calls: {}", lazyCall.size()); | ||||||
|  | 			for (final LazyGetter elem : lazyCall) { | ||||||
|  | 				elem.doRequest(); | ||||||
|  | 			} | ||||||
|  | 		} catch (final SQLException ex) { | ||||||
|  | 			ex.printStackTrace(); | ||||||
|  | 			throw ex; | ||||||
|  | 		} catch (final Exception ex) { | ||||||
|  | 			ex.printStackTrace(); | ||||||
|  | 		} finally { | ||||||
|  | 			entry.close(); | ||||||
|  | 		} | ||||||
|  | 		return outs; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -17,6 +17,10 @@ public class QueryAnd implements QueryItem { | |||||||
| 		Collections.addAll(this.childs, items); | 		Collections.addAll(this.childs, items); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	public void add(final QueryItem... items) { | ||||||
|  | 		Collections.addAll(this.childs, items); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void generateQuerry(final StringBuilder query, final String tableName) { | 	public void generateQuerry(final StringBuilder query, final String tableName) { | ||||||
| 		if (this.childs.size() >= 1) { | 		if (this.childs.size() >= 1) { | ||||||
| @@ -43,4 +47,8 @@ public class QueryAnd implements QueryItem { | |||||||
| 			elem.injectQuerry(ps, iii); | 			elem.injectQuerry(ps, iii); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	public int size() { | ||||||
|  | 		return this.childs.size(); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,8 +15,10 @@ public class QueryCondition implements QueryItem { | |||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void generateQuerry(final StringBuilder query, final String tableName) { | 	public void generateQuerry(final StringBuilder query, final String tableName) { | ||||||
|  | 		if (tableName != null) { | ||||||
| 			query.append(tableName); | 			query.append(tableName); | ||||||
| 			query.append("."); | 			query.append("."); | ||||||
|  | 		} | ||||||
| 		query.append(this.key); | 		query.append(this.key); | ||||||
| 		query.append(" "); | 		query.append(" "); | ||||||
| 		query.append(this.comparator); | 		query.append(this.comparator); | ||||||
|   | |||||||
| @@ -24,8 +24,10 @@ public class QueryInList<T> implements QueryItem { | |||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void generateQuerry(final StringBuilder query, final String tableName) { | 	public void generateQuerry(final StringBuilder query, final String tableName) { | ||||||
|  | 		if (tableName != null) { | ||||||
| 			query.append(tableName); | 			query.append(tableName); | ||||||
| 			query.append("."); | 			query.append("."); | ||||||
|  | 		} | ||||||
| 		query.append(this.key); | 		query.append(this.key); | ||||||
| 		query.append(" "); | 		query.append(" "); | ||||||
| 		query.append(this.comparator); | 		query.append(this.comparator); | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								src/org/kar/archidata/dataAccess/QueryNotNull.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/org/kar/archidata/dataAccess/QueryNotNull.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | package org.kar.archidata.dataAccess; | ||||||
|  |  | ||||||
|  | import java.sql.PreparedStatement; | ||||||
|  |  | ||||||
|  | public class QueryNotNull implements QueryItem { | ||||||
|  | 	private final String key; | ||||||
|  |  | ||||||
|  | 	public QueryNotNull(final String key) { | ||||||
|  | 		this.key = key; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public void generateQuerry(final StringBuilder query, final String tableName) { | ||||||
|  | 		if (tableName != null) { | ||||||
|  | 			query.append(tableName); | ||||||
|  | 			query.append("."); | ||||||
|  | 		} | ||||||
|  | 		query.append(this.key); | ||||||
|  | 		query.append(" IS NOT NULL"); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public void injectQuerry(final PreparedStatement ps, final CountInOut iii) throws Exception {} | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								src/org/kar/archidata/dataAccess/QueryNull.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/org/kar/archidata/dataAccess/QueryNull.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | package org.kar.archidata.dataAccess; | ||||||
|  |  | ||||||
|  | import java.sql.PreparedStatement; | ||||||
|  |  | ||||||
|  | public class QueryNull implements QueryItem { | ||||||
|  | 	private final String key; | ||||||
|  |  | ||||||
|  | 	public QueryNull(final String key) { | ||||||
|  | 		this.key = key; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public void generateQuerry(final StringBuilder query, final String tableName) { | ||||||
|  | 		if (tableName != null) { | ||||||
|  | 			query.append(tableName); | ||||||
|  | 			query.append("."); | ||||||
|  | 		} | ||||||
|  | 		query.append(this.key); | ||||||
|  | 		query.append(" IS NULL"); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public void injectQuerry(final PreparedStatement ps, final CountInOut iii) throws Exception {} | ||||||
|  | } | ||||||
| @@ -64,5 +64,4 @@ public class QueryOptions { | |||||||
| 		} | 		} | ||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								src/org/kar/archidata/dataAccess/RetreiveFromDB.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/org/kar/archidata/dataAccess/RetreiveFromDB.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | package org.kar.archidata.dataAccess; | ||||||
|  |  | ||||||
|  | import java.sql.ResultSet; | ||||||
|  |  | ||||||
|  | public interface RetreiveFromDB { | ||||||
|  | 	void doRequest(final ResultSet rs, Object obj) throws Exception; | ||||||
|  | } | ||||||
| @@ -1,6 +1,7 @@ | |||||||
| package org.kar.archidata.dataAccess.addOn; | package org.kar.archidata.dataAccess.addOn; | ||||||
|  |  | ||||||
| import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||||
|  | import java.lang.reflect.ParameterizedType; | ||||||
| import java.sql.PreparedStatement; | import java.sql.PreparedStatement; | ||||||
| import java.sql.ResultSet; | import java.sql.ResultSet; | ||||||
| import java.sql.Types; | import java.sql.Types; | ||||||
| @@ -17,6 +18,7 @@ import org.slf4j.Logger; | |||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
|  |  | ||||||
| import com.fasterxml.jackson.annotation.JsonValue; | import com.fasterxml.jackson.annotation.JsonValue; | ||||||
|  | import com.fasterxml.jackson.core.type.TypeReference; | ||||||
| import com.fasterxml.jackson.databind.ObjectMapper; | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  |  | ||||||
| import jakarta.validation.constraints.NotNull; | import jakarta.validation.constraints.NotNull; | ||||||
| @@ -85,6 +87,40 @@ public class AddOnDataJson implements DataAccessAddOn { | |||||||
| 		count.inc(); | 		count.inc(); | ||||||
| 		if (!rs.wasNull()) { | 		if (!rs.wasNull()) { | ||||||
| 			final ObjectMapper objectMapper = new ObjectMapper(); | 			final ObjectMapper objectMapper = new ObjectMapper(); | ||||||
|  | 			if (field.getType() == List.class) { | ||||||
|  | 				ParameterizedType listType = (ParameterizedType) field.getGenericType(); | ||||||
|  | 				Class<?> listClass = (Class<?>) listType.getActualTypeArguments()[0]; | ||||||
|  | 				if (listClass == Long.class) { | ||||||
|  | 					final Object dataParsed = objectMapper.readValue(jsonData, new TypeReference<List<Long>>() {});// field.getType()); | ||||||
|  | 					field.set(data, dataParsed); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if (listClass == Float.class) { | ||||||
|  | 					final Object dataParsed = objectMapper.readValue(jsonData, new TypeReference<List<Float>>() {});// field.getType()); | ||||||
|  | 					field.set(data, dataParsed); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if (listClass == Double.class) { | ||||||
|  | 					final Object dataParsed = objectMapper.readValue(jsonData, new TypeReference<List<Double>>() {});// field.getType()); | ||||||
|  | 					field.set(data, dataParsed); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if (listClass == Integer.class) { | ||||||
|  | 					final Object dataParsed = objectMapper.readValue(jsonData, new TypeReference<List<Integer>>() {});// field.getType()); | ||||||
|  | 					field.set(data, dataParsed); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if (listClass == Short.class) { | ||||||
|  | 					final Object dataParsed = objectMapper.readValue(jsonData, new TypeReference<List<Short>>() {});// field.getType()); | ||||||
|  | 					field.set(data, dataParsed); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				if (listClass == String.class) { | ||||||
|  | 					final Object dataParsed = objectMapper.readValue(jsonData, new TypeReference<List<String>>() {});// field.getType()); | ||||||
|  | 					field.set(data, dataParsed); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 			final Object dataParsed = objectMapper.readValue(jsonData, field.getType()); | 			final Object dataParsed = objectMapper.readValue(jsonData, field.getType()); | ||||||
| 			field.set(data, dataParsed); | 			field.set(data, dataParsed); | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ public class AddOnSQLTableExternalForeinKeyAsList implements DataAccessAddOn { | |||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public boolean canInsert(final Field field) { | 	public boolean canInsert(final Field field) { | ||||||
| 		return false; | 		return true; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
|   | |||||||
| @@ -0,0 +1,48 @@ | |||||||
|  | package org.kar.archidata.dataAccess.options; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  |  | ||||||
|  | import org.kar.archidata.GlobalConfiguration; | ||||||
|  | import org.kar.archidata.dataAccess.QueryOption; | ||||||
|  | import org.kar.archidata.dataAccess.QueryOptions; | ||||||
|  | import org.kar.archidata.db.DBConfig; | ||||||
|  | import org.kar.archidata.db.DBEntry; | ||||||
|  |  | ||||||
|  | public class DBInterfaceOption extends QueryOption { | ||||||
|  | 	private DBEntry entry = null; | ||||||
|  | 	private final DBConfig config; | ||||||
|  | 	private final boolean root; | ||||||
|  |  | ||||||
|  | 	public DBInterfaceOption(final DBConfig config) { | ||||||
|  | 		this.config = config; | ||||||
|  | 		this.root = false; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public DBInterfaceOption(final DBConfig config, boolean root) { | ||||||
|  | 		this.config = config; | ||||||
|  | 		this.root = root; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public DBEntry getEntry(QueryOptions options) throws IOException { | ||||||
|  | 		if (this.entry == null) { | ||||||
|  | 			final DBInterfaceRoot isRoot = options.get(DBInterfaceRoot.class); | ||||||
|  | 			this.entry = DBEntry.createInterface(this.config, isRoot != null && isRoot.getRoot()); | ||||||
|  | 		} | ||||||
|  | 		return this.entry; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public boolean getRoot() { | ||||||
|  | 		return this.root; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public static DBEntry getAutoEntry(QueryOptions options) throws IOException { | ||||||
|  | 		final DBInterfaceOption dbOption = options.get(DBInterfaceOption.class); | ||||||
|  | 		if (dbOption == null) { | ||||||
|  | 			final DBInterfaceRoot isRoot = options.get(DBInterfaceRoot.class); | ||||||
|  | 			return DBEntry.createInterface(GlobalConfiguration.dbConfig, isRoot != null && isRoot.getRoot()); | ||||||
|  | 		} else { | ||||||
|  | 			return dbOption.getEntry(options); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -0,0 +1,16 @@ | |||||||
|  | package org.kar.archidata.dataAccess.options; | ||||||
|  |  | ||||||
|  | import org.kar.archidata.dataAccess.QueryOption; | ||||||
|  |  | ||||||
|  | public class DBInterfaceRoot extends QueryOption { | ||||||
|  | 	private final boolean root; | ||||||
|  |  | ||||||
|  | 	public DBInterfaceRoot(boolean root) { | ||||||
|  | 		this.root = root; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public boolean getRoot() { | ||||||
|  | 		return this.root; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										49
									
								
								src/org/kar/archidata/serializer/CSVMessageBodyWriter.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/org/kar/archidata/serializer/CSVMessageBodyWriter.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | package org.kar.archidata.serializer; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.io.OutputStream; | ||||||
|  | import java.lang.annotation.Annotation; | ||||||
|  | import java.lang.reflect.Type; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import com.fasterxml.jackson.dataformat.csv.CsvMapper; | ||||||
|  | import com.fasterxml.jackson.dataformat.csv.CsvSchema; | ||||||
|  |  | ||||||
|  | import jakarta.ws.rs.Produces; | ||||||
|  | import jakarta.ws.rs.WebApplicationException; | ||||||
|  | import jakarta.ws.rs.core.MediaType; | ||||||
|  | import jakarta.ws.rs.core.MultivaluedMap; | ||||||
|  | import jakarta.ws.rs.ext.MessageBodyWriter; | ||||||
|  | import jakarta.ws.rs.ext.Provider; | ||||||
|  |  | ||||||
|  | /** Body writer use in jersey with : In your main: ```java rc.register(new CSVMessageBodyWritter()); ``` | ||||||
|  |  * | ||||||
|  |  * and in the produce element: ```java | ||||||
|  |  * @GET | ||||||
|  |  * @Produces(CSVMessageBodyWritter.CSV_TYPE) public List<Data> getData() {} ``` */ | ||||||
|  | @Provider | ||||||
|  | @Produces("text/csv") | ||||||
|  | public class CSVMessageBodyWriter implements MessageBodyWriter<List<Object>> { | ||||||
|  | 	public static final String CSV_TYPE = "text/csv"; | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public boolean isWriteable(final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { | ||||||
|  | 		return List.class.isAssignableFrom(type); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public long getSize(final List<Object> data, final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Override | ||||||
|  | 	public void writeTo(final List<Object> data, final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, | ||||||
|  | 			final MultivaluedMap<String, Object> httpHeaders, final OutputStream entityStream) throws IOException, WebApplicationException { | ||||||
|  | 		if (data != null && data.size() > 0) { | ||||||
|  | 			final CsvMapper mapper = new CsvMapper(); | ||||||
|  | 			final Object o = data.get(0); | ||||||
|  | 			final CsvSchema schema = mapper.schemaFor(o.getClass()).withHeader(); | ||||||
|  | 			mapper.writer(schema).writeValue(entityStream, data); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -19,6 +19,7 @@ import org.kar.archidata.dataAccess.QueryAnd; | |||||||
| import org.kar.archidata.dataAccess.QueryCondition; | import org.kar.archidata.dataAccess.QueryCondition; | ||||||
| import org.kar.archidata.dataAccess.addOn.AddOnManyToMany; | import org.kar.archidata.dataAccess.addOn.AddOnManyToMany; | ||||||
| import org.kar.archidata.dataAccess.options.Condition; | import org.kar.archidata.dataAccess.options.Condition; | ||||||
|  | import org.kar.archidata.dataAccess.options.ReadAllColumn; | ||||||
| import org.kar.archidata.model.Data; | import org.kar.archidata.model.Data; | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| @@ -76,7 +77,7 @@ public class DataTools { | |||||||
|  |  | ||||||
| 	public static Data getWithSha512(final String sha512) { | 	public static Data getWithSha512(final String sha512) { | ||||||
| 		try { | 		try { | ||||||
| 			return DataAccess.getWhere(Data.class, new Condition(new QueryCondition("sha512", "=", sha512))); | 			return DataAccess.getWhere(Data.class, new Condition(new QueryCondition("sha512", "=", sha512)), new ReadAllColumn()); | ||||||
| 		} catch (final Exception e) { | 		} catch (final Exception e) { | ||||||
| 			// TODO Auto-generated catch block | 			// TODO Auto-generated catch block | ||||||
| 			e.printStackTrace(); | 			e.printStackTrace(); | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public class TestJson { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(SerializeAsJson.class); | 		final List<String> sqlCommand = DataFactory.createTable(SerializeAsJson.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public class TestListJson { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(SerializeListAsJson.class); | 		final List<String> sqlCommand = DataFactory.createTable(SerializeListAsJson.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ public class TestManyToMany { | |||||||
| 		sqlCommand.addAll(sqlCommand2); | 		sqlCommand.addAll(sqlCommand2); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ public class TestManyToOne { | |||||||
| 		sqlCommand.addAll(sqlCommand2); | 		sqlCommand.addAll(sqlCommand2); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ public class TestOneToMany { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(TypesTable.class); | 		final List<String> sqlCommand = DataFactory.createTable(TypesTable.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										121
									
								
								test/src/test/kar/archidata/TestRawQuery.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								test/src/test/kar/archidata/TestRawQuery.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | |||||||
|  | package test.kar.archidata; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import org.junit.jupiter.api.AfterAll; | ||||||
|  | import org.junit.jupiter.api.Assertions; | ||||||
|  | import org.junit.jupiter.api.BeforeAll; | ||||||
|  | import org.junit.jupiter.api.MethodOrderer; | ||||||
|  | import org.junit.jupiter.api.Order; | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | import org.junit.jupiter.api.TestMethodOrder; | ||||||
|  | import org.junit.jupiter.api.extension.ExtendWith; | ||||||
|  | import org.kar.archidata.GlobalConfiguration; | ||||||
|  | import org.kar.archidata.dataAccess.DataAccess; | ||||||
|  | import org.kar.archidata.dataAccess.DataFactory; | ||||||
|  | import org.kar.archidata.db.DBEntry; | ||||||
|  | import org.kar.archidata.tools.ConfigBaseVariable; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  |  | ||||||
|  | import test.kar.archidata.model.TypesTable; | ||||||
|  |  | ||||||
|  | @ExtendWith(StepwiseExtension.class) | ||||||
|  | @TestMethodOrder(MethodOrderer.OrderAnnotation.class) | ||||||
|  | public class TestRawQuery { | ||||||
|  | 	final static private Logger LOGGER = LoggerFactory.getLogger(TestTypes.class); | ||||||
|  |  | ||||||
|  | 	@BeforeAll | ||||||
|  | 	public static void configureWebServer() throws Exception { | ||||||
|  | 		if (!"true".equalsIgnoreCase(System.getenv("TEST_E2E_MODE"))) { | ||||||
|  | 			ConfigBaseVariable.dbType = "sqlite"; | ||||||
|  | 			ConfigBaseVariable.dbHost = "memory"; | ||||||
|  | 			// for test we need to connect all time the DB | ||||||
|  | 			ConfigBaseVariable.dbKeepConnected = "true"; | ||||||
|  | 		} | ||||||
|  | 		// Connect the dataBase... | ||||||
|  | 		final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); | ||||||
|  | 		entry.connect(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@AfterAll | ||||||
|  | 	public static void removeDataBase() throws IOException { | ||||||
|  | 		LOGGER.info("Remove the test db"); | ||||||
|  | 		DBEntry.closeAllForceMode(); | ||||||
|  | 		ConfigBaseVariable.clearAllValue(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Order(1) | ||||||
|  | 	@Test | ||||||
|  | 	public void testCreateTable() throws Exception { | ||||||
|  | 		final List<String> sqlCommand = DataFactory.createTable(TypesTable.class); | ||||||
|  | 		for (final String elem : sqlCommand) { | ||||||
|  | 			LOGGER.debug("request: '{}'", elem); | ||||||
|  | 			DataAccess.executeSimpleQuerry(elem); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	@Order(2) | ||||||
|  | 	@Test | ||||||
|  | 	public void testGet() throws Exception { | ||||||
|  |  | ||||||
|  | 		final TypesTable test = new TypesTable(); | ||||||
|  | 		test.intData = 95; | ||||||
|  | 		test.floatData = 1.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		test.intData = 96; | ||||||
|  | 		test.floatData = 2.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		test.intData = 97; | ||||||
|  | 		test.floatData = 3.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		test.intData = 98; | ||||||
|  | 		test.floatData = 4.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		test.intData = 99; | ||||||
|  | 		test.floatData = 5.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		test.intData = 99; | ||||||
|  | 		test.floatData = 6.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		test.intData = 99; | ||||||
|  | 		test.floatData = 7.0F; | ||||||
|  | 		DataAccess.insert(test); | ||||||
|  | 		{ | ||||||
|  | 			String querry = """ | ||||||
|  | 					SELECT * | ||||||
|  | 					FROM TypesTable | ||||||
|  | 					WHERE `intData` = ? | ||||||
|  | 					ORDER BY id DESC | ||||||
|  | 					"""; | ||||||
|  | 			List<Object> parameters = List.of(Integer.valueOf(99)); | ||||||
|  | 			// Try to retrieve all the data: | ||||||
|  | 			final List<TypesTable> retrieve = DataAccess.query(TypesTable.class, querry, parameters); | ||||||
|  |  | ||||||
|  | 			Assertions.assertNotNull(retrieve); | ||||||
|  | 			Assertions.assertEquals(3, retrieve.size()); | ||||||
|  | 			Assertions.assertEquals(99, retrieve.get(0).intData); | ||||||
|  | 			Assertions.assertEquals(7.0F, retrieve.get(0).floatData); | ||||||
|  | 			Assertions.assertEquals(6.0F, retrieve.get(1).floatData); | ||||||
|  | 			Assertions.assertEquals(5.0F, retrieve.get(2).floatData); | ||||||
|  | 		} | ||||||
|  | 		{ | ||||||
|  |  | ||||||
|  | 			String querry = """ | ||||||
|  | 					SELECT DISTINCT intData | ||||||
|  | 					FROM TypesTable | ||||||
|  | 					WHERE `intData` = ? | ||||||
|  | 					ORDER BY id DESC | ||||||
|  | 					"""; | ||||||
|  | 			List<Object> parameters = List.of(Integer.valueOf(99)); | ||||||
|  | 			// Try to retrieve all the data: | ||||||
|  | 			final List<TypesTable> retrieve = DataAccess.query(TypesTable.class, querry, parameters); | ||||||
|  |  | ||||||
|  | 			Assertions.assertNotNull(retrieve); | ||||||
|  | 			Assertions.assertEquals(1, retrieve.size()); | ||||||
|  | 			Assertions.assertEquals(99, retrieve.get(0).intData); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -65,7 +65,7 @@ public class TestSimpleTable { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(SimpleTable.class); | 		final List<String> sqlCommand = DataFactory.createTable(SimpleTable.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 		final SimpleTable test = new SimpleTable(); | 		final SimpleTable test = new SimpleTable(); | ||||||
| 		test.data = TestSimpleTable.DATA_INJECTED; | 		test.data = TestSimpleTable.DATA_INJECTED; | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ public class TestSimpleTableSoftDelete { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(SimpleTableSoftDelete.class); | 		final List<String> sqlCommand = DataFactory.createTable(SimpleTableSoftDelete.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 		final SimpleTableSoftDelete test = new SimpleTableSoftDelete(); | 		final SimpleTableSoftDelete test = new SimpleTableSoftDelete(); | ||||||
| 		test.data = TestSimpleTableSoftDelete.DATA_INJECTED; | 		test.data = TestSimpleTableSoftDelete.DATA_INJECTED; | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public class TestTypeEnum1 { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(TypesEnum1.class); | 		final List<String> sqlCommand = DataFactory.createTable(TypesEnum1.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public class TestTypeEnum2 { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(TypesEnum2.class); | 		final List<String> sqlCommand = DataFactory.createTable(TypesEnum2.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ public class TestTypes { | |||||||
| 		final List<String> sqlCommand = DataFactory.createTable(TypesTable.class); | 		final List<String> sqlCommand = DataFactory.createTable(TypesTable.class); | ||||||
| 		for (final String elem : sqlCommand) { | 		for (final String elem : sqlCommand) { | ||||||
| 			LOGGER.debug("request: '{}'", elem); | 			LOGGER.debug("request: '{}'", elem); | ||||||
| 			DataAccess.executeSimpleQuerry(elem, false); | 			DataAccess.executeSimpleQuerry(elem); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| 0.6.1 | 0.6.3 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user