Changeset View
Changeset View
Standalone View
Standalone View
src/engine/postingdb.cpp
Show First 20 Lines • Show All 121 Lines • ▼ Show 20 Line(s) | |||||
122 | 122 | | |||
123 | QVector< QByteArray > PostingDB::fetchTermsStartingWith(const QByteArray& term) | 123 | QVector< QByteArray > PostingDB::fetchTermsStartingWith(const QByteArray& term) | ||
124 | { | 124 | { | ||
125 | MDB_val key; | 125 | MDB_val key; | ||
126 | key.mv_size = term.size(); | 126 | key.mv_size = term.size(); | ||
127 | key.mv_data = static_cast<void*>(const_cast<char*>(term.constData())); | 127 | key.mv_data = static_cast<void*>(const_cast<char*>(term.constData())); | ||
128 | 128 | | |||
129 | MDB_cursor* cursor; | 129 | MDB_cursor* cursor; | ||
130 | mdb_cursor_open(m_txn, m_dbi, &cursor); | 130 | int rc = mdb_cursor_open(m_txn, m_dbi, &cursor); | ||
131 | if (rc) { | ||||
132 | qCWarning(ENGINE) << "PostingDB::fetchTermsStartingWith" << mdb_strerror(rc); | ||||
133 | return {}; | ||||
134 | } | ||||
131 | 135 | | |||
132 | QVector<QByteArray> terms; | 136 | QVector<QByteArray> terms; | ||
133 | int rc = mdb_cursor_get(cursor, &key, nullptr, MDB_SET_RANGE); | 137 | rc = mdb_cursor_get(cursor, &key, nullptr, MDB_SET_RANGE); | ||
134 | while (rc == 0) { | 138 | while (rc == 0) { | ||
135 | const QByteArray arr(static_cast<char*>(key.mv_data), key.mv_size); | 139 | const QByteArray arr(static_cast<char*>(key.mv_data), key.mv_size); | ||
136 | if (!arr.startsWith(term)) { | 140 | if (!arr.startsWith(term)) { | ||
137 | break; | 141 | break; | ||
138 | } | 142 | } | ||
139 | terms << arr; | 143 | terms << arr; | ||
140 | rc = mdb_cursor_get(cursor, &key, nullptr, MDB_NEXT); | 144 | rc = mdb_cursor_get(cursor, &key, nullptr, MDB_NEXT); | ||
141 | } | 145 | } | ||
▲ Show 20 Lines • Show All 66 Lines • ▼ Show 20 Line(s) | |||||
208 | { | 212 | { | ||
209 | Q_ASSERT(!prefix.isEmpty()); | 213 | Q_ASSERT(!prefix.isEmpty()); | ||
210 | 214 | | |||
211 | MDB_val key; | 215 | MDB_val key; | ||
212 | key.mv_size = prefix.size(); | 216 | key.mv_size = prefix.size(); | ||
213 | key.mv_data = static_cast<void*>(const_cast<char*>(prefix.constData())); | 217 | key.mv_data = static_cast<void*>(const_cast<char*>(prefix.constData())); | ||
214 | 218 | | |||
215 | MDB_cursor* cursor; | 219 | MDB_cursor* cursor; | ||
216 | mdb_cursor_open(m_txn, m_dbi, &cursor); | 220 | int rc = mdb_cursor_open(m_txn, m_dbi, &cursor); | ||
221 | | ||||
222 | if (rc) { | ||||
223 | qCWarning(ENGINE) << "PostingDB::regexpIter" << mdb_strerror(rc); | ||||
224 | return nullptr; | ||||
225 | } | ||||
217 | 226 | | |||
218 | QVector<PostingIterator*> termIterators; | 227 | QVector<PostingIterator*> termIterators; | ||
219 | 228 | | |||
220 | MDB_val val; | 229 | MDB_val val; | ||
221 | int rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE); | 230 | rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE); | ||
222 | while (rc == 0) { | 231 | while (rc == 0) { | ||
223 | const QByteArray arr(static_cast<char*>(key.mv_data), key.mv_size); | 232 | const QByteArray arr(static_cast<char*>(key.mv_data), key.mv_size); | ||
224 | if (!arr.startsWith(prefix)) { | 233 | if (!arr.startsWith(prefix)) { | ||
225 | break; | 234 | break; | ||
226 | } | 235 | } | ||
227 | if (validate(arr)) { | 236 | if (validate(arr)) { | ||
228 | termIterators << new DBPostingIterator(val.mv_data, val.mv_size); | 237 | termIterators << new DBPostingIterator(val.mv_data, val.mv_size); | ||
229 | } | 238 | } | ||
▲ Show 20 Lines • Show All 69 Lines • Show Last 20 Lines |