<!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.6000.16546" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2>Ati,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2>Thanks for the update. I don't mind waiting another month 
or so, because mondrian 3.0 is not due out til December. For people who are 
building mondrian from source (and they are the only people who would benefit 
during that month), they can incorporate your posted patch.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2>Sorry to have to be a tough bastard about this... it comes 
with being head of QA of mondrian as well as being architect, lead developer and 
chief evangelist. If I accept patches without regression tests, mondrian would 
soon degrade into a pool of half-working code (or I would spend my whole time 
writing regression tests, and then I'd have to jump off a 
bridge).</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2>Julian</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=463290900-20112007><FONT face=Verdana 
color=#000080 size=2></FONT></SPAN>&nbsp;</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>Ati 
  Rosselet<BR><B>Sent:</B> Saturday, November 17, 2007 1:46 PM<BR><B>To:</B> 
  Mondrian developer mailing list<BR><B>Subject:</B> Re: [Mondrian] Problem with 
  aggregate tables..<BR></FONT><BR></DIV>
  <DIV></DIV>Julian,<BR>I just haven't been able to get the regression test 
  done... completely swamped by my work, and now I'm waiting for a knee 
  operation (blew out my knee) - not conducive to coherent thought.. 
  :(&nbsp;&nbsp; This was an important fix for us, so I'd like to get it into 
  the mondrian code (surely someone else will be, or has already encountered the 
  problem..).&nbsp;&nbsp; I don't suppose anyone else would like to throw a test 
  together?&nbsp; If not.. I'll try to deal with it when I'm back on the grid.. 
  about 2 weeks I think <BR>Cheers.<BR>Ati<BR><BR>
  <DIV class=gmail_quote>On Oct 23, 2007 2:12 AM, Julian Hyde &lt;<A 
  href="mailto:julianhyde@speakeasy.net">julianhyde@speakeasy.net</A>&gt; 
  wrote:<BR>
  <BLOCKQUOTE class=gmail_quote 
  style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
    <DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 
    size=2>Ati,</FONT></SPAN></DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 
    size=2></FONT></SPAN>&nbsp;</DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 size=2>Thanks 
    for the fix. I've run your changes through the regression suite. Looking 
    good so far. I'll run the suite in all of its various property settings 
    tonight and see if anything pops out.</FONT></SPAN></DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 
    size=2></FONT></SPAN>&nbsp;</DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 size=2>Since 
    this change is a bug fix, I need a regression test before I will check in. I 
    think you could construct a testcase based on the foodmart database. Add the 
    test to TestAggregationManager; testMultipleMeasures&nbsp;is an example of a 
    test which runs an MDX query and checks that a particular SQL query is 
    generated. You will also need to use TestContext.create() to alter the XML; 
    testKeyExpressionCardinalityCache is an example of a test which does 
    that.</FONT></SPAN></DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 
    size=2></FONT></SPAN>&nbsp;</DIV>
    <DIV dir=ltr align=left><SPAN><FONT face=Verdana color=#000080 
    size=2>Julian</FONT></SPAN></DIV><BR>
    <BLOCKQUOTE 
    style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,128) 2px solid; MARGIN-RIGHT: 0px">
      <DIV lang=en-us dir=ltr align=left>
      <HR>
      <FONT face=Tahoma size=2>
      <DIV class=Ih2E3d><B>From:</B> <A 
      href="mailto:mondrian-bounces@pentaho.org" 
      target=_blank>mondrian-bounces@pentaho.org</A> [mailto:<A 
      href="mailto:mondrian-bounces@pentaho.org" 
      target=_blank>mondrian-bounces@pentaho.org</A>] <B>On Behalf Of </B>Ati 
      Rosselet<BR></DIV><B>Sent:</B> Monday, October 22, 2007 5:23 
      PM<BR><B>To:</B> Mondrian developer mailing list<BR><B>Subject:</B> Re: 
      [Mondrian] Problem with aggregate tables..<BR></FONT><BR></DIV>
      <DIV>
      <DIV></DIV>
      <DIV class=Wj3C7c>
      <DIV></DIV>sorry... cut and paste got me.. end of first function ended up 
      after the end of the 2nd modified function. 
      so<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /**<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Finds ALL the 
      child tables of the fact table with the given 
      columnName<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * used in 
      their left join condition. This is used by the AggTableManager 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * while 
      characterizing the fact table columns. (previous only returned FIRST 
      child)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public 
      ArrayList&lt;RolapStar.Table&gt; findTablesWithLeftJoinCondition(final 
      String columnName) <BR>
      <DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      java.util.ArrayList&lt;RolapStar.Table&gt; tables = new 
      java.util.ArrayList&lt;RolapStar.Table&gt;();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      for (Table child : getChildren()) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      Condition condition = 
      child.joinCondition;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if (condition != null) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if (condition.left instanceof MondrianDef.Column) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      MondrianDef.Column mcolumn 
      =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ( MondrianDef.Column) 
      condition.left;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if (mcolumn.name.equals(columnName)) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      tables.add(child);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      } </DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      return 
      (tables.size()==0?null:tables);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR><BR>and&nbsp; remove the return part from other 
      function..<BR><BR>Cheers..<BR>Ati<BR></DIV></DIV></BLOCKQUOTE></DIV><BR>_______________________________________________<BR>Mondrian 
    mailing list<BR><A 
    href="mailto:Mondrian@pentaho.org">Mondrian@pentaho.org</A><BR><A 
    href="http://lists.pentaho.org/mailman/listinfo/mondrian" 
    target=_blank>http://lists.pentaho.org/mailman/listinfo/mondrian</A><BR><BR></BLOCKQUOTE></DIV><BR></BLOCKQUOTE></BODY></HTML>