postgresql/src/backend
Tomas Vondra c4c3400885 Use the built-in float datatypes to implement geometric types
This patch makes the geometric operators and functions use the exported
function of the float4/float8 datatypes.  The main reason of doing so is
to check for underflow and overflow, and to handle NaNs consciously.

The float datatypes consider NaNs values to be equal and greater than
all non-NaN values.  This change considers NaNs equal only for equality
operators.  The placement operators, contains, overlaps, left/right of
etc. continue to return false when NaNs are involved.  We don't need
to worry about them being considered greater than any-NaN because there
aren't any basic comparison operators like less/greater than for the
geometric datatypes.

The changes may be summarised as:

* Check for underflow, overflow and division by zero
* Consider NaN values to be equal
* Return NULL when the distance is NaN for all closest point operators
* Favour not-NaN over NaN where it makes sense

The patch also replaces all occurrences of "double" as "float8".  They
are the same, but were used inconsistently in the same file.

Author: Emre Hasegeli
Reviewed-by: Kyotaro Horiguchi, Tomas Vondra

Discussion: https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
2018-08-16 19:56:11 +02:00
..
access Use the built-in float datatypes to implement geometric types 2018-08-16 19:56:11 +02:00
bootstrap Use a ResourceOwner to track buffer pins in all cases. 2018-07-18 12:15:16 -04:00
catalog Make autovacuum more aggressive to remove orphaned temp tables 2018-08-13 11:49:04 +02:00
commands Remove obsolete comment 2018-08-13 21:07:31 +02:00
executor Fix executor prune failure when plan already pruned 2018-08-16 12:53:43 -03:00
foreign Remove bogus "extern" annotations on function definitions. 2018-02-19 12:07:44 -05:00
jit LLVMJIT: Check for 'noinline' attribute in recursively inlined functions. 2018-07-25 16:23:59 -07:00
lib doc: Update redirecting links 2018-07-16 10:48:05 +02:00
libpq Remove support for tls-unique channel binding. 2018-08-05 13:44:21 +03:00
main Update copyright for 2018 2018-01-02 23:30:12 -05:00
nodes Fix run-time partition pruning for appends with multiple source rels. 2018-08-01 19:42:52 -04:00
optimizer Fix wrong order of operations in inheritance_planner. 2018-08-11 15:53:20 -04:00
parser Fix INSERT ON CONFLICT UPDATE through a view that isn't just SELECT *. 2018-08-04 19:38:58 -04:00
partitioning Remove bogus Assert in make_partitionedrel_pruneinfo(). 2018-08-08 20:02:32 -04:00
po Translation updates 2018-06-25 12:37:18 +02:00
port Remove obsolete netbsd dynloader code 2018-08-13 23:21:01 +02:00
postmaster Clean up assorted misuses of snprintf()'s result value. 2018-08-15 16:29:31 -04:00
regex Clean up warnings from -Wimplicit-fallthrough. 2018-05-01 19:35:08 -04:00
replication Close the file descriptor in ApplyLogicalMappingFile 2018-08-16 16:49:57 +02:00
rewrite Fix INSERT ON CONFLICT UPDATE through a view that isn't just SELECT *. 2018-08-04 19:38:58 -04:00
snowball Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
statistics Fix bogus code for extracting extended-statistics data from syscache. 2018-05-02 12:23:00 -04:00
storage Make autovacuum more aggressive to remove orphaned temp tables 2018-08-13 11:49:04 +02:00
tcop Don't run atexit callbacks in quickdie signal handlers. 2018-08-08 19:10:32 +03:00
tsearch Hand code string to integer conversion for performance. 2018-07-22 14:58:23 -07:00
utils Use the built-in float datatypes to implement geometric types 2018-08-16 19:56:11 +02:00
.gitignore Add .gitignore entries for AIX-specific intermediate build artifacts. 2015-07-08 20:44:22 -04:00
common.mk Remove PARTIAL_LINKING build mode. 2018-03-30 17:33:04 -07:00
Makefile Rearrange makefile rules for running Gen_fmgrtab.pl. 2018-05-03 17:54:18 -04:00
nls.mk Translation updates 2018-06-25 12:37:18 +02:00