int internalAddRow(SqlStatement stmt, int column) throws SQLException { RolapMember member = null; if (getCurrMember() != null) { member = getCurrMember(); } else { boolean checkCacheStatus = true; final List<SqlStatement.Accessor> accessors = stmt.getAccessors(); for (int i = 0; i <= levelDepth; i++) { RolapLevel childLevel = levels[i]; if (childLevel.isAll()) { member = memberBuilder.allMember(); continue; } if (childLevel.isParentChild()) { column++; } Object value = accessors.get(column++).get(); if (value == null) { value = RolapUtil.sqlNullValue; } Object captionValue; if (childLevel.hasCaptionColumn()) { captionValue = accessors.get(column++).get(); } else { captionValue = null; } RolapMember parentMember = member; Object key = cache.makeKey(parentMember, value); member = cache.getMember(key, checkCacheStatus); checkCacheStatus = false; /* Only check the first time */ if (member == null) { if (constraint instanceof RolapNativeCrossJoin.NonEmptyCrossJoinConstraint && childLevel.isParentChild()) { member = castToNonEmptyCJConstraint(constraint).findMember(value); } if (member == null) { member = memberBuilder.makeMember( parentMember, childLevel, value, captionValue, parentChild, stmt, key, column); } } // Skip over the columns consumed by makeMember if (!childLevel.getOrdinalExp().equals(childLevel.getKeyExp())) { ++column; } column += childLevel.getProperties().length; } setCurrMember(member); } getList().add(member); return column; }
public List<RolapMember> getMembersInLevel( RolapLevel level, int startOrdinal, int endOrdinal, TupleConstraint constraint) { if (hierarchyAccess != null) { final int depth = level.getDepth(); if (depth < hierarchyAccess.getTopLevelDepth()) { return Collections.emptyList(); } if (depth > hierarchyAccess.getBottomLevelDepth()) { return Collections.emptyList(); } } final List<RolapMember> membersInLevel = memberReader.getMembersInLevel(level, startOrdinal, endOrdinal, constraint); List<RolapMember> filteredMembers = new ArrayList<RolapMember>(); filterMembers(membersInLevel, filteredMembers); return filteredMembers; }