1 10 package mondrian.olap.fun; 11 12 import mondrian.calc.Calc; 13 import mondrian.calc.ExpCompiler; 14 import mondrian.calc.MemberCalc; 15 import mondrian.calc.TupleCalc; 16 import mondrian.calc.impl.AbstractStringCalc; 17 import mondrian.mdx.ResolvedFunCall; 18 import mondrian.olap.type.TypeUtil; 19 import mondrian.olap.Evaluator; 20 import mondrian.olap.Member; 21 22 29 class TupleToStrFunDef extends FunDefBase { 30 static final TupleToStrFunDef instance = new TupleToStrFunDef(); 31 32 private TupleToStrFunDef() { 33 super("TupleToStr", "TupleToStr(<Tuple>)", "Constructs a string from a tuple.", "fSt"); 34 } 35 36 public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) { 37 if (TypeUtil.couldBeMember(call.getArg(0).getType())) { 38 final MemberCalc memberCalc = 39 compiler.compileMember(call.getArg(0)); 40 return new AbstractStringCalc(call, new Calc[] {memberCalc}) { 41 public String evaluateString(Evaluator evaluator) { 42 final Member member = 43 memberCalc.evaluateMember(evaluator); 44 if (member.isNull()) { 45 return ""; 46 } 47 StringBuilder buf = new StringBuilder (); 48 buf.append(member.getUniqueName()); 49 return buf.toString(); 50 } 51 }; 52 } else { 53 final TupleCalc tupleCalc = 54 compiler.compileTuple(call.getArg(0)); 55 return new AbstractStringCalc(call, new Calc[] {tupleCalc}) { 56 public String evaluateString(Evaluator evaluator) { 57 final Member[] members = 58 tupleCalc.evaluateTuple(evaluator); 59 if (members == null) { 60 return ""; 61 } 62 StringBuilder buf = new StringBuilder (); 63 SetToStrFunDef.appendTuple(buf, members); 64 return buf.toString(); 65 } 66 }; 67 } 68 } 69 70 } 71 72 | Popular Tags |