package net.sourceforge.mayfly.evaluation.select; import net.sourceforge.mayfly.evaluation.GroupByCells; import net.sourceforge.mayfly.evaluation.ResultRow; import net.sourceforge.mayfly.evaluation.ResultRows; import net.sourceforge.mayfly.evaluation.what.Selected; import java.util.LinkedHashSet; import java.util.Set; public class IsDistinct extends Distinct { @Override public ResultRows distinct(Selected selected, ResultRows rows) { Set distinctRows = constructDistinctRows(selected, rows); return distinctRowsToResultRows(selected, distinctRows); } private ResultRows distinctRowsToResultRows( Selected selected, Set<GroupByCells> distinctRows) { ResultRows result = new ResultRows(); for (GroupByCells cells : distinctRows) { result = result.with(selected.toRow(cells)); } return result; } private Set constructDistinctRows(Selected selected, ResultRows rows) { Set distinctRows = new LinkedHashSet(); for (ResultRow row : rows) { GroupByCells cells = selected.evaluateAll(row); distinctRows.add(cells); } return distinctRows; } }