<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6001.17052" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=980032208-05022008><FONT face=Verdana
color=#000080 size=2>Your suggested fix happens to work, but it's wrong. What do
think the right answer is? (Not just what happens to
work.)</FONT></SPAN></DIV><BR>
<BLOCKQUOTE
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000080 2px solid; MARGIN-RIGHT: 0px">
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> mondrian-bounces@pentaho.org
[mailto:mondrian-bounces@pentaho.org] <B>On Behalf Of </B>Harun
Pathan<BR><B>Sent:</B> Monday, February 04, 2008 11:33 PM<BR><B>To:</B>
mondrian@pentaho.org<BR><B>Subject:</B> [Mondrian] When iif has tupletypes
with unequal lengths asarguments, we get an exception<BR></FONT><BR></DIV>
<DIV></DIV>When we run this mdx we get an error stacktrace for which is as
below.<BR><BR>WITH <BR>MEMBER [Gender].agg<BR>AS 'IIF(1=1,
<BR> ([Store].[All
Stores],[Gender].[All Gender]),<BR>
([Store].[All Stores],[Gender].[All Gender],measures.[unit sales]) )',
SOLVE_ORDER = 4<BR>SELECT {[Measures].[unit sales]} ON 0,
<BR>{{[Gender].[Gender].MEMBERS},{([Gender].agg)}} on 1 FROM
sales<BR><BR>Caused by: mondrian.olap.MondrianException: Mondrian
Error:Internal<BR>error: could not derive type<BR>at
mondrian.resource.MondrianResource$_Def0.ex(Mondri anResource.java:777)<BR>at
mondrian.olap.Util.newInternal(Util.java:1333)<BR>at
mondrian.olap.fun.FunDefBase.createCall(FunDefBase .java:245)<BR>at
mondrian.mdx.UnresolvedFunCall.accept(UnresolvedFu nCall.java:101)<BR>at
mondrian.olap.Query$StackValidator.validate(Query. java:1229)<BR>at
mondrian.olap.Formula.accept(Formula.java:131)<BR>at
mondrian.olap.Query$StackValidator.validate(Query. java:1304)<BR>at
mondrian.olap.Query.resolve(Query.java:571)<BR>at
mondrian.olap.Query.resolve(Query.java:433)<BR>at
mondrian.olap.Query.<init>(Query.java:217)<BR>at
mondrian.olap.Query.<init>(Query.java:177)<BR>at
mondrian.olap.Parser.makeQuery(Parser.java:850)<BR>at
mondrian.olap.CUP$Parser$actions.CUP$Parser$do_act ion(Parser.java:1683)<BR>at
mondrian.olap.Parser.do_action(Parser.java:684)<BR>at
java_cup.runtime.lr_parser.parse(lr_parser.java:56 9)<BR>at
mondrian.olap.Parser.parseInternal(Parser.java:754 )<BR><BR>When iif function
is resolved, it tried to get common result type between its arguments. <BR>It
return null if the number of element types in both are unequal.Instead we need
to return a ScalarType.<BR><BR>Following is the code change in
TupleType<BR><BR>TupleType that = (TupleType) type;<BR>if
(this.elementTypes.length !=<BR> that.elementTypes.length)
{<BR> return new ScalarType(); //earlier it was
returning null<BR>}<BR><BR><BR>Can we go ahead and check this
in?<BR></BLOCKQUOTE></BODY></HTML>