Given my recent examination of the src/timezone subtree and the current
code at IANA for timezone information and tools, I proposing the following
changes and would like to first get group consensus on the change prior to
investing any major effort.

My proposal is the have the following directory structure

.../src/timezone - Would have only PostgreSQL specific code
.../src/timezone/tznames - would be unaltered from current (optionally this
could be removed)
.../src/timezone/iana - would contain unaltered code and data from IANA

The .../src/timezone/data directory would be removed.

In doing this, any future updates to the IANA code should be trivial to
incorporate into the postgres tree.

Reasons for change.
1. The current timezone code is based upon, according to the comments,
version 2010c from IANA. IANA's latest code is version 2014e and there are
substantial changes between those versions (as well as 35 intermediate
versions ... Yes, IANA changes and updates the code regularly and
frequently)

2. The current timezone data has a few entries that are not properly
handled by any pre-2013 code so an update of some sort is needed anyway.

3. The latest code from IANA compiles with GCC using a kitchen sink array
of warning options without any generated warnings. This should alleviate
any  concerns about not accepting any code unless it's warning free. In
case anyone is interested, the GCC options are: -Dlint -g3 -O3 -fno-common
-fstrict-aliasing  -Wall -Wextra -Wbad-function-cast -Wcast-align
-Wcast-qual -Wformat=2 -Winit-self -Wmissing-declarations
-Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wno-address
-Wno-cast-qual -Wno-format-nonliteral -Wno-sign-compare
-Wno-sign-conversion -Wno-type-limits -Wno-unused-parameter
-Woverlength-strings -Wpointer-arith -Wshadow -Wstrict-prototypes
-Wsuggest-attribute=const -Wsuggest-attribute=noreturn
-Wsuggest-attribute=pure -Wtrampolines -Wwrite-strings

Aspects of change that I'm not happy with.
1. I would have liked to recommend 2 sub-directories underneath
.../src/timezone/iana named "code" and "data", but unfortunately have to
suggest untarring both the code and data files directly into the iana
directory. The reason for this is that the IANA code does not compile using
the IANA Makefile unless the script yearistype.sh is present and that
script is currently present in the data tar file, not the code tar file.
And that unfortunately means that splitting the IANA code and data into
different directories would violate the objective of being able to deposit
the files unaltered into postgres.

2. Depositing the IANA code unaltered would also deposit some "junk" files
into the directory. The files would mainly consist of man pages and html
files containing documentation for the timezone code. The extra files would
consume approximately 500 kilobytes above what's actually needed, but
otherwise wouldn't have any adverse effects.

Thank you for reading this proposal,
John Cochran
-- 

There are two ways of constructing a software design: One way is to make it
so simple that there are obviously no deficiencies and the other way is to
make it so complicated that there are no obvious deficiencies. — C.A.R.
Hoare

Reply via email to