• Tomas Vondra's avatar
    Fix problems in handling the line data type · 2e2a392d
    Tomas Vondra authored
    According to the source history, the internal format of line data type
    has changed, but various functions working with it did were not updated
    and thus were producing wrong results.
    
    This patch addresses various such issues, in particular:
    
    * Reject invalid specification A=B=0 on receive
    * Reject same points on line_construct_pp()
    * Fix perpendicular operator when negative values are involved
    * Avoid division by zero on perpendicular operator
    * Fix intersection and distance operators when neither A nor B are 1
    * Return NULL for closest point when objects are parallel
    * Check whether closest point of line segments is the intersection point
    * Fix closest point of line segments being on the wrong segment
    
    Aside from handling those issues, the patch also aims to make operators
    more symmetric and less sen to precision loss.  The EPSILON interferes
    with even minor changes, but the least we can do is applying it to both
    sides of the operators equally.
    
    Author: Emre Hasegeli
    Reviewed-by: Tomas Vondra
    
    Discussion: https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
    2e2a392d
geo_ops.c 119 KB