so 19. 12. 2020 v 21:35 odesÃlatel Tom Lane <t...@sss.pgh.pa.us> napsal:
> I wrote: > > However, further experimentation found a case that fails: > > regression=# select '3'::jsonb || '{}'::jsonb; > > ERROR: invalid concatenation of jsonb objects > > I wonder what is the point of this weird exception, and whether > > whoever devised it can provide a concise explanation of what > > they think the full behavior of "jsonb || jsonb" is. Why isn't > > '[3, {}]' a reasonable result here, if the cases above are OK? > > Here is a proposed patch for that. It turns out that the third > else-branch in IteratorConcat() already does the right thing, if > we just remove its restrictive else-condition and let it handle > everything except the two-objects and two-arrays cases. But it > seemed to me that trying to handle both the object || array > and array || object cases in that one else-branch was poorly > thought out: only one line of code can actually be shared, and it > took several extra lines of infrastructure to support the sharing. > So I split those cases into separate else-branches. > > This also addresses the inadequate documentation that was the > original complaint. > > Thoughts? Should we back-patch this? The existing behavior > seems to me to be inconsistent enough to be arguably a bug, > but we've not had field complaints saying "this should work". > +1 Pavel > regards, tom lane > >