示例#1
0
MojErr MojDbSearchCursor::load()
{
    // pull unique ids from index
    ObjectSet ids;
    MojErr err = loadIds(ids);
    MojErrCheck(err);

    // load objects into memory
    err = loadObjects(ids);
    MojErrCheck(err);
    // sort results
    if (!m_orderProp.empty()) {
        err = sort();
        MojErrCheck(err);
    }
    // distinct
    if (!m_distinct.empty()) {
        distinct();
    }
    // reverse for desc
    if (m_query.desc()) {
        err = m_items.reverse();
        MojErrCheck(err);
    }
    // set limit and pos
    if (m_limit >= m_items.size()) {
        m_limitPos = m_items.end();
    } else {
        m_limitPos = m_items.begin() + m_limit;
    }
    m_pos = m_items.begin();

    return MojErrNone;
}
示例#2
0
MojErr MojDbSearchCursor::load()
{
    LOG_TRACE("Entering function %s", __FUNCTION__);

    // pull unique ids from index
    ObjectSet ids;
    MojErr err = loadIds(ids);
    MojErrCheck(err);

    // load objects into memory
    err = loadObjects(ids);
    MojErrCheck(err);
    // sort results
    if (!m_orderProp.empty()) {
        err = sort();
        MojErrCheck(err);
    }
    // distinct
    if (!m_distinct.empty()) {
        distinct();
    }
    // reverse for desc
    if (m_query.desc()) {
        err = m_items.reverse();
        MojErrCheck(err);
    }
    // next page
    if (!m_page.empty()) {
        err = setPagePosition();
        MojErrCheck(err);
    } else {
        // set begin/last position.
        m_pos = m_items.begin();
        if (m_limit >= m_items.size()) {
            m_limitPos = m_items.end();
        } else {
            // if item size is bigger than limit, set next page.
            m_limitPos = m_items.begin() + m_limit;
            MojDbStorageItem* nextItem = m_limitPos->get();
            const MojObject nextId = nextItem->id();
            m_page.fromObject(nextId);
        }
    }
    // set remainder count
    m_count = m_items.end() - m_pos;

    return MojErrNone;
}