Обсуждение: casting in ORDER BY

Поиск
Список
Период
Сортировка

casting in ORDER BY

От
Zdenek Kotala
Дата:
I try to fix foreign_data regression test for Czech locale (HEAD). For
example I replaced

SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2, 3,
4;

with following statement:

SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2,
3::name, 4;

which should use C sorting rules on thirds column, but it look likes
that third column is ignored. See diff:

  (4 rows)

  SET ROLE regress_test_role;
! SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2, 3, 4;
   authorization_identifier | foreign_server_catalog | foreign_server_name | option_name | option_value
  --------------------------+------------------------+---------------------+-------------+--------------
   PUBLIC                   | regression             | st1                 | modified    | 1
   regress_test_role        | regression             | s5                  | modified    | 1
-  regress_test_role        | regression             | s6                  | username    | test
   regress_test_role        | regression             | st1                 | password    | boo
   regress_test_role        | regression             | st1                 | username    | bob
  (5 rows)

--- 711,723 ----
  (4 rows)

  SET ROLE regress_test_role;
! SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2, 3::name, 4;
   authorization_identifier | foreign_server_catalog | foreign_server_name | option_name | option_value
  --------------------------+------------------------+---------------------+-------------+--------------
   PUBLIC                   | regression             | st1                 | modified    | 1
   regress_test_role        | regression             | s5                  | modified    | 1
   regress_test_role        | regression             | st1                 | password    | boo
+  regress_test_role        | regression             | s6                  | username    | test
   regress_test_role        | regression             | st1                 | username    | bob
  (5 rows)


Is it bug or I overlook something?

    Zdenek

PS: Regression test patch is attached.





Вложения

Re: casting in ORDER BY

От
Tom Lane
Дата:
Zdenek Kotala <Zdenek.Kotala@Sun.COM> writes:
> I try to fix foreign_data regression test for Czech locale (HEAD). For
> example I replaced 
> SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2, 3,
> 4;
> with following statement:
> SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2,
> 3::name, 4;

That means something like '3'::name, ie it's a constant.  You'd need
to reference the actual column name.
        regards, tom lane

PS: I'm still of the opinion that it's a bad idea to commit to keeping
all the regression tests independent of whether digits sort before
or after letters.


Re: casting in ORDER BY

От
Zdenek Kotala
Дата:
Tom Lane píše v ne 15. 02. 2009 v 15:51 -0500:
> Zdenek Kotala <Zdenek.Kotala@Sun.COM> writes:
> > I try to fix foreign_data regression test for Czech locale (HEAD). For
> > example I replaced 
> > SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2, 3,
> > 4;
> > with following statement:
> > SELECT * FROM information_schema.user_mapping_options ORDER BY 1, 2,
> > 3::name, 4;
> 
> That means something like '3'::name, ie it's a constant.  You'd need
> to reference the actual column name.

I see, thanks.

>             regards, tom lane
> 
> PS: I'm still of the opinion that it's a bad idea to commit to keeping
> all the regression tests independent of whether digits sort before
> or after letters.

It is not about how digits are sort, but if we will support "all" locale
for regression tests or not. Maybe add directory like
regress/expected/cs_CZ and put variant here. It should help to avoid
misinterpretation in case when result is not valid for other locale.
    Zdenek