def from_clause(cls, clause):
        """ Factory method """
        pieces = []
        for i, part in enumerate(clause):
            if i % 2 == 1:
                pieces.append(part)
            else:
                pieces.append(ConstraintExpression.from_clause(part))
        return cls(pieces)