Ejemplo n.º 1
0
def entity_search_genres_engine(entity: Entity, values: list,
                                search: SearchParams) -> str:
    """
    Genres criteria
    :param entity:  entity to search
    :param values:  values for criteria
    :param search:  search parameters for advanced search
    """
    genre_term = f'{fq_column(GENRES_TABLE, "name")}'
    idx = search.entities.index(entity)
    if len(search.genre_aliases) > idx:
        if search.genre_aliases[idx] is not None:
            genre_term = f'{search.genre_aliases[idx]}.name'

    terms = [f'{genre_term} = \'{g}\'' for g in values]
    # ((inner join 'entity table' and 'genre link table')
    #       inner join 'genres table')
    search.customisation = \
        join_engine(
            join_engine(entity.eng_table, entity.eng_genre_link_table,
                        entity.fq_genre_link(), entity.fq_id()),
            GENRES_TABLE,
            fq_column(entity.eng_genre_link_table, "genre_id"), fq_column(GENRES_TABLE, "id"))

    return conjunction_op_engine(OR_CONJUNC, *terms)