private static Relations optimizeRelations(Relations relations) { Set<Object> keys = relations.stream().map(Relation::key) .collect(Collectors.toSet()); if (keys.size() == relations.size()) { return relations; Relations rs = new Relations(); for (Relation relation : relations) { if (relation.key().equals(key)) { rs.add(relation); if (rs.size() == 1) { continue; relations.removeAll(rs); rs = mergeRelations(rs); if (rs.isEmpty()) { return null; relations.addAll(rs);
private static Set<Relations> flattenAndOr(Condition condition) { Set<Relations> result = new HashSet<>(); switch (condition.type()) { case RELATION: Relation relation = (Relation) condition; result.add(Relations.of(relation)); break; case AND: Condition.And and = (Condition.And) condition; result = and(flattenAndOr(and.left()), flattenAndOr(and.right())); break; case OR: Condition.Or or = (Condition.Or) condition; result = or(flattenAndOr(or.left()), flattenAndOr(or.right())); break; default: throw new AssertionError(String.format( "Wrong condition type: '%s'", condition.type())); } return result; }
private static Relations calcValidRange(Relation gte, Relation gt, Relation eq, Relation lte, Relation lt) { Relations result = new Relations(); Relation lower = null; Relation upper = null; return Relations.of(); return Relations.of(); result.add(eq); return result; result.add(lower); result.add(upper);
private static Set<Relations> flattenAndOr(Condition condition) { Set<Relations> result = new HashSet<>(); switch (condition.type()) { case RELATION: Relation relation = (Relation) condition; result.add(Relations.of(relation)); break; case AND: Condition.And and = (Condition.And) condition; result = and(flattenAndOr(and.left()), flattenAndOr(and.right())); break; case OR: Condition.Or or = (Condition.Or) condition; result = or(flattenAndOr(or.left()), flattenAndOr(or.right())); break; default: throw new AssertionError(String.format( "Wrong condition type: '%s'", condition.type())); } return result; }
private static Relations optimizeRelations(Relations relations) { Set<Object> keys = relations.stream().map(Relation::key) .collect(Collectors.toSet()); if (keys.size() == relations.size()) { return relations; Relations rs = new Relations(); for (Relation relation : relations) { if (relation.key().equals(key)) { rs.add(relation); if (rs.size() == 1) { continue; relations.removeAll(rs); rs = mergeRelations(rs); if (rs.isEmpty()) { return null; relations.addAll(rs);
private static Set<Relations> and(Set<Relations> left, Set<Relations> right) { Set<Relations> result = new HashSet<>(); for (Relations leftRelations : left) { for (Relations rightRelations : right) { Relations relations = new Relations(); relations.addAll(leftRelations); relations.addAll(rightRelations); result.add(relations); } } return result; }
private static Relations calcValidRange(Relation gte, Relation gt, Relation eq, Relation lte, Relation lt) { Relations result = new Relations(); Relation lower = null; Relation upper = null; return Relations.of(); return Relations.of(); result.add(eq); return result; result.add(lower); result.add(upper);
private static Set<Relations> and(Set<Relations> left, Set<Relations> right) { Set<Relations> result = new HashSet<>(); for (Relations leftRelations : left) { for (Relations rightRelations : right) { Relations relations = new Relations(); relations.addAll(leftRelations); relations.addAll(rightRelations); result.add(relations); } } return result; }