Note that you can have aggregates and scalars with the same name, as
long as they have a different number of arguments.

This comes up with the min() and max() functions.  The two-or-more
argument versions of these functions are scalars.  The one-argument
version is an aggregate.

On 3/9/17, Keith Medcalf <kmedc...@dessus.com> wrote:
>
> 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
>


-- 
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

Reply via email to