Skip to content

Commit

Permalink
use IQuery.unionDistinct()
Browse files Browse the repository at this point in the history
  • Loading branch information
teosarca committed Dec 19, 2017
1 parent 72fe128 commit 24d1f5d
Showing 1 changed file with 4 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.UnaryOperator;

import org.adempiere.ad.dao.IQueryBL;
import org.adempiere.ad.dao.IQueryBuilder;
Expand Down Expand Up @@ -103,7 +103,7 @@ private IQuery<I_MD_Candidate_Stock_v> createDBQueryForMaterialQueryOrNull(@NonN
final MemoizingFunction<Date, Timestamp> maxDateLessOrEqualFunction //
= Functions.memoizing(date -> retrieveMaxDateLessOrEqual(date));

final Function<? super StockQuery, ? extends StockQuery> setStockQueryDataParameter = //
final UnaryOperator<StockQuery> setStockQueryDataParameter = //
stockQuery -> {
final Timestamp latestDateOrNull = maxDateLessOrEqualFunction.apply(stockQuery.getDate());
if (latestDateOrNull == null)
Expand All @@ -113,31 +113,18 @@ private IQuery<I_MD_Candidate_Stock_v> createDBQueryForMaterialQueryOrNull(@NonN
return stockQuery.withDate(latestDateOrNull);
};

final Function<? super StockQuery, ? extends IQuery<I_MD_Candidate_Stock_v>> createDbQueryForSingleStockQuery = //
final Function<StockQuery, IQuery<I_MD_Candidate_Stock_v>> createDbQueryForSingleStockQuery = //
stockQuery -> StockRepositorySqlHelper
.createDBQueryForStockQuery(stockQuery)
.setOption(IQueryBuilder.OPTION_Explode_OR_Joins_To_SQL_Unions)
.create();

final BinaryOperator<IQuery<I_MD_Candidate_Stock_v>> allQueriesToOneUnion = //
(previousDBQuery, dbQuery) -> {
if (previousDBQuery == null)
{
return dbQuery;
}
else
{
previousDBQuery.addUnion(dbQuery, true);
return previousDBQuery;
}
};

return multiQuery.getQueries()
.stream()
.map(setStockQueryDataParameter)
.filter(Predicates.notNull())
.map(createDbQueryForSingleStockQuery)
.reduce(allQueriesToOneUnion)
.reduce(IQuery.unionDistict())
.orElse(null);
}

Expand Down

0 comments on commit 24d1f5d

Please sign in to comment.