On May 8, 2013, at 9:31 PM, Lisen Mu <[EMAIL PROTECTED]> wrote:
> I'm not familiar with the optiq inside but seems it has something to do with your last projection's ref. What's the purpose of getHolder()?
> Maybe not the right thing to do, but the attached patch could produce output without nesting(but throws exceptions in some test...).
Your observations & patch helped get me through my mental block. I realized that "ref" is necessary for the "scan" operator, but not others. Therefore I made sure that each operator's JSON output the logical row type of the corresponding Optiq relational operator. Scan outputs records with a single field called _MAP; project contains whatever field(s) they asked for; filter outputs the same row type as its input; and so forth.
I was able to obsolete the "holder" notion, and some other nasty duck tape [ https://github.com/julianhyde/incubator-drill/commit/375dbf03157924860bfc6b3c7e1084cd91faa61d ]. I also implemented aggregation over the weekend [ https://github.com/julianhyde/incubator-drill/commit/febcb702c224f8aa148377272eb88929cfa15ee7 ].
Thanks for your help.