From 2260790118358449a18527fcd9e6ff46d2caccf7 Mon Sep 17 00:00:00 2001 From: dec05eba <0xdec05eba@gmail.com> Date: Mon, 14 May 2018 22:25:26 +0200 Subject: Implement node load/fetch order --- src/DatabaseStorage.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'src/DatabaseStorage.cpp') diff --git a/src/DatabaseStorage.cpp b/src/DatabaseStorage.cpp index 6064ee5..8bef77e 100644 --- a/src/DatabaseStorage.cpp +++ b/src/DatabaseStorage.cpp @@ -215,11 +215,19 @@ namespace odhtdb cleanup(); } - void DatabaseStorage::loadNode(const Hash &nodeHash) + void DatabaseStorage::loadNode(const Hash &nodeHash, DatabaseLoadOrder loadOrder) { + string orderByString; + if(loadOrder == DatabaseLoadOrder::OLDEST_FIRST) + orderByString = " ORDER BY timestamp ASC"; + else if(loadOrder == DatabaseLoadOrder::NEWEST_FIRST) + orderByString = " ORDER BY timestamp DESC"; + if(database->onCreateNodeCallbackFunc) { - SqlQuery nodeQuery(sqliteDb, "SELECT timestamp, creatorPublicKey, adminGroupId From Node WHERE nodeHash = ?", { DataView(nodeHash.getData(), nodeHash.getSize()) }); + string queryStr = "SELECT timestamp, creatorPublicKey, adminGroupId From Node WHERE nodeHash = ?"; + queryStr += orderByString; + SqlQuery nodeQuery(sqliteDb, queryStr.c_str(), { DataView(nodeHash.getData(), nodeHash.getSize()) }); while(nodeQuery.next()) { u64 timestamp = nodeQuery.getInt64(0); @@ -234,7 +242,9 @@ namespace odhtdb } } - SqlQuery nodeQuery(sqliteDb, "SELECT id, requestHash, operation, timestamp, creatorPublicKey From NodeAddData WHERE node = ? AND decrypted = 1", { DataView(nodeHash.getData(), nodeHash.getSize()) }); + string queryStr = "SELECT id, requestHash, operation, timestamp, creatorPublicKey From NodeAddData WHERE node = ? AND decrypted = 1"; + queryStr += orderByString; + SqlQuery nodeQuery(sqliteDb, queryStr.c_str(), { DataView(nodeHash.getData(), nodeHash.getSize()) }); while(nodeQuery.next()) { i64 rowId = nodeQuery.getInt64(0); @@ -732,9 +742,17 @@ namespace odhtdb } } - void DatabaseStorage::fetchNodeAddDataRaw(const Hash &nodeHash, FetchNodeAddDataRawCallbackFunc callbackFunc) + void DatabaseStorage::fetchNodeAddDataRaw(const Hash &nodeHash, FetchNodeAddDataRawCallbackFunc callbackFunc, DatabaseFetchOrder fetchOrder) { - SqlQuery query(sqliteDb, "SELECT rawData.data, nodeAddData.creatorPublicKey, nodeAddData.userActionCounter From NodeAddData AS nodeAddData INNER JOIN NodeAddDataRaw AS rawData ON rawData.nodeAddDataId = nodeAddData.id WHERE nodeAddData.node = ?", { DataView(nodeHash.getData(), nodeHash.getSize()) }); + string orderByString; + if(fetchOrder == DatabaseFetchOrder::OLDEST_FIRST) + orderByString = " ORDER BY nodeAddData.timestamp ASC"; + else if(fetchOrder == DatabaseFetchOrder::NEWEST_FIRST) + orderByString = " ORDER BY nodeAddData.timestamp DESC"; + + string queryStr = "SELECT rawData.data, nodeAddData.creatorPublicKey, nodeAddData.userActionCounter From NodeAddData AS nodeAddData INNER JOIN NodeAddDataRaw AS rawData ON rawData.nodeAddDataId = nodeAddData.id WHERE nodeAddData.node = ?"; + queryStr += orderByString; + SqlQuery query(sqliteDb, queryStr.c_str(), { DataView(nodeHash.getData(), nodeHash.getSize()) }); while(query.next()) { const DataView rawData = query.getBlob(0); -- cgit v1.2.3