Daniel Gibson <[email protected]> wrote:
inner join is the "normal" join, outer join means that, if a to-be-joined element has no "partner" in the other set (range), it's included in the output anyway with the partner having a NULL value. (This can be done for either the first, the second or both partners).
natural join is like an inner join, but has no explicit predicate, the implicit predicate being that (in database tables) columns with equal names have to contain equal values. So natural joins are rather uninteresting for ranges I guess.
Natural join could easily be done in D for ranges of structs or classes. (not sure how it would cope with polymorphism, though) It's trivial to automatically generate a predicate that uses __traits( allMembers ) to check that all fields with the same name have the same value (and even to statically decline natural join on types with eponymous fields of incompatible types). -- Simen
