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<SegmentHeader> getSegmentHeaders() { // Special case 0 and 1 workers, for which the 'union' operation // is trivial. switch (workers.size()) { case 0: return Collections.emptyList(); case 1: return workers.get(0).getSegmentHeaders(); default: final List<SegmentHeader> list = new ArrayList<SegmentHeader>(); final Set<SegmentHeader> set = new HashSet<SegmentHeader>(); for (SegmentCacheWorker worker : workers) { for (SegmentHeader header : worker.getSegmentHeaders()) { if (set.add(header)) { list.add(header); } } } return list; } }
public List<Hierarchy> getHierarchies() { if (queryAxis.getAxisOrdinal().isFilter()) { // Slicer contains all dimensions not mentioned on other axes. // The list contains the default hierarchy of // each dimension not already in the slicer or in another axes. Set<Dimension> dimensionSet = new HashSet<Dimension>(); for (CellSetAxisMetaData cellSetAxisMetaData : cellSetMetaData.getAxesMetaData()) { for (Hierarchy hierarchy : cellSetAxisMetaData.getHierarchies()) { dimensionSet.add(hierarchy.getDimension()); } } List<Hierarchy> hierarchyList = new ArrayList<Hierarchy>(); for (Dimension dimension : cellSetMetaData.getCube().getDimensions()) { if (dimensionSet.add(dimension)) { hierarchyList.add(dimension.getDefaultHierarchy()); } } // In case a dimension has multiple hierarchies, return the // declared type of the slicer expression. For example, if the // WHERE clause contains [Time].[Weekly].[1997].[Week 6], the // slicer should contain [Time].[Weekly] not the default hierarchy // [Time]. for (Hierarchy hierarchy : getHierarchiesNonFilter()) { if (hierarchy.getDimension().getHierarchies().size() == 1) { continue; } for (int i = 0; i < hierarchyList.size(); i++) { Hierarchy hierarchy1 = hierarchyList.get(i); if (hierarchy1.getDimension().equals(hierarchy.getDimension()) && hierarchy1 != hierarchy) { hierarchyList.set(i, hierarchy); } } } return hierarchyList; } else { return getHierarchiesNonFilter(); } }