From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Dmitry Dolgov <9erthalion6(at)gmail(dot)com> |
Cc: | Nikita Glukhov <n(dot)gluhov(at)postgrespro(dot)ru>, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, David Fetter <david(at)fetter(dot)org>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>, Oleksandr Shulgin <oleksandr(dot)shulgin(at)zalando(dot)de>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Robert Haas <robertmhaas(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, Oleg Bartunov <obartunov(at)gmail(dot)com>, Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, David Steele <david(at)pgmasters(dot)net>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [HACKERS] [PATCH] Generic type subscripting |
Date: | 2020-02-13 13:25:46 |
Message-ID: | CAFj8pRDctHFZaSNSrmGPtDDqgGxOb=JWtxmbDkizVmDrX7_8Mg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
čt 13. 2. 2020 v 14:11 odesílatel Dmitry Dolgov <9erthalion6(at)gmail(dot)com>
napsal:
> > On Thu, Feb 13, 2020 at 10:15:14AM +0100, Pavel Stehule wrote:
> >
> > I tested last set of patches.
>
> Thanks a lot for testing!
>
> > I like patch 0006 - filling gaps by NULLs - it fixed my objections if I
> > remember correctly. Patch 0005 - polymorphic subscribing - I had not a
> > idea, what is a use case? Maybe can be good to postpone this patch. I
> have
> > not strong opinion about it, but generally is good to reduce size of
> > initial patch. I have nothing against a compatibility with SQL, but this
> > case doesn't looks too realistic for me, and can be postponed without
> > future compatibility issues.
>
> The idea about 0005 is mostly performance related, since this change
> (aside from being more pedantic with the standard) also allows to
> squeeze out some visible processing time improvement. But I agree that
> the patch series itself is too big to add something more, that's why I
> concider 0005/0006 mosly as interesting ideas for the future.
>
patch 0006 is necessary from my perspective. Without it, behave of update
is not practical. I didn't review of this patch mainly due issues that was
fixed by 0006 patch
> > I miss deeper comments for
> >
> > +static Oid
> > +findTypeSubscriptingFunction(List *procname, Oid typeOid, bool
> parseFunc)
> >
> > +/* Callback function signatures --- see xsubscripting.sgml for more
> info.
> > */
> > +typedef SubscriptingRef * (*SubscriptingPrepare) (bool isAssignment,
> > SubscriptingRef *sbsef);
> > +
> > +typedef SubscriptingRef * (*SubscriptingValidate) (bool isAssignment,
> > SubscriptingRef *sbsef,
> > +<-><--><--><--><--><--><--><--><--><--><--><--> struct ParseState
> > *pstate);
> > +
> > +typedef Datum (*SubscriptingFetch) (Datum source, struct
> > SubscriptingRefState *sbsrefstate);
> > +
> > +typedef Datum (*SubscriptingAssign) (Datum source, struct
> > SubscriptingRefState *sbrsefstate);
> > +
> > +typedef struct SubscriptRoutines
> > +{
> > +<->SubscriptingPrepare><-->prepare; #### .
> > +<->SubscriptingValidate<-->validate;
> > +<->SubscriptingFetch<-><-->fetch;
> > +<->SubscriptingAssign<><-->assign;
> > +
> > +} SubscriptRoutines;
> > +
> >
> > ....
> >
> > I miss comments (what is checked here - some like - subscript have to be
> > int4 and number of subscripts should be less than MAXDIM)
> >
> > +
> > +SubscriptingRef *
> > +array_subscript_prepare(bool isAssignment, SubscriptingRef *sbsref)
> >
> > +SubscriptingRef *
> > +array_subscript_validate(bool isAssignment, SubscriptingRef *sbsref,
> > +<-><--><--><--><--> ParseState *pstate)
> >
> Sure, I can probably add more commentaries there.
>
> > +Datum
> > +array_subscript_fetch(Datum containerSource, SubscriptingRefState
> *sbstate)
> >
> > there is a variable "is_slice". Original code had not this variable.
> > Personally I think so original code was better readable without this
> > variable.
> >
> > so instead
> >
> > +<->if (is_slice)
> > +<->{
> > +<-><-->for(i = 0; i < sbstate->numlower; i++)
> > +<-><--><-->l_index.indx[i] = DatumGetInt32(sbstate->lowerindex[i]);
> > +<->}
> >
> > is more readable
>
> Hm, IIRC this is actually necessary, but I'll check one more time.
>
> > I really miss a PLpgSQL support
> >
> > postgres=# do $$
> > declare j jsonb = '{"a":10, "b":20}';
> > begin
> > raise notice '%', j;
> > raise notice '%', j['a'];
> > j['a'] = '20';
> > raise notice '%', j;
> > end;
> > $$;
> > NOTICE: {"a": 10, "b": 20}
> > NOTICE: 10
> > ERROR: subscripted object is not an array
> > CONTEXT: PL/pgSQL function inline_code_block line 6 at assignment
> >
> > With PLpgSQL support it will be great patch, and really important
> > functionality. It can perfectly cover some gaps of plpgsql.
>
> Oh, interesting, I never though about this part. Thanks for mentioning,
> I'll take a look about how can we support the same for PLpgSQL.
>
> > It needs rebase, I had to fix some issues.
> >
> > ...
> >
> > regress tests fails
>
> Yep, I wasn't paying much attention recently to this patch, will post
> rebased and fixed version soon. At the same time I must admit, even if
> at the moment I can pursue two goals - either to make this feature
> accepted somehow, or make a longest living CF item ever - neither of
> those goals seems reachable.
>
I think so this feature is not important for existing applications. But it
allows to work with JSON data (or any other) more comfortable (creative) in
plpgsql.
Pavel
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2020-02-13 13:39:41 | Re: Optimize update of tables with generated columns |
Previous Message | Peter Eisentraut | 2020-02-13 13:24:43 | Re: allow running parts of src/tools/msvc/ under not Windows |