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...).
Lisen, 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. Julian
