Changeset View
Changeset View
Standalone View
Standalone View
src/engine/positiondb.cpp
Show All 17 Lines | |||||
18 | * | 18 | * | ||
19 | */ | 19 | */ | ||
20 | 20 | | |||
21 | #include "enginedebug.h" | 21 | #include "enginedebug.h" | ||
22 | #include "positiondb.h" | 22 | #include "positiondb.h" | ||
23 | #include "positioncodec.h" | 23 | #include "positioncodec.h" | ||
24 | #include "positioninfo.h" | 24 | #include "positioninfo.h" | ||
25 | #include "postingiterator.h" | 25 | #include "postingiterator.h" | ||
26 | #include "vectorpositioninfoiterator.h" | ||||
26 | 27 | | |||
27 | using namespace Baloo; | 28 | using namespace Baloo; | ||
28 | 29 | | |||
29 | PositionDB::PositionDB(MDB_dbi dbi, MDB_txn* txn) | 30 | PositionDB::PositionDB(MDB_dbi dbi, MDB_txn* txn) | ||
30 | : m_txn(txn) | 31 | : m_txn(txn) | ||
31 | , m_dbi(dbi) | 32 | , m_dbi(dbi) | ||
32 | { | 33 | { | ||
33 | Q_ASSERT(txn != nullptr); | 34 | Q_ASSERT(txn != nullptr); | ||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Line(s) | 120 | if (rc != 0 && rc != MDB_NOTFOUND) { | |||
120 | qCDebug(ENGINE) << "PositionDB::del" << term << mdb_strerror(rc); | 121 | qCDebug(ENGINE) << "PositionDB::del" << term << mdb_strerror(rc); | ||
121 | } | 122 | } | ||
122 | } | 123 | } | ||
123 | 124 | | |||
124 | // | 125 | // | ||
125 | // Query | 126 | // Query | ||
126 | // | 127 | // | ||
127 | 128 | | |||
128 | class DBPositionIterator : public PostingIterator { | 129 | VectorPositionInfoIterator* PositionDB::iter(const QByteArray& term) | ||
129 | public: | | |||
130 | DBPositionIterator(char* data, uint size) | | |||
131 | : m_pos(-1) | | |||
132 | { | | |||
133 | PositionCodec codec; | | |||
134 | m_vec = codec.decode(QByteArray(static_cast<char*>(data), size)); | | |||
135 | } | | |||
136 | | ||||
137 | quint64 next() override { | | |||
138 | m_pos++; | | |||
139 | if (m_pos >= m_vec.size()) { | | |||
140 | return 0; | | |||
141 | } | | |||
142 | | ||||
143 | return m_vec[m_pos].docId; | | |||
144 | } | | |||
145 | | ||||
146 | quint64 docId() const override { | | |||
147 | if (m_pos < 0 || m_pos >= m_vec.size()) { | | |||
148 | return 0; | | |||
149 | } | | |||
150 | return m_vec[m_pos].docId; | | |||
151 | } | | |||
152 | | ||||
153 | QVector<uint> positions() override { | | |||
154 | if (m_pos < 0 || m_pos >= m_vec.size()) { | | |||
155 | return QVector<uint>(); | | |||
156 | } | | |||
157 | return m_vec[m_pos].positions; | | |||
158 | } | | |||
159 | | ||||
160 | private: | | |||
161 | QVector<PositionInfo> m_vec; | | |||
162 | int m_pos; | | |||
163 | }; | | |||
164 | | ||||
165 | PostingIterator* PositionDB::iter(const QByteArray& term) | | |||
166 | { | 130 | { | ||
167 | Q_ASSERT(!term.isEmpty()); | 131 | Q_ASSERT(!term.isEmpty()); | ||
168 | 132 | | |||
169 | MDB_val key; | 133 | MDB_val key; | ||
170 | key.mv_size = term.size(); | 134 | key.mv_size = term.size(); | ||
171 | key.mv_data = static_cast<void*>(const_cast<char*>(term.constData())); | 135 | key.mv_data = static_cast<void*>(const_cast<char*>(term.constData())); | ||
172 | 136 | | |||
173 | MDB_val val{0, nullptr}; | 137 | MDB_val val{0, nullptr}; | ||
174 | int rc = mdb_get(m_txn, m_dbi, &key, &val); | 138 | int rc = mdb_get(m_txn, m_dbi, &key, &val); | ||
175 | if (rc) { | 139 | if (rc) { | ||
176 | qCDebug(ENGINE) << "PositionDB::iter" << term << mdb_strerror(rc); | 140 | qCDebug(ENGINE) << "PositionDB::iter" << term << mdb_strerror(rc); | ||
177 | return nullptr; | 141 | return nullptr; | ||
178 | } | 142 | } | ||
179 | 143 | | |||
180 | return new DBPositionIterator(static_cast<char*>(val.mv_data), val.mv_size); | 144 | PositionCodec codec; | ||
145 | QByteArray ba(static_cast<char*>(val.mv_data), val.mv_size); | ||||
146 | return new VectorPositionInfoIterator(codec.decode(ba)); | ||||
181 | } | 147 | } | ||
182 | 148 | | |||
183 | QMap<QByteArray, QVector<PositionInfo>> PositionDB::toTestMap() const | 149 | QMap<QByteArray, QVector<PositionInfo>> PositionDB::toTestMap() const | ||
184 | { | 150 | { | ||
185 | MDB_cursor* cursor; | 151 | MDB_cursor* cursor; | ||
186 | mdb_cursor_open(m_txn, m_dbi, &cursor); | 152 | mdb_cursor_open(m_txn, m_dbi, &cursor); | ||
187 | 153 | | |||
188 | MDB_val key = {0, nullptr}; | 154 | MDB_val key = {0, nullptr}; | ||
Show All 18 Lines |