Changeset View
Changeset View
Standalone View
Standalone View
src/engine/documentiddb.cpp
Show All 13 Lines | |||||
14 | * | 14 | * | ||
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public | ||
16 | * License along with this library; if not, write to the Free Software | 16 | * License along with this library; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | * | 18 | * | ||
19 | */ | 19 | */ | ||
20 | 20 | | |||
21 | #include "documentiddb.h" | 21 | #include "documentiddb.h" | ||
22 | 22 | #include "enginedebug.h" | |||
23 | #include <QDebug> | | |||
24 | 23 | | |||
25 | using namespace Baloo; | 24 | using namespace Baloo; | ||
26 | 25 | | |||
27 | DocumentIdDB::DocumentIdDB(MDB_dbi dbi, MDB_txn* txn) | 26 | DocumentIdDB::DocumentIdDB(MDB_dbi dbi, MDB_txn* txn) | ||
28 | : m_txn(txn) | 27 | : m_txn(txn) | ||
29 | , m_dbi(dbi) | 28 | , m_dbi(dbi) | ||
30 | { | 29 | { | ||
31 | Q_ASSERT(txn != nullptr); | 30 | Q_ASSERT(txn != nullptr); | ||
32 | Q_ASSERT(dbi != 0); | 31 | Q_ASSERT(dbi != 0); | ||
33 | } | 32 | } | ||
34 | 33 | | |||
35 | DocumentIdDB::~DocumentIdDB() | 34 | DocumentIdDB::~DocumentIdDB() | ||
36 | { | 35 | { | ||
37 | } | 36 | } | ||
38 | 37 | | |||
39 | MDB_dbi DocumentIdDB::create(const char* name, MDB_txn* txn) | 38 | MDB_dbi DocumentIdDB::create(const char* name, MDB_txn* txn) | ||
40 | { | 39 | { | ||
41 | MDB_dbi dbi; | 40 | MDB_dbi dbi = 0; | ||
42 | int rc = mdb_dbi_open(txn, name, MDB_CREATE | MDB_INTEGERKEY, &dbi); | 41 | int rc = mdb_dbi_open(txn, name, MDB_CREATE | MDB_INTEGERKEY, &dbi); | ||
43 | Q_ASSERT_X(rc == 0, "DocumentIdDB::create", mdb_strerror(rc)); | 42 | if (rc) { | ||
43 | qCWarning(ENGINE) << "DocumentIdDB::create" << name << mdb_strerror(rc); | ||||
44 | return 0; | ||||
45 | } | ||||
44 | 46 | | |||
45 | return dbi; | 47 | return dbi; | ||
46 | } | 48 | } | ||
47 | 49 | | |||
48 | MDB_dbi DocumentIdDB::open(const char* name, MDB_txn* txn) | 50 | MDB_dbi DocumentIdDB::open(const char* name, MDB_txn* txn) | ||
49 | { | 51 | { | ||
50 | MDB_dbi dbi; | 52 | MDB_dbi dbi = 0; | ||
51 | int rc = mdb_dbi_open(txn, name, MDB_INTEGERKEY, &dbi); | 53 | int rc = mdb_dbi_open(txn, name, MDB_INTEGERKEY, &dbi); | ||
52 | if (rc == MDB_NOTFOUND) { | 54 | if (rc) { | ||
55 | qCWarning(ENGINE) << "DocumentIdDB::open" << name << mdb_strerror(rc); | ||||
53 | return 0; | 56 | return 0; | ||
54 | } | 57 | } | ||
55 | Q_ASSERT_X(rc == 0, "DocumentIdDB::create", mdb_strerror(rc)); | | |||
56 | 58 | | |||
57 | return dbi; | 59 | return dbi; | ||
58 | } | 60 | } | ||
59 | 61 | | |||
60 | void DocumentIdDB::put(quint64 docId) | 62 | void DocumentIdDB::put(quint64 docId) | ||
61 | { | 63 | { | ||
62 | Q_ASSERT(docId > 0); | 64 | Q_ASSERT(docId > 0); | ||
63 | 65 | | |||
64 | MDB_val key; | 66 | MDB_val key; | ||
65 | key.mv_size = sizeof(quint64); | 67 | key.mv_size = sizeof(quint64); | ||
66 | key.mv_data = static_cast<void*>(&docId); | 68 | key.mv_data = static_cast<void*>(&docId); | ||
67 | 69 | | |||
68 | MDB_val val; | 70 | MDB_val val; | ||
69 | val.mv_size = 0; | 71 | val.mv_size = 0; | ||
70 | val.mv_data = nullptr; | 72 | val.mv_data = nullptr; | ||
71 | 73 | | |||
72 | int rc = mdb_put(m_txn, m_dbi, &key, &val, 0); | 74 | int rc = mdb_put(m_txn, m_dbi, &key, &val, 0); | ||
73 | Q_ASSERT_X(rc == 0, "DocumentIdDB::put", mdb_strerror(rc)); | 75 | if (rc) { | ||
76 | qCWarning(ENGINE) << "DocumentIdDB::put" << mdb_strerror(rc); | ||||
77 | } | ||||
74 | } | 78 | } | ||
75 | 79 | | |||
76 | bool DocumentIdDB::contains(quint64 docId) | 80 | bool DocumentIdDB::contains(quint64 docId) | ||
77 | { | 81 | { | ||
78 | Q_ASSERT(docId > 0); | 82 | Q_ASSERT(docId > 0); | ||
79 | 83 | | |||
80 | MDB_val key; | 84 | MDB_val key; | ||
81 | key.mv_size = sizeof(quint64); | 85 | key.mv_size = sizeof(quint64); | ||
82 | key.mv_data = static_cast<void*>(&docId); | 86 | key.mv_data = static_cast<void*>(&docId); | ||
83 | 87 | | |||
84 | MDB_val val; | 88 | MDB_val val{0, nullptr}; | ||
85 | int rc = mdb_get(m_txn, m_dbi, &key, &val); | 89 | int rc = mdb_get(m_txn, m_dbi, &key, &val); | ||
86 | if (rc == MDB_NOTFOUND) { | 90 | if (rc) { | ||
91 | if (rc != MDB_NOTFOUND) { | ||||
92 | qCDebug(ENGINE) << "DocumentIdDB::contains" << docId << mdb_strerror(rc); | ||||
93 | } | ||||
87 | return false; | 94 | return false; | ||
88 | } | 95 | } | ||
89 | Q_ASSERT_X(rc == 0, "DocumentIdDB::contains", mdb_strerror(rc)); | | |||
90 | 96 | | |||
91 | return true; | 97 | return true; | ||
92 | } | 98 | } | ||
93 | 99 | | |||
94 | void DocumentIdDB::del(quint64 docId) | 100 | void DocumentIdDB::del(quint64 docId) | ||
95 | { | 101 | { | ||
96 | Q_ASSERT(docId > 0); | 102 | Q_ASSERT(docId > 0); | ||
97 | 103 | | |||
98 | MDB_val key; | 104 | MDB_val key; | ||
99 | key.mv_size = sizeof(quint64); | 105 | key.mv_size = sizeof(quint64); | ||
100 | key.mv_data = static_cast<void*>(&docId); | 106 | key.mv_data = static_cast<void*>(&docId); | ||
101 | 107 | | |||
102 | int rc = mdb_del(m_txn, m_dbi, &key, nullptr); | 108 | int rc = mdb_del(m_txn, m_dbi, &key, nullptr); | ||
103 | if (rc == MDB_NOTFOUND) { | 109 | if (rc != 0 && rc != MDB_NOTFOUND) { | ||
104 | return; | 110 | qCDebug(ENGINE) << "DocumentIdDB::del" << docId << mdb_strerror(rc); | ||
105 | } | 111 | } | ||
106 | Q_ASSERT_X(rc == 0, "DocumentIdDB::del", mdb_strerror(rc)); | | |||
107 | } | 112 | } | ||
108 | 113 | | |||
109 | QVector<quint64> DocumentIdDB::fetchItems(int size) | 114 | QVector<quint64> DocumentIdDB::fetchItems(int size) | ||
110 | { | 115 | { | ||
111 | Q_ASSERT(size > 0); | 116 | Q_ASSERT(size > 0); | ||
112 | 117 | | |||
113 | MDB_cursor* cursor; | 118 | MDB_cursor* cursor; | ||
114 | mdb_cursor_open(m_txn, m_dbi, &cursor); | 119 | mdb_cursor_open(m_txn, m_dbi, &cursor); | ||
115 | 120 | | |||
116 | QVector<quint64> vec; | 121 | QVector<quint64> vec; | ||
117 | 122 | | |||
118 | for (int i = 0; i < size; i++) { | 123 | for (int i = 0; i < size; i++) { | ||
119 | MDB_val key; | 124 | MDB_val key{0, nullptr}; | ||
120 | int rc = mdb_cursor_get(cursor, &key, nullptr, MDB_NEXT); | 125 | int rc = mdb_cursor_get(cursor, &key, nullptr, MDB_NEXT); | ||
121 | if (rc == MDB_NOTFOUND) { | 126 | if (rc) { | ||
127 | qCDebug(ENGINE) << "DocumentIdDB::fetchItems" << size << mdb_strerror(rc); | ||||
122 | break; | 128 | break; | ||
123 | } | 129 | } | ||
124 | Q_ASSERT_X(rc == 0, "DocumentIdDB::fetchItems", mdb_strerror(rc)); | | |||
125 | 130 | | |||
126 | quint64 id = *(static_cast<quint64*>(key.mv_data)); | 131 | quint64 id = *(static_cast<quint64*>(key.mv_data)); | ||
127 | vec << id; | 132 | vec << id; | ||
128 | } | 133 | } | ||
129 | mdb_cursor_close(cursor); | 134 | mdb_cursor_close(cursor); | ||
130 | 135 | | |||
131 | return vec; | 136 | return vec; | ||
132 | } | 137 | } | ||
133 | 138 | | |||
134 | uint DocumentIdDB::size() | 139 | uint DocumentIdDB::size() | ||
135 | { | 140 | { | ||
136 | MDB_stat stat; | 141 | MDB_stat stat; | ||
137 | int rc = mdb_stat(m_txn, m_dbi, &stat); | 142 | int rc = mdb_stat(m_txn, m_dbi, &stat); | ||
138 | Q_ASSERT_X(rc == 0, "DocumentIdDB::size", mdb_strerror(rc)); | 143 | if (rc) { | ||
144 | qCDebug(ENGINE) << "DocumentIdDB::size" << mdb_strerror(rc); | ||||
145 | return 0; | ||||
146 | } | ||||
139 | 147 | | |||
140 | return stat.ms_entries; | 148 | return stat.ms_entries; | ||
141 | } | 149 | } | ||
142 | 150 | | |||
143 | QVector<quint64> DocumentIdDB::toTestVector() const | 151 | QVector<quint64> DocumentIdDB::toTestVector() const | ||
144 | { | 152 | { | ||
145 | MDB_cursor* cursor; | 153 | MDB_cursor* cursor; | ||
146 | mdb_cursor_open(m_txn, m_dbi, &cursor); | 154 | mdb_cursor_open(m_txn, m_dbi, &cursor); | ||
147 | 155 | | |||
148 | MDB_val key = {0, nullptr}; | 156 | MDB_val key{0, nullptr}; | ||
149 | MDB_val val; | 157 | MDB_val val{0, nullptr}; | ||
150 | 158 | | |||
151 | QVector<quint64> vec; | 159 | QVector<quint64> vec; | ||
152 | while (1) { | 160 | while (1) { | ||
153 | int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT); | 161 | int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT); | ||
154 | if (rc == MDB_NOTFOUND) { | 162 | if (rc) { | ||
163 | qCDebug(ENGINE) << "DocumentTimeDB::toTestMap" << mdb_strerror(rc); | ||||
155 | break; | 164 | break; | ||
156 | } | 165 | } | ||
157 | Q_ASSERT_X(rc == 0, "DocumentTimeDB::toTestMap", mdb_strerror(rc)); | | |||
158 | 166 | | |||
159 | const quint64 id = *(static_cast<quint64*>(key.mv_data)); | 167 | const quint64 id = *(static_cast<quint64*>(key.mv_data)); | ||
160 | vec << id; | 168 | vec << id; | ||
161 | } | 169 | } | ||
162 | 170 | | |||
163 | mdb_cursor_close(cursor); | 171 | mdb_cursor_close(cursor); | ||
164 | return vec; | 172 | return vec; | ||
165 | } | 173 | } |