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.