Sha256: 24cbc5644317327fc27074bafb869044561ba5afbb734e371431817e68205a9d
Contents?: true
Size: 1.18 KB
Versions: 6
Compression:
Stored size: 1.18 KB
Contents
# Minus Logical AND NOT ## Signature minus(left: Relation, right: Relation) -> Relation ## Examples minus( restrict(suppliers, eq(:city, 'Paris')), restrict(suppliers, gt(:status, 10))) ## Description Computes the relation as the set difference of `left` and `right`. The `left` and `right` relations must be minus-compatible, which meaning that they must have same heading (type inheritance is partly supported through ruby's own type system, so that the actual behavior is slighlty more permissive). ## Implementation notes Unlike SQL, this operator ALWAYS remove duplicates. There is no way, in Alf, to compute _bags_ of tuples and therefore no way to express something such as SQL's EXCEPT ALL. It is sometimes idiomatic in Alf to use `intersect` as a logical AND NOT, as illustrated below. So far, the optimizer/compiler is not smart enough to translate the former into the latter (which is likely to have a better query plan when using faithful SQL compilation and available SQL DBMSs). Any patch is welcome here too! minus( restrict(suppliers, eq(:city, 'Paris')), restrict(suppliers, gt(:status, 10))) is equivalent to restrict(suppliers, eq(:city, 'Paris') & !gt(:status, 10))
Version data entries
6 entries across 6 versions & 1 rubygems