BUG #18632: Whether you need to consider modifying the array's handling of delimiters? - Mailing list pgsql-bugs

From PG Bug reporting form
Subject BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
Date
Msg-id 18632-15cedd7d4154ea2a@postgresql.org
Whole thread Raw
Responses Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      18632
Logged by:          Man Zeng
Email address:      zengman@halodbtech.com
PostgreSQL version: 14.10
Operating system:   centos-8
Description:

Hi, I found a problem with array separator handling.
The current handling of delimiters is not quite as expected (not very
flexible).
The test SQL and results are shown below.

[postgres@halo-centos-8-release ~]$ psql
psql (14.10)
Type "help" for help.

postgres=# CREATE OR REPLACE FUNCTION arrayfunc() 
postgres-# RETURNS _varchar 
postgres-# AS $$ 
postgres$#   SELECT '{''a,3'',''b'',''c''}'::_varchar; 
postgres$# $$ LANGUAGE SQL;
CREATE FUNCTION
postgres=# -- array cstring
postgres=# SELECT arrayfunc();
    arrayfunc    
-----------------
 {'a,3','b','c'}
(1 row)

postgres=# -- length is 4
postgres=# SELECT array_length(arrayfunc(), 1); 
 array_length 
--------------
            4
(1 row)

postgres=# -- first element
postgres=# SELECT (arrayfunc())[1];
 arrayfunc 
-----------
 'a
(1 row)

postgres=# -- second element
postgres=# SELECT (arrayfunc())[2];
 arrayfunc 
-----------
 3'
(1 row)

postgres=# -- other
postgres=# SELECT (arrayfunc())[3];
 arrayfunc 
-----------
 'b'
(1 row)

postgres=# SELECT (arrayfunc())[4];
 arrayfunc 
-----------
 'c'
(1 row)

postgres=# -- The following SQL tests are as expected
postgres=# CREATE OR REPLACE FUNCTION arrayfunc2() 
postgres-# RETURNS _varchar 
postgres-# AS $$ 
postgres$#   SELECT '{''a-3'',''b'',''c''}'::_varchar; 
postgres$# $$ LANGUAGE SQL;
CREATE FUNCTION
postgres=# -- array cstring
postgres=# SELECT arrayfunc2();
   arrayfunc2    
-----------------
 {'a-3','b','c'}
(1 row)

postgres=# -- length is 3
postgres=# SELECT array_length(arrayfunc2(), 1); 
 array_length 
--------------
            3
(1 row)

postgres=# -- first element
postgres=# SELECT (arrayfunc2())[1];
 arrayfunc2 
------------
 'a-3'
(1 row)

So should we consider modifying "array_in" to enhance the handling of
separators to be more consistent with people's expectations?


pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #18631: Brocken postgresql12-devel RPM
Next
From: Erik Wienhold
Date:
Subject: Re: BUG #18632: Whether you need to consider modifying the array's handling of delimiters?