Ok, I see why you cannot use the same name. Queries of the form: select func(x) from y;
would be ambiguous if there were both an aggregate func and a scalar func, and the vdbe code generator uses the type of func (whether aggregate or scaler) to determine whether to interpret the query as an aggregate (returning a single value) or scalar (return one value per row). Simple example, but there are many others where choosing the intended version of func would change the query result possibly in a way other than intended. If you phrase a query that requires an aggregate function (such as select x, func(y) from x group by x) then if func is scalar an error is thrown. If you did a select x, func(y) from x and func is an aggregate function no such problem arises as long as func is a valid aggregate for singletons. So unless something is definitely not working as intended, I think that you should not be able to declare functions in both aggregate and scalar form with the same name and the current code is correct. > -----Original Message----- > From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] > On Behalf Of Keith Medcalf > Sent: Thursday, 9 March, 2017 15:33 > To: SQLite mailing list > Subject: Re: [sqlite] More built-in functions for basic math > > > I get complaints from the compiler about duplicate definitions of macro's > and functions ... > > As an aside, I am trying to walk db->aFunc as follows: > > sqlite3 *db = sqlite3_context_db_handle(context); > Hash *h = &(db->aFunc); > HashElem *p; > FuncDef *d; > char *functype; > for (p = h->first; p; p = p->next) > { > d = p->data; > functype = d->xFinalize ? "aggregate" : "scalar"; > printf("%s %s %d %d\n", d->zName, functype, d->nArg, d- > >funcFlags); > while (d->pNext) > { > d = d->pNext; > functype = d->xFinalize ? "aggregate" : "scalar"; > printf("%s* %s %d %d\n", d->zName, functype, d->nArg, d- > >funcFlags); > } > } > > but for functions which have both a scalar and aggregate form only the > aggregate is showing up (actually, only the last version registered is > showing up -- so which one shows up is scalar/aggregate is determined by > which one was defined last). > > When I asked you about this you said that I simply need to register the > function twice, once as an aggregate function and once as a scaler > function, but it does not appear to actually keep the two different > definitions. Is this a bug or working as intended? > > > > -----Original Message----- > > From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] > > On Behalf Of Richard Hipp > > Sent: Thursday, 9 March, 2017 13:08 > > To: SQLite mailing list > > Subject: Re: [sqlite] More built-in functions for basic math > > > > On 3/9/17, Keith Medcalf <kmedc...@dessus.com> wrote: > > > > > > note that fileio.c and shathree.c are inlined into shell.c, so in > order > > to > > > remove them I have to modify shell.c to ifdef them out when I am > > building. > > > > > > > Seriously? I have no trouble loading the external fileio.c and > > shathree.c extensions on top of the similar extensions that are built > > into the shell. Nothing about the shell code has to change. What > > part of that is not working for you? > > > > -- > > D. Richard Hipp > > d...@sqlite.org > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@mailinglists.sqlite.org > > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users