From e009755a160d3d67900c80c9bc17276e27f79baa Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 31 Oct 2019 09:21:38 +0100 Subject: [PATCH 1/3] Remove configure --disable-float4-byval and --disable-float8-byval These build options were only useful to maintain compatibility for version-0 functions, but those are no longer supported, so these options can be removed. float4 is now always pass-by-value; the pass-by-reference code path is completely removed. float8 and related types are now hardcoded to pass-by-value or pass-by-reference depending on whether the build is 64- or 32-bit, as was previously also the default. --- configure | 118 ------------------------ configure.in | 33 ------- doc/src/sgml/func.sgml | 10 -- doc/src/sgml/installation.sgml | 28 ------ src/backend/access/index/indexam.c | 5 - src/backend/access/transam/xlog.c | 35 ------- src/backend/bootstrap/bootstrap.c | 2 +- src/backend/catalog/genbki.pl | 2 +- src/backend/commands/analyze.c | 2 +- src/backend/utils/adt/numeric.c | 5 +- src/backend/utils/fmgr/dfmgr.c | 18 ---- src/backend/utils/fmgr/fmgr.c | 23 +---- src/backend/utils/misc/pg_controldata.c | 18 +--- src/bin/initdb/initdb.c | 3 - src/bin/pg_controldata/pg_controldata.c | 4 - src/bin/pg_resetwal/pg_resetwal.c | 6 -- src/bin/pg_upgrade/controldata.c | 7 ++ src/include/c.h | 15 +++ src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_control.h | 6 +- src/include/catalog/pg_proc.dat | 6 +- src/include/catalog/pg_type.dat | 2 +- src/include/fmgr.h | 4 - src/include/pg_config.h.in | 15 --- src/include/postgres.h | 23 +---- src/tools/msvc/Solution.pm | 25 ----- src/tools/msvc/config_default.pl | 5 - 27 files changed, 40 insertions(+), 382 deletions(-) diff --git a/configure b/configure index 6b1c779ee3..b38ad1526d 100755 --- a/configure +++ b/configure @@ -866,8 +866,6 @@ with_system_tzdata with_zlib with_gnu_ld enable_largefile -enable_float4_byval -enable_float8_byval ' ac_precious_vars='build_alias host_alias @@ -1525,8 +1523,6 @@ Optional Features: --enable-cassert enable assertion checks (for debugging) --disable-thread-safety disable thread-safety in client libraries --disable-largefile omit support for large files - --disable-float4-byval disable float4 passed by value - --disable-float8-byval disable float8 passed by value Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -16801,120 +16797,6 @@ _ACEOF -# Decide whether float4 is passed by value: user-selectable, enabled by default -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with float4 passed by value" >&5 -$as_echo_n "checking whether to build with float4 passed by value... " >&6; } - - -# Check whether --enable-float4-byval was given. -if test "${enable_float4_byval+set}" = set; then : - enableval=$enable_float4_byval; - case $enableval in - yes) - -$as_echo "#define USE_FLOAT4_BYVAL 1" >>confdefs.h - - float4passbyval=true - ;; - no) - float4passbyval=false - ;; - *) - as_fn_error $? "no argument expected for --enable-float4-byval option" "$LINENO" 5 - ;; - esac - -else - enable_float4_byval=yes - -$as_echo "#define USE_FLOAT4_BYVAL 1" >>confdefs.h - - float4passbyval=true -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_float4_byval" >&5 -$as_echo "$enable_float4_byval" >&6; } - -cat >>confdefs.h <<_ACEOF -#define FLOAT4PASSBYVAL $float4passbyval -_ACEOF - - -# Decide whether float8 is passed by value. -# Note: this setting also controls int8 and related types such as timestamp. -# If sizeof(Datum) >= 8, this is user-selectable, enabled by default. -# If not, trying to select it is an error. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with float8 passed by value" >&5 -$as_echo_n "checking whether to build with float8 passed by value... " >&6; } -if test $ac_cv_sizeof_void_p -ge 8 ; then - - -# Check whether --enable-float8-byval was given. -if test "${enable_float8_byval+set}" = set; then : - enableval=$enable_float8_byval; - case $enableval in - yes) - : - ;; - no) - : - ;; - *) - as_fn_error $? "no argument expected for --enable-float8-byval option" "$LINENO" 5 - ;; - esac - -else - enable_float8_byval=yes - -fi - - -else - - -# Check whether --enable-float8-byval was given. -if test "${enable_float8_byval+set}" = set; then : - enableval=$enable_float8_byval; - case $enableval in - yes) - : - ;; - no) - : - ;; - *) - as_fn_error $? "no argument expected for --enable-float8-byval option" "$LINENO" 5 - ;; - esac - -else - enable_float8_byval=no - -fi - - - if test "$enable_float8_byval" = yes ; then - as_fn_error $? "--enable-float8-byval is not supported on 32-bit platforms." "$LINENO" 5 - fi -fi -if test "$enable_float8_byval" = yes ; then - -$as_echo "#define USE_FLOAT8_BYVAL 1" >>confdefs.h - - float8passbyval=true -else - float8passbyval=false -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_float8_byval" >&5 -$as_echo "$enable_float8_byval" >&6; } - -cat >>confdefs.h <<_ACEOF -#define FLOAT8PASSBYVAL $float8passbyval -_ACEOF - - # Determine memory alignment requirements for the basic C data types. # The cast to long int works around a bug in the HP C Compiler, diff --git a/configure.in b/configure.in index 2b9025cac3..73d55ae48d 100644 --- a/configure.in +++ b/configure.in @@ -1931,39 +1931,6 @@ AC_CHECK_SIZEOF([void *]) AC_CHECK_SIZEOF([size_t]) AC_CHECK_SIZEOF([long]) -# Decide whether float4 is passed by value: user-selectable, enabled by default -AC_MSG_CHECKING([whether to build with float4 passed by value]) -PGAC_ARG_BOOL(enable, float4-byval, yes, [disable float4 passed by value], - [AC_DEFINE([USE_FLOAT4_BYVAL], 1, - [Define to 1 if you want float4 values to be passed by value. (--enable-float4-byval)]) - float4passbyval=true], - [float4passbyval=false]) -AC_MSG_RESULT([$enable_float4_byval]) -AC_DEFINE_UNQUOTED([FLOAT4PASSBYVAL], [$float4passbyval], [float4 values are passed by value if 'true', by reference if 'false']) - -# Decide whether float8 is passed by value. -# Note: this setting also controls int8 and related types such as timestamp. -# If sizeof(Datum) >= 8, this is user-selectable, enabled by default. -# If not, trying to select it is an error. -AC_MSG_CHECKING([whether to build with float8 passed by value]) -if test $ac_cv_sizeof_void_p -ge 8 ; then - PGAC_ARG_BOOL(enable, float8-byval, yes, [disable float8 passed by value]) -else - PGAC_ARG_BOOL(enable, float8-byval, no, [disable float8 passed by value]) - if test "$enable_float8_byval" = yes ; then - AC_MSG_ERROR([--enable-float8-byval is not supported on 32-bit platforms.]) - fi -fi -if test "$enable_float8_byval" = yes ; then - AC_DEFINE([USE_FLOAT8_BYVAL], 1, - [Define to 1 if you want float8, int8, etc values to be passed by value. (--enable-float8-byval)]) - float8passbyval=true -else - float8passbyval=false -fi -AC_MSG_RESULT([$enable_float8_byval]) -AC_DEFINE_UNQUOTED([FLOAT8PASSBYVAL], [$float8passbyval], [float8, int8, and related values are passed by value if 'true', by reference if 'false']) - # Determine memory alignment requirements for the basic C data types. AC_CHECK_ALIGNOF(short) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 28eb322f3f..e4ae12f874 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -19964,16 +19964,6 @@ <function>pg_control_init</function> Columns integer - - float4_pass_by_value - boolean - - - - float8_pass_by_value - boolean - - data_page_checksum_version integer diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index d8494e293b..9c10a897f1 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -1204,34 +1204,6 @@ Anti-Features - - - - - Disable passing float4 values by value, causing them - to be passed by reference instead. This option costs - performance, but may be needed for compatibility with very old - user-defined functions written in C. - - - - - - - - - Disable passing float8 values by value, causing them - to be passed by reference instead. This option costs - performance, but may be needed for compatibility with very old - user-defined functions written in C. - Note that this option affects not only float8, but also int8 and some - related types such as timestamp. - On 32-bit platforms, is the default - and it is not allowed to select . - - - - diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 9dfa0ddfbb..4af418287d 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -879,11 +879,6 @@ index_store_float8_orderby_distances(IndexScanDesc scan, Oid *orderByTypes, else if (orderByTypes[i] == FLOAT4OID) { /* convert distance function's result to ORDER BY type */ -#ifndef USE_FLOAT4_BYVAL - /* must free any old value to avoid memory leakage */ - if (!scan->xs_orderbynulls[i]) - pfree(DatumGetPointer(scan->xs_orderbyvals[i])); -#endif if (distances && !distances[i].isnull) { scan->xs_orderbyvals[i] = Float4GetDatum((float4) distances[i].value); diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 2e3cc51006..27f2c6bbe2 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -4516,9 +4516,6 @@ WriteControlFile(void) ControlFile->toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE; ControlFile->loblksize = LOBLKSIZE; - ControlFile->float4ByVal = FLOAT4PASSBYVAL; - ControlFile->float8ByVal = FLOAT8PASSBYVAL; - /* Contents are protected with a CRC */ INIT_CRC32C(ControlFile->crc); COMP_CRC32C(ControlFile->crc, @@ -4720,38 +4717,6 @@ ReadControlFile(void) ControlFile->loblksize, (int) LOBLKSIZE), errhint("It looks like you need to recompile or initdb."))); -#ifdef USE_FLOAT4_BYVAL - if (ControlFile->float4ByVal != true) - ereport(FATAL, - (errmsg("database files are incompatible with server"), - errdetail("The database cluster was initialized without USE_FLOAT4_BYVAL" - " but the server was compiled with USE_FLOAT4_BYVAL."), - errhint("It looks like you need to recompile or initdb."))); -#else - if (ControlFile->float4ByVal != false) - ereport(FATAL, - (errmsg("database files are incompatible with server"), - errdetail("The database cluster was initialized with USE_FLOAT4_BYVAL" - " but the server was compiled without USE_FLOAT4_BYVAL."), - errhint("It looks like you need to recompile or initdb."))); -#endif - -#ifdef USE_FLOAT8_BYVAL - if (ControlFile->float8ByVal != true) - ereport(FATAL, - (errmsg("database files are incompatible with server"), - errdetail("The database cluster was initialized without USE_FLOAT8_BYVAL" - " but the server was compiled with USE_FLOAT8_BYVAL."), - errhint("It looks like you need to recompile or initdb."))); -#else - if (ControlFile->float8ByVal != false) - ereport(FATAL, - (errmsg("database files are incompatible with server"), - errdetail("The database cluster was initialized with USE_FLOAT8_BYVAL" - " but the server was compiled without USE_FLOAT8_BYVAL."), - errhint("It looks like you need to recompile or initdb."))); -#endif - wal_segment_size = ControlFile->xlog_seg_size; if (!IsValidWalSegSize(wal_segment_size)) diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 9238fbe98d..8ea033610d 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -111,7 +111,7 @@ static const struct typinfo TypInfo[] = { F_INT2IN, F_INT2OUT}, {"int4", INT4OID, 0, 4, true, 'i', 'p', InvalidOid, F_INT4IN, F_INT4OUT}, - {"float4", FLOAT4OID, 0, 4, FLOAT4PASSBYVAL, 'i', 'p', InvalidOid, + {"float4", FLOAT4OID, 0, 4, true, 'i', 'p', InvalidOid, F_FLOAT4IN, F_FLOAT4OUT}, {"name", NAMEOID, CHAROID, NAMEDATALEN, false, 'c', 'p', C_COLLATION_OID, F_NAMEIN, F_NAMEOUT}, diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 201d12d358..6eff045bd9 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -890,7 +890,7 @@ sub morph_row_for_schemapg } # Expand booleans from 'f'/'t' to 'false'/'true'. - # Some values might be other macros (eg FLOAT4PASSBYVAL), + # Some values might be other macros (eg FLOAT8PASSBYVAL), # don't change. elsif ($atttype eq 'bool') { diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 7accb950eb..71372ceb16 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1496,7 +1496,7 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats) /* XXX knows more than it should about type float4: */ arry = construct_array(numdatums, nnum, FLOAT4OID, - sizeof(float4), FLOAT4PASSBYVAL, 'i'); + sizeof(float4), true, 'i'); values[i++] = PointerGetDatum(arry); /* stanumbersN */ } else diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index a00db3ce7a..21cc9a8109 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -351,8 +351,9 @@ typedef struct NumericSumAccum /* * We define our own macros for packing and unpacking abbreviated-key * representations for numeric values in order to avoid depending on - * USE_FLOAT8_BYVAL. The type of abbreviation we use is based only on - * the size of a datum, not the argument-passing convention for float8. + * USE_FLOAT8_BYVAL, which was previously build-time configurable. The type + * of abbreviation we use is based only on the size of a datum, not the + * argument-passing convention for float8. */ #define NUMERIC_ABBREV_BITS (SIZEOF_DATUM * BITS_PER_BYTE) #if SIZEOF_DATUM == 8 diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c index be684786d6..589371942f 100644 --- a/src/backend/utils/fmgr/dfmgr.c +++ b/src/backend/utils/fmgr/dfmgr.c @@ -365,24 +365,6 @@ incompatible_module_error(const char *libname, magic_data.namedatalen, module_magic_data->namedatalen); } - if (module_magic_data->float4byval != magic_data.float4byval) - { - if (details.len) - appendStringInfoChar(&details, '\n'); - appendStringInfo(&details, - _("Server has FLOAT4PASSBYVAL = %s, library has %s."), - magic_data.float4byval ? "true" : "false", - module_magic_data->float4byval ? "true" : "false"); - } - if (module_magic_data->float8byval != magic_data.float8byval) - { - if (details.len) - appendStringInfoChar(&details, '\n'); - appendStringInfo(&details, - _("Server has FLOAT8PASSBYVAL = %s, library has %s."), - magic_data.float8byval ? "true" : "false", - module_magic_data->float8byval ? "true" : "false"); - } if (details.len == 0) appendStringInfoString(&details, diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index 099ebd779b..c2eaa6178d 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -1683,13 +1683,7 @@ OidSendFunctionCall(Oid functionId, Datum val) /*------------------------------------------------------------------------- * Support routines for standard maybe-pass-by-reference datatypes * - * int8, float4, and float8 can be passed by value if Datum is wide enough. - * (For backwards-compatibility reasons, we allow pass-by-ref to be chosen - * at compile time even if pass-by-val is possible.) - * - * Note: there is only one switch controlling the pass-by-value option for - * both int8 and float8; this is to avoid making things unduly complicated - * for the timestamp types, which might have either representation. + * int8 and float8 can be passed by value if Datum is wide enough. *------------------------------------------------------------------------- */ @@ -1703,21 +1697,6 @@ Int64GetDatum(int64 X) *retval = X; return PointerGetDatum(retval); } -#endif /* USE_FLOAT8_BYVAL */ - -#ifndef USE_FLOAT4_BYVAL - -Datum -Float4GetDatum(float4 X) -{ - float4 *retval = (float4 *) palloc(sizeof(float4)); - - *retval = X; - return PointerGetDatum(retval); -} -#endif - -#ifndef USE_FLOAT8_BYVAL Datum Float8GetDatum(float8 X) diff --git a/src/backend/utils/misc/pg_controldata.c b/src/backend/utils/misc/pg_controldata.c index b42921800b..330c210407 100644 --- a/src/backend/utils/misc/pg_controldata.c +++ b/src/backend/utils/misc/pg_controldata.c @@ -264,8 +264,8 @@ pg_control_recovery(PG_FUNCTION_ARGS) Datum pg_control_init(PG_FUNCTION_ARGS) { - Datum values[12]; - bool nulls[12]; + Datum values[10]; + bool nulls[10]; TupleDesc tupdesc; HeapTuple htup; ControlFileData *ControlFile; @@ -294,11 +294,7 @@ pg_control_init(PG_FUNCTION_ARGS) INT4OID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 9, "large_object_chunk_size", INT4OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 10, "float4_pass_by_value", - BOOLOID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 11, "float8_pass_by_value", - BOOLOID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 12, "data_page_checksum_version", + TupleDescInitEntry(tupdesc, (AttrNumber) 10, "data_page_checksum_version", INT4OID, -1, 0); tupdesc = BlessTupleDesc(tupdesc); @@ -335,15 +331,9 @@ pg_control_init(PG_FUNCTION_ARGS) values[8] = Int32GetDatum(ControlFile->loblksize); nulls[8] = false; - values[9] = BoolGetDatum(ControlFile->float4ByVal); + values[9] = Int32GetDatum(ControlFile->data_checksum_version); nulls[9] = false; - values[10] = BoolGetDatum(ControlFile->float8ByVal); - nulls[10] = false; - - values[11] = Int32GetDatum(ControlFile->data_checksum_version); - nulls[11] = false; - htup = heap_form_tuple(tupdesc, values, nulls); PG_RETURN_DATUM(HeapTupleGetDatum(htup)); diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 88a261d9bd..1f6d8939be 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1399,9 +1399,6 @@ bootstrap_template1(void) bki_lines = replace_token(bki_lines, "ALIGNOF_POINTER", (sizeof(Pointer) == 4) ? "i" : "d"); - bki_lines = replace_token(bki_lines, "FLOAT4PASSBYVAL", - FLOAT4PASSBYVAL ? "true" : "false"); - bki_lines = replace_token(bki_lines, "FLOAT8PASSBYVAL", FLOAT8PASSBYVAL ? "true" : "false"); diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c index b14767f8b6..a2611c253c 100644 --- a/src/bin/pg_controldata/pg_controldata.c +++ b/src/bin/pg_controldata/pg_controldata.c @@ -327,10 +327,6 @@ main(int argc, char *argv[]) /* This is no longer configurable, but users may still expect to see it: */ printf(_("Date/time type storage: %s\n"), _("64-bit integers")); - printf(_("Float4 argument passing: %s\n"), - (ControlFile->float4ByVal ? _("by value") : _("by reference"))); - printf(_("Float8 argument passing: %s\n"), - (ControlFile->float8ByVal ? _("by value") : _("by reference"))); printf(_("Data page checksum version: %u\n"), ControlFile->data_checksum_version); printf(_("Mock authentication nonce: %s\n"), diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c index c4ee0168a9..201fcde2cd 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -722,8 +722,6 @@ GuessControlValues(void) ControlFile.indexMaxKeys = INDEX_MAX_KEYS; ControlFile.toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE; ControlFile.loblksize = LOBLKSIZE; - ControlFile.float4ByVal = FLOAT4PASSBYVAL; - ControlFile.float8ByVal = FLOAT8PASSBYVAL; /* * XXX eventually, should try to grovel through old XLOG to develop more @@ -801,10 +799,6 @@ PrintControlValues(bool guessed) /* This is no longer configurable, but users may still expect to see it: */ printf(_("Date/time type storage: %s\n"), _("64-bit integers")); - printf(_("Float4 argument passing: %s\n"), - (ControlFile.float4ByVal ? _("by value") : _("by reference"))); - printf(_("Float8 argument passing: %s\n"), - (ControlFile.float8ByVal ? _("by value") : _("by reference"))); printf(_("Data page checksum version: %u\n"), ControlFile.data_checksum_version); } diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c index 93f3c34b74..85e22283a6 100644 --- a/src/bin/pg_upgrade/controldata.c +++ b/src/bin/pg_upgrade/controldata.c @@ -202,6 +202,13 @@ get_control_data(ClusterInfo *cluster, bool live_check) got_data_checksum_version = true; } + /* This is no longer configurable. */ + if (GET_MAJOR_VERSION(cluster->major_version) >= 1300) + { + cluster->controldata.float8_pass_by_value = FLOAT8PASSBYVAL; + got_float8_pass_by_value = true; + } + /* we have the result of cmd in "output". so parse it line by line now */ while (fgets(bufin, sizeof(bufin), output)) { diff --git a/src/include/c.h b/src/include/c.h index d752cc07dc..ab9cb73a4c 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -490,6 +490,21 @@ typedef signed int Offset; typedef float float4; typedef double float8; +/* + * Decide whether 8-byte types are passed by value. This controls the titular + * float8 but also int8 and related types such as timestamp. + * + * This is defined here instead of, say, postgres.h, so that initdb.c can see + * it. + */ +#if SIZEOF_VOID_P >= 8 +#define FLOAT8PASSBYVAL true +#define USE_FLOAT8_BYVAL 1 +#else +#define FLOAT8PASSBYVAL false +#undef USE_FLOAT8_BYVAL +#endif + /* * Oid, RegProcedure, TransactionId, SubTransactionId, MultiXactId, * CommandId diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 1f6de76e9c..37c52ddd38 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201910251 +#define CATALOG_VERSION_NO 201910311 #endif diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h index ff98d9e91a..19208aefd8 100644 --- a/src/include/catalog/pg_control.h +++ b/src/include/catalog/pg_control.h @@ -22,7 +22,7 @@ /* Version identifier for this pg_control format */ -#define PG_CONTROL_VERSION 1201 +#define PG_CONTROL_VERSION 1202 /* Nonce key length, see below */ #define MOCK_AUTH_NONCE_LEN 32 @@ -214,10 +214,6 @@ typedef struct ControlFileData uint32 toast_max_chunk_size; /* chunk size in TOAST tables */ uint32 loblksize; /* chunk size in pg_largeobject */ - /* flags indicating pass-by-value status of various types */ - bool float4ByVal; /* float4 pass-by-value? */ - bool float8ByVal; /* float8, int8, etc pass-by-value? */ - /* Are data pages protected by checksums? Zero if no checksum version */ uint32 data_checksum_version; diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 58ea5b982b..4d4f119268 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10660,9 +10660,9 @@ descr => 'pg_controldata init state information as a function', proname => 'pg_control_init', provolatile => 'v', prorettype => 'record', proargtypes => '', - proallargtypes => '{int4,int4,int4,int4,int4,int4,int4,int4,int4,bool,bool,int4}', - proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o}', - proargnames => '{max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,float4_pass_by_value,float8_pass_by_value,data_page_checksum_version}', + proallargtypes => '{int4,int4,int4,int4,int4,int4,int4,int4,int4,int4}', + proargmodes => '{o,o,o,o,o,o,o,o,o,o}', + proargnames => '{max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,data_page_checksum_version}', prosrc => 'pg_control_init' }, # collation management functions diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat index be49e00114..d9b35af914 100644 --- a/src/include/catalog/pg_type.dat +++ b/src/include/catalog/pg_type.dat @@ -215,7 +215,7 @@ { oid => '700', array_type_oid => '1021', descr => 'single-precision floating point number, 4-byte storage', - typname => 'float4', typlen => '4', typbyval => 'FLOAT4PASSBYVAL', + typname => 'float4', typlen => '4', typbyval => 't', typcategory => 'N', typinput => 'float4in', typoutput => 'float4out', typreceive => 'float4recv', typsend => 'float4send', typalign => 'i' }, { oid => '701', array_type_oid => '1022', diff --git a/src/include/fmgr.h b/src/include/fmgr.h index 29ae4674cc..838d43875a 100644 --- a/src/include/fmgr.h +++ b/src/include/fmgr.h @@ -446,8 +446,6 @@ typedef struct int funcmaxargs; /* FUNC_MAX_ARGS */ int indexmaxkeys; /* INDEX_MAX_KEYS */ int namedatalen; /* NAMEDATALEN */ - int float4byval; /* FLOAT4PASSBYVAL */ - int float8byval; /* FLOAT8PASSBYVAL */ } Pg_magic_struct; /* The actual data block contents */ @@ -458,8 +456,6 @@ typedef struct FUNC_MAX_ARGS, \ INDEX_MAX_KEYS, \ NAMEDATALEN, \ - FLOAT4PASSBYVAL, \ - FLOAT8PASSBYVAL \ } /* diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 939245db39..97552d63d0 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -70,13 +70,6 @@ MSVC and with C++ compilers. */ #undef FLEXIBLE_ARRAY_MEMBER -/* float4 values are passed by value if 'true', by reference if 'false' */ -#undef FLOAT4PASSBYVAL - -/* float8, int8, and related values are passed by value if 'true', by - reference if 'false' */ -#undef FLOAT8PASSBYVAL - /* Define to 1 if gettimeofday() takes only 1 argument. */ #undef GETTIMEOFDAY_1ARG @@ -898,14 +891,6 @@ /* Define to use /dev/urandom for random number generation */ #undef USE_DEV_URANDOM -/* Define to 1 if you want float4 values to be passed by value. - (--enable-float4-byval) */ -#undef USE_FLOAT4_BYVAL - -/* Define to 1 if you want float8, int8, etc values to be passed by value. - (--enable-float8-byval) */ -#undef USE_FLOAT8_BYVAL - /* Define to build with ICU support. (--with-icu) */ #undef USE_ICU diff --git a/src/include/postgres.h b/src/include/postgres.h index 057a3413ac..f5b7c52f8a 100644 --- a/src/include/postgres.h +++ b/src/include/postgres.h @@ -659,11 +659,7 @@ extern Datum Int64GetDatum(int64 X); /* * DatumGetFloat4 * Returns 4-byte floating point value of a datum. - * - * Note: this macro hides whether float4 is pass by value or by reference. */ - -#ifdef USE_FLOAT4_BYVAL static inline float4 DatumGetFloat4(Datum X) { @@ -676,18 +672,11 @@ DatumGetFloat4(Datum X) myunion.value = DatumGetInt32(X); return myunion.retval; } -#else -#define DatumGetFloat4(X) (* ((float4 *) DatumGetPointer(X))) -#endif /* * Float4GetDatum * Returns datum representation for a 4-byte floating point number. - * - * Note: if float4 is pass by reference, this function returns a reference - * to palloc'd space. */ -#ifdef USE_FLOAT4_BYVAL static inline Datum Float4GetDatum(float4 X) { @@ -700,9 +689,6 @@ Float4GetDatum(float4 X) myunion.value = X; return Int32GetDatum(myunion.retval); } -#else -extern Datum Float4GetDatum(float4 X); -#endif /* * DatumGetFloat8 @@ -757,10 +743,9 @@ extern Datum Float8GetDatum(float8 X); /* * Int64GetDatumFast * Float8GetDatumFast - * Float4GetDatumFast * * These macros are intended to allow writing code that does not depend on - * whether int64, float8, float4 are pass-by-reference types, while not + * whether int64 and float8 are pass-by-reference types, while not * sacrificing performance when they are. The argument must be a variable * that will exist and have the same value for as long as the Datum is needed. * In the pass-by-ref case, the address of the variable is taken to use as @@ -776,10 +761,4 @@ extern Datum Float8GetDatum(float8 X); #define Float8GetDatumFast(X) PointerGetDatum(&(X)) #endif -#ifdef USE_FLOAT4_BYVAL -#define Float4GetDatumFast(X) Float4GetDatum(X) -#else -#define Float4GetDatumFast(X) PointerGetDatum(&(X)) -#endif - #endif /* POSTGRES_H */ diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index a6958273ac..2423267b54 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -31,12 +31,6 @@ sub _new $self->DeterminePlatform(); my $bits = $self->{platform} eq 'Win32' ? 32 : 64; - $options->{float4byval} = 1 - unless exists $options->{float4byval}; - $options->{float8byval} = ($bits == 64) - unless exists $options->{float8byval}; - die "float8byval not permitted on 32 bit platforms" - if $options->{float8byval} && $bits == 32; if ($options->{xslt} && !$options->{xml}) { die "XSLT requires XML\n"; @@ -209,25 +203,6 @@ sub GenerateFiles print $o "#define XLOG_BLCKSZ ", 1024 * $self->{options}->{wal_blocksize}, "\n"; - if ($self->{options}->{float4byval}) - { - print $o "#define USE_FLOAT4_BYVAL 1\n"; - print $o "#define FLOAT4PASSBYVAL true\n"; - } - else - { - print $o "#define FLOAT4PASSBYVAL false\n"; - } - if ($self->{options}->{float8byval}) - { - print $o "#define USE_FLOAT8_BYVAL 1\n"; - print $o "#define FLOAT8PASSBYVAL true\n"; - } - else - { - print $o "#define FLOAT8PASSBYVAL false\n"; - } - if ($self->{options}->{uuid}) { print $o "#define HAVE_UUID_OSSP\n"; diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl index 043df4c5e8..d5e010b18a 100644 --- a/src/tools/msvc/config_default.pl +++ b/src/tools/msvc/config_default.pl @@ -4,11 +4,6 @@ our $config = { asserts => 0, # --enable-cassert - # float4byval=>1, # --disable-float4-byval, on by default - - # float8byval=> $platformbits == 64, # --disable-float8-byval, - # off by default on 32 bit platforms, on by default on 64 bit platforms - # blocksize => 8, # --with-blocksize, 8kB by default # wal_blocksize => 8, # --with-wal-blocksize, 8kB by default ldap => 1, # --with-ldap base-commit: 73025140885c889410b9bfc4a30a3866396fc5db -- 2.23.0