diff --git a/configure b/configure index 6a8db7ce2c84ba280b5fb3a21acf046ee3d97fa0..bbbe81170acae429c3b86847125e555813c25f8f 100755 --- a/configure +++ b/configure @@ -1473,7 +1473,7 @@ Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-integer-datetimes - disable 64-bit integer date/time support + obsolete option, no longer supported --enable-nls[=LANGUAGES] enable Native Language Support --disable-rpath do not embed shared library search path in @@ -2984,10 +2984,10 @@ fi # -# 64-bit integer date/time storage: enabled by default. +# 64-bit integer date/time storage is now the only option, but to avoid +# unnecessary breakage of build scripts, continue to accept an explicit +# "--enable-integer-datetimes" switch. # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with 64-bit integer date/time support" >&5 -$as_echo_n "checking whether to build with 64-bit integer date/time support... " >&6; } # Check whether --enable-integer-datetimes was given. @@ -2995,12 +2995,10 @@ if test "${enable_integer_datetimes+set}" = set; then : enableval=$enable_integer_datetimes; case $enableval in yes) - -$as_echo "#define USE_INTEGER_DATETIMES 1" >>confdefs.h - + : ;; no) - : + as_fn_error $? "--disable-integer-datetimes is no longer supported" "$LINENO" 5 ;; *) as_fn_error $? "no argument expected for --enable-integer-datetimes option" "$LINENO" 5 @@ -3010,13 +3008,9 @@ $as_echo "#define USE_INTEGER_DATETIMES 1" >>confdefs.h else enable_integer_datetimes=yes -$as_echo "#define USE_INTEGER_DATETIMES 1" >>confdefs.h - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_integer_datetimes" >&5 -$as_echo "$enable_integer_datetimes" >&6; } # diff --git a/configure.in b/configure.in index 01b618c931ddd44e7d40460d86377ef0e27fb394..dab8ab3b328ba9fe749a241cb70421dd7b68fc64 100644 --- a/configure.in +++ b/configure.in @@ -122,13 +122,13 @@ PGAC_ARG_REQ(with, libs, [DIRS], [alternative spelling of --with-libraries] # -# 64-bit integer date/time storage: enabled by default. +# 64-bit integer date/time storage is now the only option, but to avoid +# unnecessary breakage of build scripts, continue to accept an explicit +# "--enable-integer-datetimes" switch. # -AC_MSG_CHECKING([whether to build with 64-bit integer date/time support]) -PGAC_ARG_BOOL(enable, integer-datetimes, yes, [disable 64-bit integer date/time support], - [AC_DEFINE([USE_INTEGER_DATETIMES], 1, - [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])]) -AC_MSG_RESULT([$enable_integer_datetimes]) +PGAC_ARG_BOOL(enable, integer-datetimes, yes, [obsolete option, no longer supported], + [], + [AC_MSG_ERROR([--disable-integer-datetimes is no longer supported])]) # diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 95afc2c483d5e16caaf7665267815f3976aa9e8b..1b390a257ae793410f79920f07ad986b3625f17f 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7695,11 +7695,9 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' </term> <listitem> <para> - Reports whether <productname>PostgreSQL</> was built with - support for 64-bit-integer dates and times. This can be - disabled by configuring with <literal>--disable-integer-datetimes</> - when building <productname>PostgreSQL</>. The default value is - <literal>on</literal>. + Reports whether <productname>PostgreSQL</> was built with support for + 64-bit-integer dates and times. As of <productname>PostgreSQL</> 10, + this is always <literal>on</literal>. </para> </listitem> </varlistentry> diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 387ba53ef091cd8c0e32b14c8350fba3045f92c0..35610307d9a4b0c4ba98971555620b9f67e57a7e 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1580,7 +1580,7 @@ SELECT E'\\xDEADBEEF'; <entry>both date and time (no time zone)</entry> <entry>4713 BC</entry> <entry>294276 AD</entry> - <entry>1 microsecond / 14 digits</entry> + <entry>1 microsecond</entry> </row> <row> <entry><type>timestamp [ (<replaceable>p</replaceable>) ] with time zone</type></entry> @@ -1588,7 +1588,7 @@ SELECT E'\\xDEADBEEF'; <entry>both date and time, with time zone</entry> <entry>4713 BC</entry> <entry>294276 AD</entry> - <entry>1 microsecond / 14 digits</entry> + <entry>1 microsecond</entry> </row> <row> <entry><type>date</type></entry> @@ -1604,15 +1604,15 @@ SELECT E'\\xDEADBEEF'; <entry>time of day (no date)</entry> <entry>00:00:00</entry> <entry>24:00:00</entry> - <entry>1 microsecond / 14 digits</entry> + <entry>1 microsecond</entry> </row> <row> <entry><type>time [ (<replaceable>p</replaceable>) ] with time zone</type></entry> <entry>12 bytes</entry> - <entry>times of day only, with time zone</entry> + <entry>time of day (no date), with time zone</entry> <entry>00:00:00+1459</entry> <entry>24:00:00-1459</entry> - <entry>1 microsecond / 14 digits</entry> + <entry>1 microsecond</entry> </row> <row> <entry><type>interval [ <replaceable>fields</replaceable> ] [ (<replaceable>p</replaceable>) ]</type></entry> @@ -1620,7 +1620,7 @@ SELECT E'\\xDEADBEEF'; <entry>time interval</entry> <entry>-178000000 years</entry> <entry>178000000 years</entry> - <entry>1 microsecond / 14 digits</entry> + <entry>1 microsecond</entry> </row> </tbody> </tgroup> @@ -1643,41 +1643,7 @@ SELECT E'\\xDEADBEEF'; <replaceable>p</replaceable> which specifies the number of fractional digits retained in the seconds field. By default, there is no explicit bound on precision. The allowed range of - <replaceable>p</replaceable> is from 0 to 6 for the - <type>timestamp</type> and <type>interval</type> types. - </para> - - <note> - <para> - When <type>timestamp</> values are stored as eight-byte integers - (currently the default), microsecond precision is available over - the full range of values. In this case, the internal representation - is the number of microseconds before or after midnight 2000-01-01. - When <type>timestamp</> values are stored as double precision - floating-point numbers (a deprecated compile-time option), the - internal representation is the number of seconds before or after - midnight 2000-01-01. With this representation, the effective limit - of precision might be less than 6; in practice, - microsecond precision is achieved for dates within a few - years of 2000-01-01, but the precision degrades for dates further - away. Note that using floating-point datetimes allows a larger - range of <type>timestamp</type> values to be represented than - shown above: from 4713 BC up to 5874897 AD. - </para> - - <para> - The same compile-time option also determines whether - <type>time</type> and <type>interval</type> values are stored as - floating-point numbers or eight-byte integers. In the - floating-point case, large <type>interval</type> values degrade in - precision as the size of the interval increases. - </para> - </note> - - <para> - For the <type>time</type> types, the allowed range of - <replaceable>p</replaceable> is from 0 to 6 when eight-byte integer - storage is used, or from 0 to 10 when floating-point storage is used. + <replaceable>p</replaceable> is from 0 to 6. </para> <para> @@ -1760,9 +1726,10 @@ MINUTE TO SECOND specification giving the number of fractional digits in the seconds field. Precision can be specified for <type>time</type>, <type>timestamp</type>, and - <type>interval</type> types. The allowed values are mentioned - above. If no precision is specified in a constant specification, - it defaults to the precision of the literal value. + <type>interval</type> types, and can range from 0 to 6. + If no precision is specified in a constant specification, + it defaults to the precision of the literal value (but not + more than 6 digits). </para> <sect3> diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index be0931326bc773da681655f9c2ae87fb601e19aa..568995c9f2f160ec623bc85dfe64d6e9c60f19f0 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -955,28 +955,6 @@ su - postgres </listitem> </varlistentry> - <varlistentry> - <term><option>--disable-integer-datetimes</option></term> - <listitem> - <para> - Disable support for 64-bit integer storage for timestamps and - intervals, and store datetime values as floating-point - numbers instead. Floating-point datetime storage was the - default in <productname>PostgreSQL</productname> releases - prior to 8.4, but it is now deprecated, because it does not - support microsecond precision for the full range of - <type>timestamp</type> values. However, integer-based - datetime storage requires a 64-bit integer type. Therefore, - this option can be used when no such type is available, or - for compatibility with applications written for prior - versions of <productname>PostgreSQL</productname>. See - <![%standalone-include[the documentation about datetime datatypes]]> - <![%standalone-ignore[<xref linkend="datatype-datetime">]]> - for more information. - </para> - </listitem> - </varlistentry> - <varlistentry> <term><option>--disable-float4-byval</option></term> <listitem> diff --git a/src/include/c.h b/src/include/c.h index 91e5baa969229116b706c33530986b63943cf9a4..947bd980672230fb48600edc98932d8720a249b3 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -340,10 +340,11 @@ typedef unsigned PG_INT128_TYPE uint128; #define PG_INT64_MAX INT64CONST(0x7FFFFFFFFFFFFFFF) #define PG_UINT64_MAX UINT64CONST(0xFFFFFFFFFFFFFFFF) -/* Select timestamp representation (float8 or int64) */ -#ifdef USE_INTEGER_DATETIMES +/* + * We now always use int64 timestamps, but keep this symbol defined for the + * benefit of external code that might test it. + */ #define HAVE_INT64_TIMESTAMP -#endif /* * Size diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index b9dfdd41c1a3f3e74f0e919f4bfd4d829817d287..8dd73f1d91576ff90aea3db49b689b52a3ab794c 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -831,10 +831,6 @@ (--enable-float8-byval) */ #undef USE_FLOAT8_BYVAL -/* Define to 1 if you want 64-bit integer timestamp and interval support. - (--enable-integer-datetimes) */ -#undef USE_INTEGER_DATETIMES - /* Define to 1 to build with LDAP support. (--with-ldap) */ #undef USE_LDAP diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 199668c18764025dd78d222469327f0269839531..fd1af59839d43939911d3c1423f40cb94347f080 100644 --- a/src/include/pg_config.h.win32 +++ b/src/include/pg_config.h.win32 @@ -625,10 +625,6 @@ /* Define to use /dev/urandom for random number generation */ /* #undef USE_DEV_URANDOM */ -/* Define to 1 if you want 64-bit integer timestamp and interval support. - (--enable-integer-datetimes) */ -/* #undef USE_INTEGER_DATETIMES */ - /* Define to 1 to build with LDAP support. (--with-ldap) */ /* #undef USE_LDAP */ diff --git a/src/interfaces/ecpg/include/ecpg_config.h.in b/src/interfaces/ecpg/include/ecpg_config.h.in index bf99a5e7930cefa10bb0d2536ca246f5fbf24e74..736fb08dba3c162a70e8473fb1df9892be40af5e 100644 --- a/src/interfaces/ecpg/include/ecpg_config.h.in +++ b/src/interfaces/ecpg/include/ecpg_config.h.in @@ -10,10 +10,6 @@ /* Define to 1 if `long long int' works and is 64 bits. */ #undef HAVE_LONG_LONG_INT_64 -/* Define to 1 if you want 64-bit integer timestamp and interval support. - (--enable-integer-datetimes) */ -#undef USE_INTEGER_DATETIMES - /* Define to 1 to build client libraries as thread-safe code. * (--enable-thread-safety) */ #undef ENABLE_THREAD_SAFETY diff --git a/src/interfaces/ecpg/include/pgtypes_interval.h b/src/interfaces/ecpg/include/pgtypes_interval.h index deac6a2e01a1415a42f85c2c265f3c08608f9734..5118ec784d101643cc0c17364dc9fafc2dd18597 100644 --- a/src/interfaces/ecpg/include/pgtypes_interval.h +++ b/src/interfaces/ecpg/include/pgtypes_interval.h @@ -20,9 +20,7 @@ typedef long long int int64; #error must have a working 64-bit integer datatype #endif -#ifdef USE_INTEGER_DATETIMES #define HAVE_INT64_TIMESTAMP -#endif #endif /* C_H */ typedef struct diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c index 4277c2615dac7015e91f2b9cf22acc6f263e954a..b6e77562b2434f9226b744c27dbdd646c7d61ecf 100644 --- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c +++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c @@ -145,10 +145,8 @@ main(void) sprintf(t, "%s %s", dates[i], times[j]); ts1 = PGTYPEStimestamp_from_asc(t, NULL); text = PGTYPEStimestamp_to_asc(ts1); - /* skip outputs sensitive to USE_INTEGER_DATETIMES */ - if (i != 19 || (j != 3 && j != 4)) - printf("TS[%d,%d]: %s\n", - i, j, errno ? "-" : text); + printf("TS[%d,%d]: %s\n", + i, j, errno ? "-" : text); free(text); free(t); } diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout index 941bffbd8158867d40f4ecece7aa6bc7053517b8..0fbcce67b6895941c92da81ff37d58b74195d95f 100644 --- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout +++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout @@ -103,6 +103,8 @@ Date[19]: 0099-01-08 BC (N - F) TS[19,0]: 0099-01-08 00:04:00 BC TS[19,1]: 0099-01-08 01:59:00 BC TS[19,2]: 0099-01-08 13:24:40 BC +TS[19,3]: 0099-01-08 13:24:40.495 BC +TS[19,4]: 0099-01-08 13:24:40.123456 BC Date[20]: - (N - T) Date[21]: - (N - T) interval[0]: @ 1 min diff --git a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc index 0bd1fec109db9ef6b5323b6ae8ea509d862764df..d519305e1881224db039dc0c6e4098bdc6dd82ce 100644 --- a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc +++ b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc @@ -110,10 +110,8 @@ main(void) sprintf(t, "%s %s", dates[i], times[j]); ts1 = PGTYPEStimestamp_from_asc(t, NULL); text = PGTYPEStimestamp_to_asc(ts1); - /* skip outputs sensitive to USE_INTEGER_DATETIMES */ - if (i != 19 || (j != 3 && j != 4)) - printf("TS[%d,%d]: %s\n", - i, j, errno ? "-" : text); + printf("TS[%d,%d]: %s\n", + i, j, errno ? "-" : text); free(text); free(t); } diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index fbf4da3d68fa085595a8e4fca4ada4e60e30e3a2..ff9064f923d040853449bbca5b3698647918381c 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -28,9 +28,6 @@ sub _new $self->DeterminePlatform(); my $bits = $self->{platform} eq 'Win32' ? 32 : 64; - # integer_datetimes is now the default - $options->{integer_datetimes} = 1 - unless exists $options->{integer_datetimes}; $options->{float4byval} = 1 unless exists $options->{float4byval}; $options->{float8byval} = ($bits == 64) @@ -169,8 +166,6 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY print O "#ifndef IGNORE_CONFIGURED_SETTINGS\n"; print O "#define USE_ASSERT_CHECKING 1\n" if ($self->{options}->{asserts}); - print O "#define USE_INTEGER_DATETIMES 1\n" - if ($self->{options}->{integer_datetimes}); print O "#define USE_LDAP 1\n" if ($self->{options}->{ldap}); print O "#define HAVE_LIBZ 1\n" if ($self->{options}->{zlib}); print O "#define USE_OPENSSL 1\n" if ($self->{options}->{openssl}); @@ -427,8 +422,6 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY #define HAVE_LONG_LONG_INT_64 #define ENABLE_THREAD_SAFETY 1 EOF - print O "#define USE_INTEGER_DATETIMES 1\n" - if ($self->{options}->{integer_datetimes}); print O "#endif\n"; close(O); } @@ -661,8 +654,6 @@ sub GetFakeConfigure my $cfg = '--enable-thread-safety'; $cfg .= ' --enable-cassert' if ($self->{options}->{asserts}); - $cfg .= ' --enable-integer-datetimes' - if ($self->{options}->{integer_datetimes}); $cfg .= ' --enable-nls' if ($self->{options}->{nls}); $cfg .= ' --enable-tap-tests' if ($self->{options}->{tap_tests}); $cfg .= ' --with-ldap' if ($self->{options}->{ldap}); diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl index f046687bd0695207cb92f8ddbe06ccaa34bc7674..97f1af8b49ef3b03df1933023f0eaef59756fd67 100644 --- a/src/tools/msvc/config_default.pl +++ b/src/tools/msvc/config_default.pl @@ -4,7 +4,6 @@ use warnings; our $config = { asserts => 0, # --enable-cassert - # integer_datetimes=>1, # --enable-integer-datetimes - on is now default # float4byval=>1, # --disable-float4-byval, on by default # float8byval=> $platformbits == 64, # --disable-float8-byval,