idea.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:idealoom 作者: conversence 项目源码 文件源码
def get_descendants_query(
            cls, root_idea_id=bindparam('root_idea_id', type_=Integer),
            inclusive=True):
        if cls.using_virtuoso:
            sql = text(
                """SELECT transitive t_in (1) t_out (2) T_DISTINCT T_NO_CYCLES
                    source_id, target_id FROM idea_idea_link
                    WHERE tombstone_date IS NULL"""
                ).columns(column('source_id'), column('target_id')).alias()
            select_exp = select([sql.c.target_id.label('id')]
                ).select_from(sql).where(sql.c.source_id==root_idea_id)
        else:
            link = select(
                    [IdeaLink.source_id, IdeaLink.target_id]
                ).select_from(
                    IdeaLink
                ).where(
                    (IdeaLink.tombstone_date == None) &
                    (IdeaLink.source_id == root_idea_id)
                ).cte(recursive=True)
            source_alias = aliased(link)
            targets_alias = aliased(IdeaLink)
            parent_link = targets_alias.source_id == source_alias.c.target_id
            children = select(
                    [targets_alias.source_id, targets_alias.target_id]
                ).select_from(targets_alias).where(parent_link
                    & (targets_alias.tombstone_date == None))
            with_children = link.union(children)
            select_exp = select([with_children.c.target_id.label('id')]
                ).select_from(with_children)
        if inclusive:
            if isinstance(root_idea_id, int):
                root_idea_id = literal_column(str(root_idea_id), Integer)
            select_exp = select_exp.union(
                select([root_idea_id.label('id')]))
        return select_exp.alias()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号