Hi Aleksander, On Tue, Oct 29, 2024 at 12:48 AM Aleksander Alekseev <aleksan...@timescale.com> wrote: > > Hi, > > > Based on the previous discussion, I split it into two patches in V8. > > > > 0001 is the general sort part without `is_ascending` or `nulls_first`, > > the sort order is determined by the "<" operator of the element type. > > It also cached the type entry of both eletyp and the corresponding > > array type. > > > > 0002 adds the `is_ascending` and `nulls_first` part, it now uses > > two boolean parameters instead of parsing one text parameter. > > Thanks for the update patch set. Here are some comments. > > 0001: > > > +{ oid => '8810', descr => 'sort array', > > + proname => 'array_sort', provolatile => 'v', prorettype => 'anyarray', > > + proargtypes => 'anyarray', prosrc => 'array_sort'}, > > I would expect that array_sort() should be IMMUTABLE. Is there a > reason for it to be VOLATILE?
I saw Jian's reply about this, but I tend to agree with you, so remove provolatile => 'v'. > > > + <function>array_sort</function> ( <type>anyarray</type> <optional> > > COLLATE <replaceable>collation_name</replaceable> </optional>) > > + <returnvalue>anyarray</returnvalue> > > It seems to me that the part about using COLLATE should be moved > below, to the description / examples section, since it's not part of > the function signature. Agree, fixed with my own words, help needed with the wording. > > Also the description should be more specific about how NULLs are > sorted. NULLs also should be covered by tests. Fixed. > > 0002: > > > <parameter>is_ascending</parameter> > > I really believe this name is not the best one. I suggest using > `reverse => true`. `nulls_first` is OK. Not sure about this, I think `is_ascending` has a more precise meaning, while `reverse` doesn't show any hint about ascending or descending, just keep it right now, let's see others' opinions. > > > +Datum > > +array_sort_order(PG_FUNCTION_ARGS) > > +{ > > + return array_sort(fcinfo); > > +} > > + > > +Datum > > +array_sort_order_nulls_first(PG_FUNCTION_ARGS) > > +{ > > + return array_sort(fcinfo); > > +} > > Any reason not to specify array_sort in pg_proc.dat? It is specified in 0001 (see oid => '8810'). > > The tests cover is_ascending => true | false, which is OK, but only > (is_ascending = true, nulls_first => true) and (is_ascending => false, > nulls_fist => false). For the case when both optional arguments are > specified you have to test at least 4 combinations. The omitted two is the same as the two with two parameters specified, anyway, add all 4 cases in v9. > > -- > Best regards, > Aleksander Alekseev -- Regards Junwang Zhao
v9-0002-support-sort-order-and-nullsfirst-flag.patch
Description: Binary data
v9-0001-general-purpose-array_sort.patch
Description: Binary data