There are some differences between Drill simple functions and aggregate functions.
For Drill simple function, optiq will check Drill function registry whether a function exists. So, all you need to is to provide the function template, the function converter will automatically add the function template into function registry. Aggregate functions are different in that simple function could appear anywhere in the query, while aggregate function could be only in certain clause ( no aggregation function in where clause, etc). Optiq have to know one certain function is aggregate function, in order to validate such logic. Seems we either need modify optiq to let it know new function "regr_avgx" is an aggregate, or Drill need provide a way to let optiq know "regr_avgx" is aggregate function, not simple function. On Mon, Sep 22, 2014 at 7:42 AM, Jason Altekruse <[email protected]> wrote: > Hi Yash, > > I did not work on the code for this, but if the functions are just acting > on columns to provide aggregates I believe they are just supported by > Drills default mechanism for tying into the parser. We ended up modifying > the parser with some FreeMarker hooks that allows for consumers of optiq to > provide custom syntax that extends the parser without forking the whole > thing. > > I believe that this works together with our function registry to provide > default support for UDFs (which our system functions are defined in the > same way as UDFs) without having to modify the parser itself. I haven't had > any trouble just adding new DrillFuncs and having them be discovered by > Drill and work after a new build. I believe I have only written scalar > functions and not aggregations, but you can look at the SumFunctions class > for some reference on the differences. > > -Jason > > On Mon, Sep 22, 2014 at 7:50 AM, Yash Sharma <[email protected]> wrote: > > > Hi All, > > I am planning to add new drill functions to optiq syntax for parsing. > > We have new functions like regr_avgx/regr_avgy etc and existing ones like > > covar_samp,covar_pop, correlation/corr etc. > > > > Going through this old thread[1] I see that we need to add the > definitions > > in the CombinedParser.jj[2] in Optiq. > > > > Is that the way we still use or its handled differently now ? > > > > Thanks. > > > > 1: https://groups.google.com/forum/#!topic/optiq-dev/dkkxsHh2MnE > > 2. > > > > > https://github.com/yssharma/optiq/blob/retired/core/src/main/codegen/templates/CombinedParser.jj > > >
