On Fri, Nov 8, 2019 at 12:44 AM Thomas Munro <thomas.mu...@gmail.com> wrote:

>
> Do any Windows hackers want to help get it into shape?  Some things to
> do: test it, verify that the _WIN32_WINNT >= 0x0600 stuff makes sense
> (why do we target such ancient Windows releases anyway?)


You have to keep in mind that  _WIN32_WINNT also applies to MinGW, so any
build with those tools will use a value of 0x0501 and this code will be
ifdef'd out.

As from where this value comes, my take is that it has not been revised in
a long time [1]. Windows 7 , Server 2008 and 2008 R2 support will end next
year [2] [3], maybe you can make a case for updating this value.


> see if there is way we could use GetNLSVersion() (no "Ex") to make this
> work on
> older Windows system


Older systems is just Windows Server 2003, not sure if it is worth any
effort.


> check if it makes sense to assume that
> collcollate is encoded with CP_ACP ("the system default Windows ANSI
> code page", used elsewhere in the PG source tree for a similar
> purpose, but this seems likely to go wrong for locale names that have
> non-ASCII characters, and indeed we see complaints on the lists
> involving the word "Bokmål"), and recommend a better way to display
> the collation version as text.


The GetNLSVersionEx() function uses a "Language tag" value, check Language
Code Identifier (LCID) [4], and these tags are plain ascii.


> To test that it works, you'd need to look at the contents of
> pg_collation to confirm that you see the new version strings, create
> an index on a column that explicitly uses a collation that has a
> version, update the pg_collation table by hand to have a to a
> different value, and then open a new session and to access the index
> to check that you get a warning about the version changing.  The
> warning can be cleared by using ALTER COLLATION ... REFRESH VERSION.
>

The code works as expected with this collation:

postgres=# CREATE COLLATION en_US (LC_COLLATE = 'en-US', LC_CTYPE =
'en-US');
CREATE COLLATION
postgres=# select * from pg_collation;
  oid  | collname  | collnamespace | collowner | collprovider |
collisdeterministic | collencoding | collcollate | collctype | collversion
-------+-----------+---------------+-----------+--------------+---------------------+--------------+-------------+-----------+-------------
   100 | default   |            11 |        10 | d            | t
        |           -1 |             |           |
   950 | C         |            11 |        10 | c            | t
        |           -1 | C           | C         |
   951 | POSIX     |            11 |        10 | c            | t
        |           -1 | POSIX       | POSIX     |
 12326 | ucs_basic |            11 |        10 | c            | t
        |            6 | C           | C         |
 16387 | en_us     |          2200 |        10 | c            | t
        |           24 | en-US       | en-US     | 6020f,6020f
(5 rows)

The error code 87 is an ERROR_INVALID_PARAMETER that is raised when the
collate input does not match a valid tag, I would suggest not returning it
directly.

Regards,

Juan José Santamaría Flecha

[1]
https://www.postgresql.org/message-id/flat/20090907112633.C851.52131E4D%40oss.ntt.co.jp
[2]
https://support.microsoft.com/en-us/help/4456235/end-of-support-for-windows-server-2008-and-windows-server-2008-r2
[3]
https://support.microsoft.com/en-us/help/4057281/windows-7-support-will-end-on-january-14-2020
[4]
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f

Regards,

Juan José Santamaría Flecha

Reply via email to