Removed old deprecated c++ api.
[qt:qtjsondb.git] / src / 3rdparty / btree / qt / qbtreetxn.cpp
1 #include <QDebug>
2 #include <errno.h>
3 #include "btree.h"
4 #include "qbtree.h"
5 #include "qbtreetxn.h"
6
7 QBtreeTxn::QBtreeTxn(QBtree *btree, btree_txn *txn)
8     : mBtree(btree), mTxn(txn)
9 {
10     Q_ASSERT(mBtree && mTxn);
11 }
12
13 QBtreeTxn::~QBtreeTxn()
14 {
15     Q_ASSERT(mTxn && mBtree);
16 }
17
18 bool QBtreeTxn::commit(quint32 tag)
19 {
20     if (isReadOnly()) {
21         qWarning() << "QBtreeTxn::commit:" << "commiting read only txn doesn't make sense. Aborting instead";
22         mBtree->abort(this);
23         return true;
24     }
25     return mBtree->commit(this, tag);
26 }
27
28 void QBtreeTxn::abort()
29 {
30     mBtree->abort(this);
31 }
32
33 quint32 QBtreeTxn::tag() const
34 {
35     return btree_txn_get_tag(mTxn);
36 }
37
38 bool QBtreeTxn::get(const QByteArray &baKey, QByteArray *baValue) const
39 {
40     Q_ASSERT(baValue);
41     QBtreeData value;
42     bool ret = get(baKey.constData(), baKey.size(), &value);
43     *baValue = value.toByteArray();
44     return ret;
45 }
46
47 bool QBtreeTxn::get(const QBtreeData &key, QBtreeData *value) const
48 {
49     return get(key.constData(), key.size(), value);
50 }
51
52 bool QBtreeTxn::get(const char *key, int keySize, QBtreeData *value) const
53 {
54     Q_ASSERT(value);
55     struct btval btkey;
56     btkey.data = (void *)key;
57     btkey.size = keySize;
58     btkey.free_data = 0;
59     btkey.mp = 0;
60
61     struct btval btvalue;
62     int ok = btree_txn_get(mBtree->handle(), mTxn, &btkey, &btvalue);
63     if (ok != BT_SUCCESS)
64         return false;
65     *value = QBtreeData(&btvalue);
66     return true;
67 }
68
69 bool QBtreeTxn::put(const QByteArray &baKey, const QByteArray &baValue)
70 {
71     return put(baKey.constData(), baKey.size(), baValue.constData(), baValue.size());
72 }
73
74 bool QBtreeTxn::put(const QBtreeData &key, const QBtreeData &value)
75 {
76     return put(key.constData(), key.size(), value.constData(), value.size());
77 }
78
79 bool QBtreeTxn::put(const char *key, int keySize, const char *value, int valueSize)
80 {
81     struct btval btkey;
82     btkey.data = (void *)key;
83     btkey.size = keySize;
84     btkey.free_data = 0;
85     btkey.mp = 0;
86     struct btval btvalue;
87     btvalue.data = (void *)value;
88     btvalue.size = valueSize;
89     btvalue.free_data = 0;
90     btvalue.mp = 0;
91
92     int ok = btree_txn_put(mBtree->handle(), mTxn, &btkey, &btvalue, 0);
93     if (btree_txn_is_error(mTxn))
94         qDebug() << "btree_txn_put" << ok << errno << endl << mBtree->fileName();
95     return ok == BT_SUCCESS;
96 }
97
98 bool QBtreeTxn::remove(const QByteArray &baKey)
99 {
100     return remove(baKey.constData(), baKey.size());
101 }
102
103 bool QBtreeTxn::remove(const QBtreeData &key)
104 {
105     return remove(key.constData(), key.size());
106 }
107
108 bool QBtreeTxn::remove(const char *key, int keySize)
109 {
110     struct btval btkey;
111     btkey.data = (void *)key;
112     btkey.size = keySize;
113     btkey.free_data = 0;
114     btkey.mp = 0;
115
116     int ok = btree_txn_del(mBtree->handle(), mTxn, &btkey, 0);
117     if (btree_txn_is_error(mTxn))
118         qDebug() << "btree_txn_del" << ok << errno << endl << mBtree->fileName();
119     return ok == BT_SUCCESS;
120 }
121
122 bool QBtreeTxn::isReadOnly() const
123 {
124     Q_ASSERT(mTxn);
125     return btree_txn_is_read(mTxn) == 1;
126 }
127
128 bool QBtreeTxn::isReadWrite() const
129 {
130     Q_ASSERT(mTxn);
131     return btree_txn_is_read(mTxn) == 0;
132 }