public Exp validate(Exp exp, boolean scalar) { Exp resolved; try { resolved = (Exp) resolvedNodes.get(exp); } catch (ClassCastException e) { // A classcast exception will occur if there is a String // placeholder in the map. This is an internal error -- should // not occur for any query, valid or invalid. throw Util.newInternal( e, "Infinite recursion encountered while validating '" + Util.unparse(exp) + "'"); } if (resolved == null) { try { stack.push((QueryPart) exp); // To prevent recursion, put in a placeholder while we're // resolving. resolvedNodes.put((QueryPart) exp, placeHolder); resolved = exp.accept(this); Util.assertTrue(resolved != null); resolvedNodes.put((QueryPart) exp, (QueryPart) resolved); } finally { stack.pop(); } } if (scalar) { final Type type = resolved.getType(); if (!TypeUtil.canEvaluate(type)) { String exprString = Util.unparse(resolved); throw MondrianResource.instance().MdxMemberExpIsSet.ex(exprString); } } return resolved; }
public void validate(QueryAxis axis) { final QueryAxis resolved = (QueryAxis) resolvedNodes.get(axis); if (resolved != null) { return; // already resolved } try { stack.push(axis); resolvedNodes.put(axis, placeHolder); axis.resolve(this); resolvedNodes.put(axis, axis); } finally { stack.pop(); } }
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(); } }
public void validate(MemberProperty memberProperty) { MemberProperty resolved = (MemberProperty) resolvedNodes.get(memberProperty); if (resolved != null) { return; // already resolved } try { stack.push(memberProperty); resolvedNodes.put(memberProperty, placeHolder); memberProperty.resolve(this); resolvedNodes.put(memberProperty, memberProperty); } finally { stack.pop(); } }
public void validate(ParameterExpr parameterExpr) { ParameterExpr resolved = (ParameterExpr) resolvedNodes.get(parameterExpr); if (resolved != null) { return; // already resolved } try { stack.push(parameterExpr); resolvedNodes.put(parameterExpr, placeHolder); resolved = (ParameterExpr) parameterExpr.accept(this); assert resolved != null; resolvedNodes.put(parameterExpr, resolved); } finally { stack.pop(); } }