• Teodor Sigaev's avatar
    Fix behavior of ~> (cube, int) operator · 563a053b
    Teodor Sigaev authored
    ~> (cube, int) operator was especially designed for knn-gist search.
    However, it appears that knn-gist search can't work correctly with current
    behavior of this operator when dataset contains cubes of variable
    dimensionality. In this case, the same value of second operator argument
    can point to different dimension depending on dimensionality of particular cube.
    Such behavior is incompatible with gist indexing of cubes, and knn-gist doesn't
    work correctly for it.
    
    This patch changes behavior of ~> (cube, int) operator by introducing dimension
    numbering where value of second argument unambiguously identifies number of
    dimension. With new behavior, this operator can be correctly supported by
    knn-gist. Relevant changes to cube operator class are also included.
    
    Backpatch to v9.6 where operator was introduced.
    
    Since behavior of ~> (cube, int) operator is changed, depending entities
    must be refreshed after upgrade. Such as, expression indexes using this
    operator must be reindexed, materialized views must be rebuilt, stored
    procedures and client code must be revised to correctly use new behavior.
    That should be mentioned in release notes.
    
    Noticed by: Tomas Vondra
    Author: Alexander Korotkov
    Reviewed by: Tomas Vondra, Andrey Borodin
    Discussion: https://www.postgresql.org/message-id/flat/a9657f6a-b497-36ff-e56-482a2c7e3292@2ndquadrant.com
    563a053b
cube_2.out 38.5 KB