[DEV] continue normalisation API
This commit is contained in:
parent
d9fcacc812
commit
3b0c73bd55
@ -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();
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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 ");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
22
src/org/kar/archidata/dataAccess/options/FilterValue.java
Normal file
22
src/org/kar/archidata/dataAccess/options/FilterValue.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user