[DEV] continue normalisation API

This commit is contained in:
Edouard DUPIN 2023-12-18 07:32:46 +01:00
parent d9fcacc812
commit 3b0c73bd55
5 changed files with 143 additions and 89 deletions

View File

@ -25,9 +25,9 @@ import org.kar.archidata.dataAccess.addOn.AddOnDataJson;
import org.kar.archidata.dataAccess.addOn.AddOnManyToMany; import org.kar.archidata.dataAccess.addOn.AddOnManyToMany;
import org.kar.archidata.dataAccess.addOn.AddOnManyToOne; 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.AccessDeletedItems;
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.FilterValue;
import org.kar.archidata.db.DBEntry; import org.kar.archidata.db.DBEntry;
import org.kar.archidata.exception.DataAccessException; import org.kar.archidata.exception.DataAccessException;
import org.kar.archidata.tools.ConfigBaseVariable; import org.kar.archidata.tools.ConfigBaseVariable;
@ -679,8 +679,8 @@ public class DataAccess {
return update(data, id, null); return update(data, id, null);
} }
public static <T> int updateWhere(final T data, final QueryItem condition) throws Exception { public static <T> int updateWhere(final T data, final QueryOptions options) throws Exception {
return updateWhere(data, condition, null, null); return updateWhere(data, options, null);
} }
/** @param <T> /** @param <T>
@ -690,11 +690,22 @@ public class DataAccess {
* @return the affected rows. * @return the affected rows.
* @throws Exception */ * @throws Exception */
public static <T, ID_TYPE> int update(final T data, final ID_TYPE id, final List<String> filterValue) throws Exception { public static <T, ID_TYPE> int update(final T data, final ID_TYPE id, final List<String> filterValue) throws Exception {
return updateWhere(data, getTableIdCondition(data.getClass(), id), null, filterValue); return updateWhere(data, new Condition(getTableIdCondition(data.getClass(), id)), filterValue);
} }
public static <T> int updateWhere(final T data, final QueryItem condition, final QueryOptions options, final List<String> filterValue) throws Exception { // il y avait: final List<String> filterValue
public static <T> int updateWhere(final T data, final QueryOption... option) throws Exception {
final Class<?> clazz = data.getClass(); final Class<?> clazz = data.getClass();
QueryOptions options = new QueryOptions(option);
Condition condition = options.get(Condition.class);
if (condition == null) {
throw new DataAccessException("request a gets without any condition");
}
FilterValue filter = options.get(FilterValue.class);
if (filter == null) {
throw new DataAccessException("request a gets without any filter values");
}
// public static NodeSmall createNode(String typeInNode, String name, String description, Long parentId) { // public static NodeSmall createNode(String typeInNode, String name, String description, Long parentId) {
// External checker of data: // External checker of data:
@ -755,7 +766,7 @@ public class DataAccess {
} }
query.append(" "); query.append(" ");
final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz);
whereAppendQuery(query, tableName, condition, null, deletedFieldName); condition.whereAppendQuery(query, tableName, null, deletedFieldName);
firstField = true; firstField = true;
LOGGER.debug("generate the query: '{}'", query.toString()); LOGGER.debug("generate the query: '{}'", query.toString());
// prepare the request: // prepare the request:
@ -791,7 +802,7 @@ public class DataAccess {
addOn.insertData(ps, field, data, iii); addOn.insertData(ps, field, data, iii);
} }
} }
whereInjectValue(ps, condition, iii); condition.injectQuerry(ps, iii);
return ps.executeUpdate(); return ps.executeUpdate();
} catch (final SQLException ex) { } catch (final SQLException ex) {
ex.printStackTrace(); ex.printStackTrace();
@ -834,45 +845,6 @@ public class DataAccess {
} }
} }
public static void whereAppendQuery(final StringBuilder query, final String tableName, final QueryItem condition, final QueryOptions options, final String deletedFieldName) {
boolean exclude_deleted = true;
if (options != null) {
exclude_deleted = !options.exist(AccessDeletedItems.class);
}
// Check if we have a condition to generate
if (condition == null) {
if (exclude_deleted && deletedFieldName != null) {
query.append(" WHERE ");
query.append(tableName);
query.append(".");
query.append(deletedFieldName);
query.append(" = false ");
}
return;
}
query.append(" WHERE (");
condition.generateQuerry(query, tableName);
query.append(") ");
if (exclude_deleted && deletedFieldName != null) {
query.append("AND ");
query.append(tableName);
query.append(".");
query.append(deletedFieldName);
query.append(" = false ");
}
}
public static void whereInjectValue(final PreparedStatement ps, final QueryOptions options, final CountInOut iii) throws Exception {
// Check if we have a condition to generate
if (options != null) {
final Condition condition = options.get(Condition.class);
if (condition != null) {
condition.injectQuerry(ps, iii);
}
}
}
public static int executeSimpleQuerry(final String query, final boolean root) throws SQLException, IOException { public static int executeSimpleQuerry(final String query, final boolean root) throws SQLException, IOException {
final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, root); final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, root);
final Statement stmt = entry.connection.createStatement(); final Statement stmt = entry.connection.createStatement();
@ -893,15 +865,9 @@ public class DataAccess {
return executeQuerry(query, false); return executeQuerry(query, false);
} }
public static <T> T getWhere(final Class<T> clazz, QueryOptions options) throws Exception { public static <T> T getWhere(final Class<T> clazz, QueryOption... option) throws Exception {
return getWhere(clazz, options); QueryOptions options = new QueryOptions(option);
if (options == null) { options.add(new Limit(1));
options = new QueryOptions();
}
final Limit limit = options.get(Limit.class);
if (limit != null) {
options.add(new Limit(1));
}
final List<T> values = getsWhere(clazz, options); final List<T> values = getsWhere(clazz, options);
if (values.size() == 0) { if (values.size() == 0) {
return null; return null;
@ -909,9 +875,7 @@ 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 { /* public static <T> List<T> getsWhere(final Class<T> clazz, final QueryItem condition) throws Exception { return getsWhere(clazz, condition, null); } */
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);
@ -949,8 +913,17 @@ public class DataAccess {
} }
} }
public static <T> List<T> getsWhere(final Class<T> clazz, final QueryOption... option) throws Exception {
QueryOptions options = new QueryOptions(option);
return getsWhere(clazz, options);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <T> List<T> getsWhere(final Class<T> clazz, final QueryItem condition, final QueryOptions options) throws Exception { public static <T> List<T> getsWhere(final Class<T> clazz, final QueryOptions options) throws Exception {
Condition condition = options.get(Condition.class);
if (condition == null) {
throw new DataAccessException("request a gets without any condition");
}
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); DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig);
@ -969,7 +942,7 @@ public class DataAccess {
generateSelectField(querySelect, query, clazz, options, count); generateSelectField(querySelect, query, clazz, options, count);
querySelect.append(query.toString()); querySelect.append(query.toString());
query = querySelect; query = querySelect;
whereAppendQuery(query, tableName, condition, options, deletedFieldName); condition.whereAppendQuery(query, tableName, options, deletedFieldName);
final OrderBy orders = options.get(OrderBy.class); final OrderBy orders = options.get(OrderBy.class);
if (orders != null) { if (orders != null) {
orders.generateQuerry(query, tableName); orders.generateQuerry(query, tableName);
@ -982,7 +955,7 @@ public class DataAccess {
// prepare the request: // prepare the request:
final PreparedStatement ps = entry.connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS); final PreparedStatement ps = entry.connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS);
final CountInOut iii = new CountInOut(1); final CountInOut iii = new CountInOut(1);
whereInjectValue(ps, condition, iii); condition.injectQuerry(ps, iii);
// execute the request // execute the request
final ResultSet rs = ps.executeQuery(); final ResultSet rs = ps.executeQuery();
while (rs.next()) { while (rs.next()) {
@ -1039,8 +1012,10 @@ public class DataAccess {
return get(clazz, id, null); return get(clazz, id, null);
} }
public static <T, ID_TYPE> T get(final Class<T> clazz, final ID_TYPE id, final QueryOptions options) throws Exception { public static <T, ID_TYPE> T get(final Class<T> clazz, final ID_TYPE id, final QueryOption... option) throws Exception {
return DataAccess.getWhere(clazz, getTableIdCondition(clazz, id), options); QueryOptions options = new QueryOptions(option);
options.add(new Condition(getTableIdCondition(clazz, id)));
return DataAccess.getWhere(clazz, options.getAllArray());
} }
public static String getCurrentTimeStamp() { public static String getCurrentTimeStamp() {
@ -1048,11 +1023,11 @@ public class DataAccess {
} }
public static <T> List<T> gets(final Class<T> clazz) throws Exception { public static <T> List<T> gets(final Class<T> clazz) throws Exception {
return getsWhere(clazz, null); return getsWhere(clazz);
} }
public static <T> List<T> gets(final Class<T> clazz, final QueryOptions options) throws Exception { public static <T> List<T> gets(final Class<T> clazz, final QueryOption... option) throws Exception {
return getsWhere(clazz, null, options); return getsWhere(clazz, option);
} }
public static <ID_TYPE> int delete(final Class<?> clazz, final ID_TYPE id) throws Exception { public static <ID_TYPE> int delete(final Class<?> clazz, final ID_TYPE id) throws Exception {
@ -1065,7 +1040,7 @@ public class DataAccess {
* @param id Unique Id of the model * @param id Unique Id of the model
* @param options (Optional) Options of the request * @param options (Optional) Options of the request
* @return Number of element that is removed. */ * @return Number of element that is removed. */
public static <ID_TYPE> int delete(final Class<?> clazz, final ID_TYPE id, final QueryOptions options) throws Exception { public static <ID_TYPE> int delete(final Class<?> clazz, final ID_TYPE id, final QueryOption... options) throws Exception {
final String hasDeletedFieldName = AnnotationTools.getDeletedFieldName(clazz); final String hasDeletedFieldName = AnnotationTools.getDeletedFieldName(clazz);
if (hasDeletedFieldName != null) { if (hasDeletedFieldName != null) {
return deleteSoft(clazz, id, options); return deleteSoft(clazz, id, options);
@ -1079,20 +1054,28 @@ public class DataAccess {
* @param condition Condition to remove elements. * @param condition Condition to remove elements.
* @param options (Optional) Options of the request. * @param options (Optional) Options of the request.
* @return Number of element that is removed. */ * @return Number of element that is removed. */
public static int deleteWhere(final Class<?> clazz, final QueryItem condition, final QueryOptions options) throws Exception { public static int deleteWhere(final Class<?> clazz, final QueryOption... option) throws Exception {
final String hasDeletedFieldName = AnnotationTools.getDeletedFieldName(clazz); final String hasDeletedFieldName = AnnotationTools.getDeletedFieldName(clazz);
if (hasDeletedFieldName != null) { if (hasDeletedFieldName != null) {
return deleteSoftWhere(clazz, condition, options); return deleteSoftWhere(clazz, option);
} else { } else {
return deleteHardWhere(clazz, condition, options); return deleteHardWhere(clazz, option);
} }
} }
public static <ID_TYPE> int deleteHard(final Class<?> clazz, final ID_TYPE id, final QueryOptions options) throws Exception { public static <ID_TYPE> int deleteHard(final Class<?> clazz, final ID_TYPE id, final QueryOption... option) throws Exception {
return deleteHardWhere(clazz, getTableIdCondition(clazz, id), options); QueryOptions options = new QueryOptions(option);
options.add(new Condition(getTableIdCondition(clazz, id)));
return deleteHardWhere(clazz, options.getAllArray());
} }
public static int deleteHardWhere(final Class<?> clazz, final QueryItem condition, final QueryOptions options) throws Exception { public static int deleteHardWhere(final Class<?> clazz, final QueryOption... option) throws Exception {
QueryOptions options = new QueryOptions(option);
Condition condition = options.get(Condition.class);
if (condition == null) {
throw new DataAccessException("request a gets without any condition");
}
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
@ -1102,12 +1085,12 @@ public class DataAccess {
query.append("DELETE FROM `"); query.append("DELETE FROM `");
query.append(tableName); query.append(tableName);
query.append("` "); query.append("` ");
whereAppendQuery(query, tableName, condition, null, deletedFieldName); condition.whereAppendQuery(query, tableName, null, deletedFieldName);
try { try {
LOGGER.debug("APPLY: {}", query.toString()); LOGGER.debug("APPLY: {}", query.toString());
final PreparedStatement ps = entry.connection.prepareStatement(query.toString()); final PreparedStatement ps = entry.connection.prepareStatement(query.toString());
final CountInOut iii = new CountInOut(1); final CountInOut iii = new CountInOut(1);
whereInjectValue(ps, condition, iii); condition.injectQuerry(ps, iii);
return ps.executeUpdate(); return ps.executeUpdate();
} finally { } finally {
entry.close(); entry.close();
@ -1115,11 +1098,18 @@ public class DataAccess {
} }
} }
private static <ID_TYPE> int deleteSoft(final Class<?> clazz, final ID_TYPE id, final QueryOptions options) throws Exception { private static <ID_TYPE> int deleteSoft(final Class<?> clazz, final ID_TYPE id, final QueryOption... option) throws Exception {
return deleteSoftWhere(clazz, getTableIdCondition(clazz, id), options); QueryOptions options = new QueryOptions(option);
options.add(new Condition(getTableIdCondition(clazz, id)));
return deleteSoftWhere(clazz, options.getAllArray());
} }
public static int deleteSoftWhere(final Class<?> clazz, final QueryItem condition, final QueryOptions options) throws Exception { public static int deleteSoftWhere(final Class<?> clazz, final QueryOption... option) throws Exception {
QueryOptions options = new QueryOptions(option);
Condition condition = options.get(Condition.class);
if (condition == null) {
throw new DataAccessException("request a gets without any condition");
}
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);
/* String updateFieldName = null; if ("sqlite".equalsIgnoreCase(ConfigBaseVariable.getDBType())) { updateFieldName = AnnotationTools.getUpdatedFieldName(clazz); } */ /* String updateFieldName = null; if ("sqlite".equalsIgnoreCase(ConfigBaseVariable.getDBType())) { updateFieldName = AnnotationTools.getUpdatedFieldName(clazz); } */
@ -1134,12 +1124,12 @@ public class DataAccess {
query.append("`=true "); query.append("`=true ");
/* The trigger work well, but the timestamp is store @ seconds... if (updateFieldName != null) { // done only in SQLite (the trigger does not work... query.append(", `"); /* The trigger work well, but the timestamp is store @ seconds... if (updateFieldName != null) { // done only in SQLite (the trigger does not work... query.append(", `");
* query.append(updateFieldName); query.append("`=DATE()"); } */ * query.append(updateFieldName); query.append("`=DATE()"); } */
whereAppendQuery(query, tableName, condition, null, deletedFieldName); condition.whereAppendQuery(query, tableName, null, deletedFieldName);
try { try {
LOGGER.debug("APPLY UPDATE: {}", query.toString()); LOGGER.debug("APPLY UPDATE: {}", query.toString());
final PreparedStatement ps = entry.connection.prepareStatement(query.toString()); final PreparedStatement ps = entry.connection.prepareStatement(query.toString());
final CountInOut iii = new CountInOut(1); final CountInOut iii = new CountInOut(1);
whereInjectValue(ps, condition, iii); condition.injectQuerry(ps, iii);
return ps.executeUpdate(); return ps.executeUpdate();
} finally { } finally {
entry.close(); entry.close();
@ -1148,14 +1138,21 @@ public class DataAccess {
} }
public static <ID_TYPE> int unsetDelete(final Class<?> clazz, final ID_TYPE id) throws Exception { public static <ID_TYPE> int unsetDelete(final Class<?> clazz, final ID_TYPE id) throws Exception {
return unsetDeleteWhere(clazz, getTableIdCondition(clazz, id), null); return unsetDeleteWhere(clazz, new Condition(getTableIdCondition(clazz, id)));
} }
public static <ID_TYPE> int unsetDelete(final Class<?> clazz, final ID_TYPE id, final QueryOptions options) throws Exception { public static <ID_TYPE> int unsetDelete(final Class<?> clazz, final ID_TYPE id, final QueryOption... option) throws Exception {
return unsetDeleteWhere(clazz, getTableIdCondition(clazz, id), options); QueryOptions options = new QueryOptions(option);
options.add(new Condition(getTableIdCondition(clazz, id)));
return unsetDeleteWhere(clazz, options.getAllArray());
} }
public static int unsetDeleteWhere(final Class<?> clazz, final QueryItem condition, final QueryOptions options) throws Exception { public static int unsetDeleteWhere(final Class<?> clazz, final QueryOption... option) throws Exception {
QueryOptions options = new QueryOptions(option);
Condition condition = options.get(Condition.class);
if (condition == null) {
throw new DataAccessException("request a gets without any condition");
}
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);
if (deletedFieldName == null) { if (deletedFieldName == null) {
@ -1170,11 +1167,11 @@ public class DataAccess {
query.append("`=false "); query.append("`=false ");
// need to disable the deleted false because the model must be unselected to be updated. // need to disable the deleted false because the model must be unselected to be updated.
options.add(QueryOptions.ACCESS_DELETED_ITEMS); options.add(QueryOptions.ACCESS_DELETED_ITEMS);
whereAppendQuery(query, tableName, condition, options, deletedFieldName); condition.whereAppendQuery(query, tableName, options, deletedFieldName);
try { try {
final PreparedStatement ps = entry.connection.prepareStatement(query.toString()); final PreparedStatement ps = entry.connection.prepareStatement(query.toString());
final CountInOut iii = new CountInOut(1); final CountInOut iii = new CountInOut(1);
whereInjectValue(ps, condition, iii); condition.injectQuerry(ps, iii);
return ps.executeUpdate(); return ps.executeUpdate();
} finally { } finally {
entry.close(); entry.close();

View File

@ -32,6 +32,10 @@ public class QueryOptions {
return this.options; return this.options;
} }
public QueryOption[] getAllArray() {
return this.options.toArray(new QueryOption[0]);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> T get(final Class<T> type) { public <T> T get(final Class<T> type) {
for (final QueryOption elem : this.options) { for (final QueryOption elem : this.options) {

View File

@ -19,6 +19,7 @@ import org.kar.archidata.dataAccess.QueryCondition;
import org.kar.archidata.dataAccess.QueryInList; import org.kar.archidata.dataAccess.QueryInList;
import org.kar.archidata.dataAccess.QueryOptions; import org.kar.archidata.dataAccess.QueryOptions;
import org.kar.archidata.dataAccess.addOn.model.LinkTable; import org.kar.archidata.dataAccess.addOn.model.LinkTable;
import org.kar.archidata.dataAccess.options.Condition;
import org.kar.archidata.dataAccess.options.OverrideTableName; import org.kar.archidata.dataAccess.options.OverrideTableName;
import org.kar.archidata.exception.DataAccessException; import org.kar.archidata.exception.DataAccessException;
import org.kar.archidata.tools.ConfigBaseVariable; import org.kar.archidata.tools.ConfigBaseVariable;
@ -85,7 +86,7 @@ public class AddOnManyToMany implements DataAccessAddOn {
querrySelect.append(" (SELECT GROUP_CONCAT("); querrySelect.append(" (SELECT GROUP_CONCAT(");
querrySelect.append(tmpVariable); querrySelect.append(tmpVariable);
querrySelect.append(".object2Id "); querrySelect.append(".object2Id ");
if (ConfigBaseVariable.getDBType().equals("sqlite")) { if ("sqlite".equals(ConfigBaseVariable.getDBType())) {
querrySelect.append(", "); querrySelect.append(", ");
} else { } else {
querrySelect.append("SEPARATOR "); querrySelect.append("SEPARATOR ");
@ -104,7 +105,7 @@ public class AddOnManyToMany implements DataAccessAddOn {
querrySelect.append(tmpVariable); querrySelect.append(tmpVariable);
querrySelect.append("."); querrySelect.append(".");
querrySelect.append("object1Id "); querrySelect.append("object1Id ");
if (!ConfigBaseVariable.getDBType().equals("sqlite")) { if (!"sqlite".equals(ConfigBaseVariable.getDBType())) {
querrySelect.append(" GROUP BY "); querrySelect.append(" GROUP BY ");
querrySelect.append(tmpVariable); querrySelect.append(tmpVariable);
querrySelect.append(".object1Id"); querrySelect.append(".object1Id");
@ -169,7 +170,7 @@ public class AddOnManyToMany implements DataAccessAddOn {
final List<Long> childs = new ArrayList<>(idList); final List<Long> childs = new ArrayList<>(idList);
// TODO: update to have get with abstract types .... // TODO: update to have get with abstract types ....
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final Object foreignData = DataAccess.getsWhere(decorators.targetEntity(), new QueryInList<>(idField, childs), null); final Object foreignData = DataAccess.getsWhere(decorators.targetEntity(), new Condition(new QueryInList<>(idField, childs)));
if (foreignData == null) { if (foreignData == null) {
return; return;
} }

View File

@ -5,6 +5,7 @@ import java.sql.PreparedStatement;
import org.kar.archidata.dataAccess.CountInOut; import org.kar.archidata.dataAccess.CountInOut;
import org.kar.archidata.dataAccess.QueryItem; import org.kar.archidata.dataAccess.QueryItem;
import org.kar.archidata.dataAccess.QueryOption; import org.kar.archidata.dataAccess.QueryOption;
import org.kar.archidata.dataAccess.QueryOptions;
/** By default some element are not read like createAt and UpdatedAt. This option permit to read it. */ /** By default some element are not read like createAt and UpdatedAt. This option permit to read it. */
public class Condition extends QueryOption { public class Condition extends QueryOption {
@ -25,4 +26,33 @@ public class Condition extends QueryOption {
this.condition.injectQuerry(ps, iii); this.condition.injectQuerry(ps, iii);
} }
} }
public void whereAppendQuery(final StringBuilder query, final String tableName, final QueryOptions options, final String deletedFieldName) {
boolean exclude_deleted = true;
if (options != null) {
exclude_deleted = !options.exist(AccessDeletedItems.class);
}
// Check if we have a condition to generate
if (this.condition == null) {
if (exclude_deleted && deletedFieldName != null) {
query.append(" WHERE ");
query.append(tableName);
query.append(".");
query.append(deletedFieldName);
query.append(" = false ");
}
return;
}
query.append(" WHERE (");
this.condition.generateQuerry(query, tableName);
query.append(") ");
if (exclude_deleted && deletedFieldName != null) {
query.append("AND ");
query.append(tableName);
query.append(".");
query.append(deletedFieldName);
query.append(" = false ");
}
}
} }

View File

@ -0,0 +1,22 @@
package org.kar.archidata.dataAccess.options;
import java.util.List;
import org.kar.archidata.dataAccess.QueryOption;
/** By default some element are not read like createAt and UpdatedAt. This option permit to read it. */
public class FilterValue extends QueryOption {
public final List<String> filterValue;
public FilterValue(final List<String> filterValue) {
this.filterValue = filterValue;
}
public FilterValue(final String... filterValue) {
this.filterValue = List.of(filterValue);
}
public List<String> getValues() {
return this.filterValue;
}
}