Обсуждение: Aggregates with internal state type?

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

Aggregates with internal state type?

От
Markus Schaber
Дата:
Hi,

The PostgreSQL allows functions to define "internal" as parameter and
return types for functions, when those are not visible from SQL.

This lead me to the question whether it is possible to use "internal" as
state type for an Aggregate whose functions are implemented in C.

Thanks,
Markus

-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in EU! www.ffii.org www.nosoftwarepatents.org


Re: Aggregates with internal state type?

От
Tom Lane
Дата:
Markus Schaber <schabi@logix-tt.com> writes:
> This lead me to the question whether it is possible to use "internal" as
> state type for an Aggregate whose functions are implemented in C.

No, because the system has no idea what the representation of an
"internal" state value might be, and in particular how to copy it.
The same goes for other pseudotypes.
        regards, tom lane


Re: Aggregates with internal state type?

От
Markus Schaber
Дата:
Hi, Tom,

Tom Lane wrote:
> Markus Schaber <schabi@logix-tt.com> writes:
>> This lead me to the question whether it is possible to use "internal" as
>> state type for an Aggregate whose functions are implemented in C.
> 
> No, because the system has no idea what the representation of an
> "internal" state value might be, and in particular how to copy it.
> The same goes for other pseudotypes.

Ah, I see. So there's no possibility to pass some void* kind of
intermediate data, I have to craft at least a dummy PostgreSQL datatype
for it.

This also solves the question how such things would be cleaned up in
case of an intermediate error.

Thanks,

Markus

-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in EU! www.ffii.org www.nosoftwarepatents.org


Re: Aggregates with internal state type?

От
Tom Lane
Дата:
Markus Schaber <schabi@logix-tt.com> writes:
> Ah, I see. So there's no possibility to pass some void* kind of
> intermediate data, I have to craft at least a dummy PostgreSQL datatype
> for it.

Right.  My first thought would be to use bytea as the declared type ---
doesn't put much burden on you except to have a length word at the front.
        regards, tom lane


Re: Aggregates with internal state type?

От
Markus Schaber
Дата:
Hi, Tom,

Tom Lane wrote:

>> Ah, I see. So there's no possibility to pass some void* kind of
>> intermediate data, I have to craft at least a dummy PostgreSQL datatype
>> for it.
> 
> Right.  My first thought would be to use bytea as the declared type ---
> doesn't put much burden on you except to have a length word at the front.

Yes, that will work for C, and I'll have a look into it. Good idea.

I had the secret hope that I'd come up with a scheme that also works
using pljava, avoiding the serialization and reserialization of java
objects. But I'm afraid that this gets more difficult.

Markus
-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org


Re: Aggregates with internal state type?

От
Markus Schaber
Дата:
Hi, Tom,

Markus Schaber wrote:

>>> This lead me to the question whether it is possible to use "internal" as
>>> state type for an Aggregate whose functions are implemented in C.
>> No, because the system has no idea what the representation of an
>> "internal" state value might be, and in particular how to copy it.
>> The same goes for other pseudotypes.
> Ah, I see. So there's no possibility to pass some void* kind of
> intermediate data, I have to craft at least a dummy PostgreSQL datatype
> for it.
> This also solves the question how such things would be cleaned up in
> case of an intermediate error.

As we are at it:

How would you estimate the chances for a Patch to get included that lets
C functions pass some void* data pointer around in an aggregate, when
the aggregate provides a custom "clean-up" function that gets called
whenever the scan gets aborted prematurely?

I assume that this could help speeding up e. G. Array Aggregates, or
PostGIS geomUnion() or string concatenations etc.

Thanks,
Markus
-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org