def weld_merge_outer_join(arrays_self, weld_types_self, arrays_other, weld_types_other,
                          how, is_on_sorted, is_on_unique, readable_text):
    """Applies merge-join on the arrays returning indices from each to keep in the resulting

    Parameters
    ----------
    arrays_self : list of (numpy.ndarray or WeldObject)
        Columns from the self DataFrame on which to join.
    weld_types_self : list of WeldType
        Corresponding Weld types.
    arrays_other : list of (numpy.ndarray or WeldObject)
        Columns from the other DataFrame on which to join.
    weld_types_other : list of WeldType
        Corresponding Weld types.
    how : {'outer'}
        Here it is not used but kept to maintain same method signature as weld_merge_join
    is_on_sorted : bool
        If we know that the on columns are already sorted, can employ faster algorithm.
    is_on_unique : bool
        If we know that the values are unique, can employ faster algorithm.
    readable_text : str
        Explanatory string to add in the Weld placeholder.

    Returns
    -------
    tuple of WeldObject
        Three objects: first 2 are indices from the input arrays, indices of the rows from self and other that should be
        available in the resulting joined DataFrame. The last object will be a tuple containing the new index with
        actual values, not indices to other rows.

    """
    assert is_on_unique

    weld_obj_vec_of_struct_self = weld_arrays_to_vec_of_struct(arrays_self, weld_types_self)
    weld_obj_vec_of_struct_other = weld_arrays_to_vec_of_struct(arrays_other, weld_types_other)

    weld_obj_join = _weld_merge_outer_join(weld_obj_vec_of_struct_self,
                                           weld_obj_vec_of_struct_other,
                                           weld_types_self,
                                           len(arrays_self),
                                           is_on_unique)

    intermediate_result = LazyStructResult(weld_obj_join, [WeldVec(WeldLong()),
                                                           WeldVec(WeldLong()),
                                                           WeldStruct([WeldVec(weld_type)
                                                                       for weld_type in weld_types_self])])
    dependency_name = Cache.cache_intermediate_result(intermediate_result, readable_text)

    weld_objects_indexes = extract_placeholder_weld_objects(dependency_name, 2, readable_text)
    weld_objects_new_index = extract_placeholder_weld_objects_from_index(dependency_name,
                                                                         len(weld_types_self),
                                                                         readable_text,
                                                                         2)

    return weld_objects_indexes + [weld_objects_new_index]
Applies merge-join on the arrays returning indices from each to keep in the resulting

    Parameters
    ----------
    arrays_self : list of (numpy.ndarray or WeldObject)
        Columns from the self DataFrame on which to join.
    weld_types_self : list of WeldType
        Corresponding Weld types.
    arrays_other : list of (numpy.ndarray or WeldObject)
        Columns from the other DataFrame on which to join.
    weld_types_other : list of WeldType
        Corresponding Weld types.
    how : {'outer'}
        Here it is not used but kept to maintain same method signature as weld_merge_join
    is_on_sorted : bool
        If we know that the on columns are already sorted, can employ faster algorithm.
    is_on_unique : bool
        If we know that the values are unique, can employ faster algorithm.
    readable_text : str
        Explanatory string to add in the Weld placeholder.

    Returns
    -------
    tuple of WeldObject
        Three objects: first 2 are indices from the input arrays, indices of the rows from self and other that should be
        available in the resulting joined DataFrame. The last object will be a tuple containing the new index with
        actual values, not indices to other rows.