public void validate(Formula formula) { final Formula resolved = (Formula) resolvedNodes.get(formula); if (resolved != null) { return; // already resolved } try { stack.push(formula); resolvedNodes.put(formula, placeHolder); formula.accept(this); resolvedNodes.put(formula, formula); } finally { stack.pop(); } }
calcMembersSeen.add(calcMember); formula.accept(this);
public Object accept(MdxVisitor visitor) { Object o = visitor.visit(this); if (visitor.shouldVisitChildren()) { // visit formulas for (Formula formula : formulas) { formula.accept(visitor); } // visit axes for (QueryAxis axis : axes) { axis.accept(visitor); } if (slicerAxis != null) { slicerAxis.accept(visitor); } } return o; }
public Object visit(MemberExpr memberExpr) { Member member = memberExpr.getMember(); returnFormula(member); if (member.isCalculated() && member instanceof RolapCalculatedMember && !hasCyclicReference(memberExpr)) { Formula formula = ((RolapCalculatedMember) member).getFormula(); formula.accept(validator); returnFormula(member); } return super.visit(memberExpr); }
/** * Initializes the identifiers collection by walking the axes * and formulas in the query and adding each encountered Id. * Finally, expands the set of identifiers to include parents. E.g. * if the identifier * [Store].[All Store].[USA].[CA] * is encountered, this will be expanded to include * [Store].[All Store].[USA] * [Store].[All Store] */ private void initIdentifiers() { MdxVisitor identifierVisitor = new IdentifierVisitor(identifiers); for (QueryAxis axis : axes) { axis.accept(identifierVisitor); } if (query.getSlicerAxis() != null) { query.getSlicerAxis().accept(identifierVisitor); } for (Formula formula : formulas) { formula.accept(identifierVisitor); } expandIdentifiers(identifiers); }
formulaClone.accept(query.createValidator()); olapElement = formulaClone.getMdxMember();
f.accept(measureVisitor);