def select(self, boolean_expression, mode="<STR_LIT:replace>", name="<STR_LIT:default>", executor=None):
boolean_expression = _ensure_string_from_expression(boolean_expression)<EOL>if boolean_expression is None and not self.has_selection(name=name):<EOL><INDENT>pass  <EOL>self.signal_selection_changed.emit(self)  <EOL><DEDENT>else:<EOL><INDENT>def create(current):<EOL><INDENT>return selections.SelectionExpression(boolean_expression, current, mode) if boolean_expression else None<EOL><DEDENT>self._selection(create, name)<EOL><DEDENT>
Perform a selection, defined by the boolean expression, and combined with the previous selection using the given mode.

        Selections are recorded in a history tree, per name, undo/redo can be done for them separately.

        :param str boolean_expression: Any valid column expression, with comparison operators
        :param str mode: Possible boolean operator: replace/and/or/xor/subtract
        :param str name: history tree or selection 'slot' to use
        :param executor:
        :return: