Switch to unified view

a/src/rcldb/rcldb.cpp b/src/rcldb/rcldb.cpp
...
...
1605
1605
1606
// Return existing stem db languages
1606
// Return existing stem db languages
1607
vector<string> Db::getStemLangs()
1607
vector<string> Db::getStemLangs()
1608
{
1608
{
1609
    LOGDEB(("Db::getStemLang\n"));
1609
    LOGDEB(("Db::getStemLang\n"));
1610
    vector<string> dirs;
1610
    vector<string> langs;
1611
    if (m_ndb == 0 || m_ndb->m_isopen == false)
1611
    if (m_ndb == 0 || m_ndb->m_isopen == false)
1612
    return dirs;
1612
    return langs;
1613
    dirs = StemDb::getLangs(m_basedir);
1613
    langs = StemDb::getLangs(m_ndb->xrdb);
1614
    return dirs;
1614
    return langs;
1615
}
1615
}
1616
1616
1617
/**
1617
/**
1618
 * Delete stem db for given language
1618
 * Delete stem db for given language
1619
 */
1619
 */
1620
bool Db::deleteStemDb(const string& lang)
1620
bool Db::deleteStemDb(const string& lang)
1621
{
1621
{
1622
    LOGDEB(("Db::deleteStemDb(%s)\n", lang.c_str()));
1622
    LOGDEB(("Db::deleteStemDb(%s)\n", lang.c_str()));
1623
    if (m_ndb == 0 || m_ndb->m_isopen == false)
1623
    if (m_ndb == 0 || m_ndb->m_isopen == false || !m_ndb->m_iswritable)
1624
    return false;
1624
    return false;
1625
    return StemDb::deleteDb(m_basedir, lang);
1625
    return StemDb::deleteDb(m_ndb->xwdb, lang);
1626
}
1626
}
1627
1627
1628
/**
1628
/**
1629
 * Create database of stem to parents associations for a given language.
1629
 * Create database of stem to parents associations for a given language.
1630
 * We walk the list of all terms, stem them, and create another Xapian db
1630
 * We walk the list of all terms, stem them, and create another Xapian db
...
...
1632
 * parent terms in the document data.
1632
 * parent terms in the document data.
1633
 */
1633
 */
1634
bool Db::createStemDb(const string& lang)
1634
bool Db::createStemDb(const string& lang)
1635
{
1635
{
1636
    LOGDEB(("Db::createStemDb(%s)\n", lang.c_str()));
1636
    LOGDEB(("Db::createStemDb(%s)\n", lang.c_str()));
1637
    if (m_ndb == 0 || m_ndb->m_isopen == false)
1637
    if (m_ndb == 0 || m_ndb->m_isopen == false || !m_ndb->m_iswritable) {
1638
  LOGERR(("createStemDb: db not open or not writable\n"));
1638
    return false;
1639
    return false;
1640
    }
1639
1641
1640
    return StemDb::createDb(m_ndb->xdb(), m_basedir, lang);
1642
    return StemDb::createDb(m_ndb->xwdb, lang);
1641
}
1643
}
1642
1644
1643
/**
1645
/**
1644
 * This is called at the end of an indexing session, to delete the
1646
 * This is called at the end of an indexing session, to delete the
1645
 * documents for files that are no longer there. This can ONLY be called
1647
 * documents for files that are no longer there. This can ONLY be called
...
...
1840
    int operator()(const TermMatchEntry& l, const TermMatchEntry& r) {
1842
    int operator()(const TermMatchEntry& l, const TermMatchEntry& r) {
1841
    return !l.term.compare(r.term);
1843
    return !l.term.compare(r.term);
1842
    }
1844
    }
1843
};
1845
};
1844
1846
1845
bool Db::stemExpand(const string &lang, const string &term, 
1847
bool Db::stemExpand(const string &langs, const string &term, 
1846
            TermMatchResult& result, int max)
1848
            TermMatchResult& result, int max)
1847
{
1849
{
1848
    vector<string> dirs(1, m_basedir);
1850
    if (m_ndb == 0 || m_ndb->m_isopen == false)
1849
    dirs.insert(dirs.end(), m_extraDbs.begin(), m_extraDbs.end());
1851
  return false;
1850
    for (vector<string>::iterator it = dirs.begin(); it != dirs.end(); it++) {
1851
  vector<string> more;
1852
    vector<string> exp;
1852
  StemDb::stemExpand(*it, lang, term, more);
1853
    if (!StemDb::stemExpand(m_ndb->xrdb, langs, term, exp))
1853
  LOGDEB1(("Db::stemExpand: Got %d from %s\n", 
1854
  return false;
1854
       more.size(), it->c_str()));
1855
  result.entries.insert(result.entries.end(), more.begin(), more.end());
1855
    result.entries.insert(result.entries.end(), exp.begin(), exp.end());
1856
  if (result.entries.size() >= (unsigned int)max)
1857
      break;
1858
    }
1859
    LOGDEB1(("Db:::stemExpand: final count %d \n", result.size()));
1860
    return true;
1856
    return true;
1861
}
1857
}
1862
1858
1863
/** Add prefix to all strings in list */
1859
/** Add prefix to all strings in list */
1864
static void addPrefix(vector<TermMatchEntry>& terms, const string& prefix)
1860
static void addPrefix(vector<TermMatchEntry>& terms, const string& prefix)