• Tomas Vondra's avatar
    Use functional dependencies to estimate ScalarArrayOpExpr · 8f321bd1
    Tomas Vondra authored
    Until now functional dependencies supported only simple equality clauses
    and clauses that can be trivially translated to equalities. This commit
    allows estimation of some ScalarArrayOpExpr (IN/ANY) clauses.
    
    For IN clauses we can do this thanks to using operator with equality
    semantics, which means an IN clause
    
        WHERE c IN (1, 2, ..., N)
    
    can be translated to
    
        WHERE (c = 1 OR c = 2 OR ... OR c = N)
    
    IN clauses are now considered compatible with functional dependencies,
    and rely on the same assumption of consistency of queries with data
    (which is an assumption we already used for simple equality clauses).
    This applies also to ALL clauses with an equality operator, which can be
    considered equivalent to IN clause.
    
    ALL clauses are still considered incompatible, although there's some
    discussion about maybe relaxing this in the future.
    
    Author: Pierre Ducroquet
    Reviewed-by: Tomas Vondra, Dean Rasheed
    Discussion: https://www.postgresql.org/message-id/flat/13902317.Eha0YfKkKy%40pierred-pdoc
    8f321bd1
dependencies.c 33.1 KB