public NamedSet getNamedSet(List<Id.Segment> segments) { if (segments.size() == 1) { Id.Segment segment = segments.get(0); for (Formula namedSet : namedSetList) { if (segment.matches(namedSet.getName())) { return namedSet.getNamedSet(); } } } return super.getNamedSet(segments); }
/** * Correlates each child Id we started with to it's associated * Member, if present. Updates the resolvedIdentifiers map with * the association. */ private void addChildrenToResolvedMap( Map<QueryPart, QueryPart> resolvedIdentifiers, List<Id> children, List<Member> childMembers) { for (Member child : childMembers) { for (Id childId : children) { if (!resolvedIdentifiers.containsKey(childId) && getLastSegment(childId).matches(child.getName())) { resolvedIdentifiers.put( childId, (QueryPart)Util.createExpr(child)); } } } }
public static boolean matches( Member member, List<Id.Segment> nameParts) { if (Util.equalName(Util.implode(nameParts), member.getUniqueName())) { // exact match return true; } Id.Segment segment = nameParts.get(nameParts.size() - 1); while (member.getParentMember() != null) { if (!segment.matches(member.getName())) { return false; } member = member.getParentMember(); nameParts = nameParts.subList(0, nameParts.size() - 1); segment = nameParts.get(nameParts.size() - 1); } if (segment.matches(member.getName())) { return Util.equalName( member.getHierarchy().getUniqueName(), Util.implode(nameParts.subList(0, nameParts.size() - 1))); } else if (member.isAll()) { return Util.equalName( member.getHierarchy().getUniqueName(), Util.implode(nameParts)); } else { return false; } }
public OlapElement getElementChild( OlapElement parent, Id.Segment s, MatchType matchType) { // first look in cube OlapElement mdxElement = schemaReader.getElementChild(parent, s, matchType); if (mdxElement != null) { return mdxElement; } // then look in defined members (fixes MONDRIAN-77) // then in defined sets if (!(s instanceof Id.NameSegment)) { return null; } String name = ((Id.NameSegment) s).getName(); for (Formula formula : query.formulas) { if (formula.isMember()) { continue; // have already done these } Id id = formula.getIdentifier(); if (id.getSegments().size() == 1 && id.getSegments().get(0).matches(name)) { return formula.getNamedSet(); } } return mdxElement; }
/** * Checks various conditions to determine whether * the given identifier is likely to be resolvable at this point. */ private boolean supportedIdentifier(Id id) { Id.Segment seg = getLastSegment(id); if (!(seg instanceof Id.NameSegment)) { // we can't batch resolve members identified by key return false; } return (isPossibleMemberRef(id)) && !segmentIsCalcMember(id.getSegments()) && !id.getSegments().get(0).matches("Measures"); }
private boolean segMatchInNames( Id.Segment seg, Collection<String> names) { for (String name : names) { if (seg.matches(name)) { return true; } } return false; }