Re: [HACKERS] [PATCH] Generic type subscripting

Pavel Stehule <pavel.stehule@gmail.com>

From: Pavel Stehule <pavel.stehule@gmail.com>
To: Justin Pryzby <pryzby@telsasoft.com>
Cc: Dmitry Dolgov <9erthalion6@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, David Steele <david@pgmasters.net>, Nikita Glukhov <n.gluhov@postgrespro.ru>, Alvaro Herrera <alvherre@2ndquadrant.com>, David Fetter <david@fetter.org>, Thomas Munro <thomas.munro@gmail.com>, Thomas Munro <thomas.munro@enterprisedb.com>, Oleksandr Shulgin <oleksandr.shulgin@zalando.de>, Robert Haas <robertmhaas@gmail.com>, Andres Freund <andres@anarazel.de>, Michael Paquier <michael.paquier@gmail.com>, Oleg Bartunov <obartunov@gmail.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2020-09-15T18:42:40Z
Lists: pgsql-hackers
st 9. 9. 2020 v 23:04 odesílatel Justin Pryzby <pryzby@telsasoft.com>
napsal:

> On Wed, Aug 05, 2020 at 04:04:22PM +0200, Dmitry Dolgov wrote:
> > > On Sun, Aug 02, 2020 at 12:50:12PM +0200, Pavel Stehule wrote:
> > > >
> > > > > Maybe this could be salvaged by flushing 0005 in its current form
> and
> > > > > having the jsonb subscript executor do something like "if the
> current
> > > > > value-to-be-subscripted is a JSON array, then try to convert the
> textual
> > > > > subscript value to an integer".  Not sure about what the error
> handling
> > > > > rules ought to be like, though.
> > > >
> > > > I'm fine with the idea of separating 0005 patch and potentially
> prusuing
> > > > it as an independent item. Just need to rebase 0006, since Pavel
> > > > mentioned that it's a reasonable change he would like to see in the
> > > > final result.
> > >
> > > +1
> >
> > Here is what I had in mind. Worth noting that, as well as the original
>
> This seems to already hit a merge conflict (8febfd185).
> Would you re-rebase ?
>

This can be easy fixed. Maybe I found a another issue.

create table foo(a jsonb);

postgres=# select * from foo;
┌───────────────────────────────────────────────────────────────────┐
│                                 a                                 │
╞═══════════════════════════════════════════════════════════════════╡
│ [0, null, null, null, null, null, null, null, null, null, "ahoj"] │
└───────────────────────────────────────────────────────────────────┘
(1 row)

It is working like I expect

but

postgres=# truncate foo;
TRUNCATE TABLE
postgres=# insert into foo values('[]');
INSERT 0 1
postgres=# update foo set a[10] = 'ahoj';
UPDATE 1
postgres=# select * from foo;
┌──────────┐
│    a     │
╞══════════╡
│ ["ahoj"] │
└──────────┘
(1 row)

Other parts look well. The plpgsql support is not part of this patch, but
it can be the next step. Implemented feature is interesting enough - it is
a simple user friendly interface for work with jsonb and in future with
other types.

Regards

Pavel


> --
> Justin
>

Commits

  1. Throw error when assigning jsonb scalar instead of a composite object

  2. Filling array gaps during jsonb subscripting

  3. Implementation of subscripting for jsonb

  4. Allow ALTER TYPE to update an existing type's typsubscript value.

  5. Allow subscripting of hstore values.

  6. Support subscripting of arbitrary types, not only arrays.

  7. jit: Reference function pointer types via llvmjit_types.c.

  8. Teach contain_leaked_vars that assignment SubscriptingRefs are leaky.

  9. jit: Correct parameter type for generated expression evaluation functions.

  10. Renaming for new subscripting mechanism

  11. Fix assertion failure for SSL connections.

  12. Teach eval_const_expressions() to handle some more cases.