Beispiel #1
0
        public override int FetchSec(int targetSec)
        {
            SectionSearchQueryPlan node = _subqueries[0];

            targetSec = node.FetchSec(targetSec);
            if (targetSec == SectionSearchQueryPlan.NO_MORE_SECTIONS)
            {
                _curSec = SectionSearchQueryPlan.NO_MORE_SECTIONS;
                return(targetSec);
            }

            int i = 1;

            while (i < _subqueries.Length)
            {
                node = _subqueries[i];
                if (node.SecId < targetSec)
                {
                    _curSec = node.FetchSec(targetSec);
                    if (_curSec == SectionSearchQueryPlan.NO_MORE_SECTIONS)
                    {
                        return(_curSec);
                    }

                    if (_curSec > targetSec)
                    {
                        targetSec = _curSec;
                        i         = 0;
                        continue;
                    }
                }
                i++;
            }
            return(_curSec);
        }
        public override int FetchSec(int targetSec)
        {
            while (m_curSec < SectionSearchQueryPlan.NO_MORE_SECTIONS)
            {
                m_curSec = m_positiveNode.FetchSec(targetSec);
                if (m_curSec == SectionSearchQueryPlan.NO_MORE_SECTIONS)
                {
                    break;
                }

                targetSec = m_curSec;

                if (m_negativeNode.DocId < m_curDoc)
                {
                    if (m_negativeNode.FetchDoc(m_curDoc) == DocIdSetIterator.NO_MORE_DOCS)
                    {
                        break;
                    }
                }

                if (m_negativeNode.DocId == m_curDoc &&
                    (m_negativeNode.SecId == SectionSearchQueryPlan.NO_MORE_SECTIONS ||
                     m_negativeNode.FetchSec(targetSec) > m_curSec))
                {
                    break;
                }
            }
            return(m_curSec);
        }
Beispiel #3
0
        public override int FetchSec(int targetSec)
        {
            if (m_curSec == SectionSearchQueryPlan.NO_MORE_SECTIONS)
            {
                return(m_curSec);
            }

            if (targetSec <= m_curSec)
            {
                targetSec = m_curSec + 1;
            }

            SectionSearchQueryPlan node = (SectionSearchQueryPlan)m_pq.Top;

            while (true)
            {
                if (node.DocId == m_curDoc && m_curSec < SectionSearchQueryPlan.NO_MORE_SECTIONS)
                {
                    if (node.SecId < targetSec)
                    {
                        node.FetchSec(targetSec);
                        node = (SectionSearchQueryPlan)m_pq.UpdateTop();
                    }
                    else
                    {
                        m_curSec = node.SecId;
                        return(m_curSec);
                    }
                }
                else
                {
                    m_curSec = SectionSearchQueryPlan.NO_MORE_SECTIONS;
                    return(m_curSec);
                }
            }
        }