diff options
| author | Tom Lane | 2020-12-21 18:11:29 +0000 |
|---|---|---|
| committer | Tom Lane | 2020-12-21 18:11:50 +0000 |
| commit | ff5d5611c01f60525c30b2c3ebc16d05edb7956d (patch) | |
| tree | fdba3512f73c4805109f295ad0208846b7fb94ed /src/test | |
| parent | 86b7cca72d4d0a4e043fac0a2cdd56218ff2f258 (diff) | |
Remove "invalid concatenation of jsonb objects" error case.
The jsonb || jsonb operator arbitrarily rejected certain combinations
of scalar and non-scalar inputs, while being willing to concatenate
other combinations. This was of course quite undocumented. Rather
than trying to document it, let's just remove the restriction,
creating a uniform rule that unless we are handling an object-to-object
concatenation, non-array inputs are converted to one-element arrays,
resulting in an array-to-array concatenation. (This does not change
the behavior for any case that didn't throw an error before.)
Per complaint from Joel Jacobson. Back-patch to all supported branches.
Discussion: https://postgr.es/m/163099.1608312033@sss.pgh.pa.us
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/jsonb.out | 36 | ||||
| -rw-r--r-- | src/test/regress/sql/jsonb.sql | 5 |
2 files changed, 39 insertions, 2 deletions
diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out index a70cd0b7c13..1e6c6ef200a 100644 --- a/src/test/regress/expected/jsonb.out +++ b/src/test/regress/expected/jsonb.out @@ -4111,9 +4111,41 @@ select '{"a":"b"}'::jsonb || '[]'::jsonb; (1 row) select '"a"'::jsonb || '{"a":1}'; -ERROR: invalid concatenation of jsonb objects + ?column? +----------------- + ["a", {"a": 1}] +(1 row) + select '{"a":1}' || '"a"'::jsonb; -ERROR: invalid concatenation of jsonb objects + ?column? +----------------- + [{"a": 1}, "a"] +(1 row) + +select '[3]'::jsonb || '{}'::jsonb; + ?column? +---------- + [3, {}] +(1 row) + +select '3'::jsonb || '[]'::jsonb; + ?column? +---------- + [3] +(1 row) + +select '3'::jsonb || '4'::jsonb; + ?column? +---------- + [3, 4] +(1 row) + +select '3'::jsonb || '{}'::jsonb; + ?column? +---------- + [3, {}] +(1 row) + select '["a", "b"]'::jsonb || '{"c":1}'; ?column? ---------------------- diff --git a/src/test/regress/sql/jsonb.sql b/src/test/regress/sql/jsonb.sql index 3e2b8f66df2..b6409767f6d 100644 --- a/src/test/regress/sql/jsonb.sql +++ b/src/test/regress/sql/jsonb.sql @@ -1056,6 +1056,11 @@ select '{"a":"b"}'::jsonb || '[]'::jsonb; select '"a"'::jsonb || '{"a":1}'; select '{"a":1}' || '"a"'::jsonb; +select '[3]'::jsonb || '{}'::jsonb; +select '3'::jsonb || '[]'::jsonb; +select '3'::jsonb || '4'::jsonb; +select '3'::jsonb || '{}'::jsonb; + select '["a", "b"]'::jsonb || '{"c":1}'; select '{"c": 1}'::jsonb || '["a", "b"]'; |
