Re: patch: to_string, to_array functions

Started by Itagaki Takahiroover 15 years ago5 messages
#1Itagaki Takahiro
itagaki.takahiro@gmail.com

https://commitfest.postgresql.org/action/patch_view?id=300

Why did you add to_string() and to_array() functions though we already
have string_to_array() and array_to_string() functions? I prefer adding
three arguments version of string_to_array() instead of to_array().
Please notice me if you think to_string() and to_array() are better names
for the feature. For example, compatibility for other databases.

* string_to_array( str text, sep text, nullstr text DEFAULT NULL )
is compatible with the existing string_to_array( str, sep ), and
"nullstr => 'NULL'" will be same as your to_array().

* array_to_string( arr anyarray, sep text, nullstr text DEFAULT NULL )
is compatible with the existing array_to_string(); separator also ignored
when nullstr is NULL. "nullstr => ''" (an empty string) will be same as
your to_array().

--
Itagaki Takahiro

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Itagaki Takahiro (#1)

2010/7/12 Itagaki Takahiro <itagaki.takahiro@gmail.com>:

https://commitfest.postgresql.org/action/patch_view?id=300

Why did you add to_string() and to_array() functions though we already
have string_to_array() and array_to_string() functions?  I prefer adding
three arguments version of string_to_array() instead of to_array().
Please notice me if you think to_string() and to_array() are better names
for the feature. For example, compatibility for other databases.

I prefere a new names - because there are a new behave - with little
bit better default handling of NULL values. string_to_array and
array_to_string just ignore NULL values - what isn't correct behave.
Later we can mark these functions as deprecated and remove it. If I
use current function, then we have to continue in current behave.

* string_to_array( str text, sep text, nullstr text DEFAULT NULL )
is compatible with the existing  string_to_array( str, sep ), and
"nullstr => 'NULL'" will be same as your to_array().

* array_to_string( arr anyarray, sep text, nullstr text DEFAULT NULL )
is compatible with the existing  array_to_string(); separator also ignored
when nullstr is NULL. "nullstr => ''" (an empty string) will be same as
your to_array().

so reason for these new names are different default behave. And we
can't to change of default behave of existing functions.

Regards

Pavel Stehule

Show quoted text

--
Itagaki Takahiro

#3Itagaki Takahiro
itagaki.takahiro@gmail.com
In reply to: Pavel Stehule (#2)

2010/7/12 Pavel Stehule <pavel.stehule@gmail.com>:

I prefere a new names  - because there are a new behave - with little
bit better default handling of NULL values. string_to_array and
array_to_string just ignore NULL values - what isn't correct behave.
Later we can mark these functions as deprecated and remove it. If I
use current function, then we have to continue in current behave.

I prefer existing names because your new default behavior can be done
with suitable nullstr values. IMHO, new names will be acceptable only if
they are listed in the SQL-standard or many other databases use the
names. Two similar versions of functions must confuse users.

Also, are there any consensus about "existing functions are not correct" ?
Since string_agg() and your new concat() functions ignores NULLs,
I think it is not so bad for array_to_string() to ignore NULLs.

--
Itagaki Takahiro

#4Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#2)

some note

2010/7/12 Pavel Stehule <pavel.stehule@gmail.com>:

2010/7/12 Itagaki Takahiro <itagaki.takahiro@gmail.com>:

https://commitfest.postgresql.org/action/patch_view?id=300

Why did you add to_string() and to_array() functions though we already
have string_to_array() and array_to_string() functions?  I prefer adding
three arguments version of string_to_array() instead of to_array().
Please notice me if you think to_string() and to_array() are better names
for the feature. For example, compatibility for other databases.

I prefere a new names  - because there are a new behave - with little
bit better default handling of NULL values. string_to_array and
array_to_string just ignore NULL values - what isn't correct behave.

it is related to time where pg arrays doesn't support a NULL. From 8.3
pg array can have a NULL values, but there wasn't any equal changes to
string_to_array and array_to_string functions - so these functions are
not "actual".

pavel

Show quoted text

Later we can mark these functions as deprecated and remove it. If I
use current function, then we have to continue in current behave.

* string_to_array( str text, sep text, nullstr text DEFAULT NULL )
is compatible with the existing  string_to_array( str, sep ), and
"nullstr => 'NULL'" will be same as your to_array().

* array_to_string( arr anyarray, sep text, nullstr text DEFAULT NULL )
is compatible with the existing  array_to_string(); separator also ignored
when nullstr is NULL. "nullstr => ''" (an empty string) will be same as
your to_array().

so reason for these new names are different default behave. And we
can't to change of default behave of existing functions.

Regards

Pavel Stehule

--
Itagaki Takahiro

#5Pavel Stehule
pavel.stehule@gmail.com
In reply to: Itagaki Takahiro (#3)

2010/7/12 Itagaki Takahiro <itagaki.takahiro@gmail.com>:

2010/7/12 Pavel Stehule <pavel.stehule@gmail.com>:

I prefere a new names  - because there are a new behave - with little
bit better default handling of NULL values. string_to_array and
array_to_string just ignore NULL values - what isn't correct behave.
Later we can mark these functions as deprecated and remove it. If I
use current function, then we have to continue in current behave.

I prefer existing names because your new default behavior can be done
with suitable nullstr values. IMHO, new names will be acceptable only if
they are listed in the SQL-standard or many other databases use the
names. Two similar versions of functions must confuse users.

there is different default behave. So if you don't need to use a third argument

Also, are there any consensus about "existing functions are not correct" ?
Since string_agg() and your new concat() functions ignores NULLs,
I think it is not so bad for array_to_string() to ignore NULLs.

string_agg is a aggregate function - there are NULLS ignored usually,
concat simulate MySQL behave - and more, there are not problem to use
a coalesce function. string_to_arrays and array_to string are
different - there you cannot use a coalesce. Why string_to_array and
array_to_strings are not correct? a) what is correct sample of using a
array_to_string with NULL ignoring?? Usually, when you have a NULL in
array, you don't want to loose this value. b) for me - these functions
are some of serialisation/deserialisation functions - usually people
don't want to miss any value.

I searching in history - my first proposal was similar to your:

http://www.mail-archive.com/pgsql-hackers@postgresql.org/msg151474.html
http://www.mail-archive.com/pgsql-hackers@postgresql.org/msg151503.html !!

if you look on this thread, you can see so I was unsure and confused
too - but now I inclinded to Merlin's proposal

shortly:
* string_to_array/array_to_string ignore nulls
* others not aggregates not ignore nulls
* default for NULL isn't "NULL" but empty string - like csv

regards

Pavel Stěhule

Show quoted text

--
Itagaki Takahiro