Обсуждение: Type identification with libpq / PQFmod() when using aggregates (SUM)

Поиск
Список
Период
Сортировка

Type identification with libpq / PQFmod() when using aggregates (SUM)

От
Sebastien FLAESCH
Дата:
Hello,

In a libpq client application, we need to properly identify the data type
when fetching data produced from a SELECT, therefore we use the PQftype()
and PQfmod() APIs ...

Consider a column defined with the following data type:
   interval hour to second(0)

When executing a SELECT query using directly the columns values (no aggregate),
the libpq APIs (PQftype and PQfmod) return clear type information.

With an interval hour to second(0), we get:
   PQftype() = 1186   PQfmode() = 469762048 (pgprec=7168, pgscal=65532, pgleng=469762044)

where precision, scale and length are computed as follows:

#define VARHDRSZ 4    int pgfmod = PQfmod(st->pgResult, i);    int pgprec = (pgfmod >> 16);    int pgscal = ((pgfmod -
VARHDRSZ)& 0xffff);    int pgleng = (pgfmod - VARHDRSZ);
 

But when using an aggregate function like SUM(), PQfmode() function returns
"no information available" (-1) ...

Is the type of the result of an aggregate function (or even more complex
expressions) not known by the server?

Is this considered as bug or is it expected?

I found not much information in the PQfmod() description.

A workaround is to cast the result of the aggregate function:
   SELECT CAST( SUM(mycol) AS INTERVAL HOUR TO SECOND(0) ) FROM ...

But I just wonder that the type of the result is not just the same as
the type of the source column...

Thanks!
Seb



Re: Type identification with libpq / PQFmod() when using aggregates (SUM)

От
Tom Lane
Дата:
Sebastien FLAESCH <sf@4js.com> writes:
> But when using an aggregate function like SUM(), PQfmode() function returns
> "no information available" (-1) ...

> Is the type of the result of an aggregate function (or even more complex
> expressions) not known by the server?

That's correct.
        regards, tom lane



Re: Type identification with libpq / PQFmod() when using aggregates (SUM)

От
Sebastien FLAESCH
Дата:
On 04/14/2014 04:01 PM, Tom Lane wrote:
> Sebastien FLAESCH <sf@4js.com> writes:
>> But when using an aggregate function like SUM(), PQfmode() function returns
>> "no information available" (-1) ...
>
>> Is the type of the result of an aggregate function (or even more complex
>> expressions) not known by the server?
>
> That's correct.

Thank you Tom, but then, IMHO, it should be considered as a request...

Some client applications (which do a bit more than just displaying the result
string of query columns) need that information, for ex to do data conversions,
automatic formatting, etc.

Seb