Re: Additional accessors via the Extension API ? - Mailing list pgsql-general

From Julien Rouhaud
Subject Re: Additional accessors via the Extension API ?
Date
Msg-id 20220220101257.dchizxpkang7vvq4@jrouhaud
Whole thread Raw
In response to Additional accessors via the Extension API ?  (Markur Sens <markursens@gmail.com>)
Responses Re: Additional accessors via the Extension API ?  (Markur Sens <markursens@gmail.com>)
List pgsql-general
Hi,

On Sun, Feb 20, 2022 at 08:07:20AM +0200, Markur Sens wrote:
> Suppose  I have defined an additional type in a PG extension.
>
> Is it possible to add custom accessors to that type -much like jsonb does-
> but use an API/hook without touching the core PG grammar & parser?

Unfortunately no.

> Hypothetical Examples:
>
> Assuming I have a TextFile type I’d like to implement syntax like:
>
> (‘/home/me/a.txt’::TextFile).firstline
> (‘/home/me/a.txt’::TextFile).lastline
> (‘/home/me/a.txt’::TextFile).countlines()
> (‘/home/me/a.txt’::TextFile).size()
> (‘/home/me/a.txt’::TextFile).datemodified()

Maybe you could rely on some old grammar hack to have something a bit similar,
as (expr).funcname is an alias for funcname(expr).  For instance:

# create function f1(int) returns text as $$
begin
return 'val: ' || $1::text;
end;
$$ language plpgsql;

# create table t as select 1 as id;

# select (5).f1, (id).f1 from t;
   f1   |   f1
--------+--------
 val: 5 | val: 1
(1 row)

I don't know if that would be enough for you needs.  Otherwise, the only option
would be tocreate an operator instead, like mytype -> 'myaccessor' or something
like that.



pgsql-general by date:

Previous
From: Karsten Hilbert
Date:
Subject: Aw: Additional accessors via the Extension API ?
Next
From: Markur Sens
Date:
Subject: Re: Additional accessors via the Extension API ?