예제 #1
0
def get_skill_search(
    conn: Connection,
    skillType: Optional[Iterable[int]],
    num: Optional[Iterable[int]],
    priority: Optional[Iterable[int]],
    strengthStatus: Optional[Iterable[int]],
    lvl1coolDown: Optional[Iterable[int]],
    numFunctions: Optional[Iterable[int]],
) -> list[MstSkill]:
    where_clause = [mstSkillLv.c.lv == 1]
    if skillType:
        where_clause.append(mstSkill.c.type.in_(skillType))
    if num:
        where_clause.append(mstSvtSkill.c.num.in_(num))
    if priority:
        where_clause.append(mstSvtSkill.c.priority.in_(priority))
    if strengthStatus:
        where_clause.append(mstSvtSkill.c.strengthStatus.in_(strengthStatus))
    if lvl1coolDown:
        where_clause.append(mstSkillLv.c.chargeTurn.in_(lvl1coolDown))
    if numFunctions:
        where_clause.append(
            func.array_length(mstSkillLv.c.funcId, 1).in_(numFunctions))

    skill_search_stmt = (select(mstSkill).distinct().select_from(
        mstSkill.outerjoin(mstSvtSkill,
                           mstSvtSkill.c.skillId == mstSkill.c.id).outerjoin(
                               mstSkillLv,
                               mstSkillLv.c.skillId == mstSkill.c.id)).where(
                                   and_(*where_clause)))

    return [
        MstSkill.from_orm(skill)
        for skill in conn.execute(skill_search_stmt).fetchall()
    ]
예제 #2
0
def get_td_search(
    conn: Connection,
    individuality: Optional[Iterable[int]],
    card: Optional[Iterable[int]],
    hits: Optional[Iterable[int]],
    strengthStatus: Optional[Iterable[int]],
    numFunctions: Optional[Iterable[int]],
    minNpNpGain: Optional[int],
    maxNpNpGain: Optional[int],
) -> list[MstTreasureDevice]:
    where_clause = [mstTreasureDeviceLv.c.lv == 1]
    if individuality:
        where_clause.append(
            mstTreasureDevice.c.individuality.contains(individuality))
    if card:
        where_clause.append(mstSvtTreasureDevice.c.cardId.in_(card))
    if hits:
        where_clause.append(
            func.array_length(mstSvtTreasureDevice.c.damage, 1).in_(hits))
    if strengthStatus:
        where_clause.append(
            mstSvtTreasureDevice.c.strengthStatus.in_(strengthStatus))
    if numFunctions:
        where_clause.append(
            func.array_length(mstTreasureDeviceLv.c.funcId,
                              1).in_(numFunctions))
    if minNpNpGain:
        where_clause.append(mstTreasureDeviceLv.c.tdPoint >= minNpNpGain)
    if maxNpNpGain:
        where_clause.append(mstTreasureDeviceLv.c.tdPoint <= maxNpNpGain)

    td_search_stmt = (select(mstTreasureDevice).distinct().select_from(
        mstTreasureDevice.outerjoin(
            mstSvtTreasureDevice,
            mstSvtTreasureDevice.c.treasureDeviceId == mstTreasureDevice.c.id,
        ).outerjoin(
            mstTreasureDeviceLv,
            mstTreasureDeviceLv.c.treaureDeviceId == mstTreasureDevice.c.id,
        )).where(and_(*where_clause)))

    return [
        MstTreasureDevice.from_orm(td)
        for td in conn.execute(td_search_stmt).fetchall()
    ]
예제 #3
0
def _set_orderby_desc(query, orderby, descending):
    """Set order by to query."""
    if orderby == 'fav_user_ids':
        n_favs = func.coalesce(func.array_length(Task.fav_user_ids, 1), 0).label('n_favs')
        query = query.add_column(n_favs)
        if descending:
            query = query.order_by(desc("n_favs"))
        else:
            query = query.order_by("n_favs")
    else:
        if descending:
            query = query.order_by(getattr(Task, orderby).desc())
        else:
            query = query.order_by(getattr(Task, orderby).asc())
    query = query.order_by(Task.id.asc())
    return query
예제 #4
0
파일: sched.py 프로젝트: PyBossa/pybossa
def _set_orderby_desc(query, orderby, descending):
    """Set order by to query."""
    if orderby == 'fav_user_ids':
        n_favs = func.coalesce(func.array_length(Task.fav_user_ids, 1), 0).label('n_favs')
        query = query.add_column(n_favs)
        if descending:
            query = query.order_by(desc("n_favs"))
        else:
            query = query.order_by("n_favs")
    else:
        if descending:
            query = query.order_by(getattr(Task, orderby).desc())
        else:
            query = query.order_by(getattr(Task, orderby).asc())
    #query = query.order_by(Task.id.asc())
    return query
예제 #5
0
mstSkillLv = Table(
    "mstSkillLv",
    metadata,
    Column("funcId", ARRAY(Integer)),
    Column("svals", ARRAY(String)),
    Column("script", JSONB),
    Column("skillId", Integer, index=True),
    Column("lv", Integer),
    Column("chargeTurn", Integer, index=True),
    Column("skillDetailId", Integer),
    Column("priority", Integer),
    Column("expandedFuncId", JSONB),
)

Index("ix_mstSkillLv_funcId_length", func.array_length(mstSkillLv.c.funcId, 1))

mstTreasureDevice = Table(
    "mstTreasureDevice",
    metadata,
    Column("individuality", ARRAY(Integer)),
    Column("script", JSONB),
    Column("id", Integer, primary_key=True),
    Column("seqId", Integer),
    Column("name", String),
    Column("ruby", String),
    Column("rank", String),
    Column("maxLv", Integer),
    Column("typeText", String),
    Column("attackAttri", Integer),
    Column("effectFlag", Integer),