intarray sort returns wrong result

Started by Junwang Zhaoover 1 year ago3 messageshackers
Jump to latest
#1Junwang Zhao
zhjwpku@gmail.com

Hi Hackers,

While working on general array sort[1]/messages/by-id/CAEG8a3KD7ZmQpxNhfPxyc0BjTTTUXiqb56VuMgB7Muu0+yV=qQ@mail.gmail.com, I played with intarray
extension, found a bug (or at least inconsistency) when sorting
multidimensional int array:

create extension intarray;
select sort('{{1,2,3}, {2,3,4}}');

this returns {{1,2,2},{3,3,4}} instead of {{1,2,3},{2,3,4}}

I think this is misleading, if int array is only for one dimension
array, we should
error out when sorting multidimensional int array. Or we can do something like
attached POC patch to make it work with multidimensional int array.

Thoughts?

[1]: /messages/by-id/CAEG8a3KD7ZmQpxNhfPxyc0BjTTTUXiqb56VuMgB7Muu0+yV=qQ@mail.gmail.com

--
Regards
Junwang Zhao

Attachments:

v1-0001-int-array-support-multi-dim.patchapplication/octet-stream; name=v1-0001-int-array-support-multi-dim.patchDownload+73-4
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Junwang Zhao (#1)
Re: intarray sort returns wrong result

Junwang Zhao <zhjwpku@gmail.com> writes:

While working on general array sort[1], I played with intarray
extension, found a bug (or at least inconsistency) when sorting
multidimensional int array:

create extension intarray;
select sort('{{1,2,3}, {2,3,4}}');

this returns {{1,2,2},{3,3,4}} instead of {{1,2,3},{2,3,4}}

This is documented, isn't it?

Many of these operations are only sensible for one-dimensional
arrays. Although they will accept input arrays of more dimensions,
the data is treated as though it were a linear array in storage
order.

I don't think anyone will thank us for changing intarray's behavior
many years after the fact.

regards, tom lane

#3Junwang Zhao
zhjwpku@gmail.com
In reply to: Tom Lane (#2)
Re: intarray sort returns wrong result

On Tue, Nov 12, 2024 at 9:13 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Junwang Zhao <zhjwpku@gmail.com> writes:

While working on general array sort[1], I played with intarray
extension, found a bug (or at least inconsistency) when sorting
multidimensional int array:

create extension intarray;
select sort('{{1,2,3}, {2,3,4}}');

this returns {{1,2,2},{3,3,4}} instead of {{1,2,3},{2,3,4}}

This is documented, isn't it?

Many of these operations are only sensible for one-dimensional
arrays. Although they will accept input arrays of more dimensions,
the data is treated as though it were a linear array in storage
order.

I did not notice this statement, my bad 😞

I don't think anyone will thank us for changing intarray's behavior
many years after the fact.

Agreed. Sorry for the noise.

regards, tom lane

--
Regards
Junwang Zhao