common/c-api/dbconnector.cpp (71 lines of code) (raw):
#include <cstring>
#include <string>
#include <utility>
#include "../dbconnector.h"
#include "dbconnector.h"
#include "util.h"
using namespace swss;
using namespace std;
void SWSSSonicDBConfig_initialize(const char *path) {
SWSSTry(SonicDBConfig::initialize(path));
}
void SWSSSonicDBConfig_initializeGlobalConfig(const char *path) {
SWSSTry(SonicDBConfig::initializeGlobalConfig(path));
}
SWSSDBConnector SWSSDBConnector_new_tcp(int32_t dbId, const char *hostname, uint16_t port,
uint32_t timeout) {
SWSSTry(return (SWSSDBConnector) new DBConnector(dbId, string(hostname), port, timeout));
}
SWSSDBConnector SWSSDBConnector_new_unix(int32_t dbId, const char *sock_path, uint32_t timeout) {
SWSSTry(return (SWSSDBConnector) new DBConnector(dbId, string(sock_path), timeout));
}
SWSSDBConnector SWSSDBConnector_new_named(const char *dbName, uint32_t timeout_ms, uint8_t isTcpConn) {
SWSSTry(return (SWSSDBConnector) new DBConnector(string(dbName), timeout_ms, isTcpConn));
}
void SWSSDBConnector_free(SWSSDBConnector db) {
delete (DBConnector *)db;
}
int8_t SWSSDBConnector_del(SWSSDBConnector db, const char *key) {
SWSSTry(return ((DBConnector *)db)->del(string(key)) ? 1 : 0);
}
void SWSSDBConnector_set(SWSSDBConnector db, const char *key, SWSSStrRef value) {
SWSSTry(((DBConnector *)db)->set(string(key), takeStrRef(value)));
}
SWSSString SWSSDBConnector_get(SWSSDBConnector db, const char *key) {
SWSSTry({
shared_ptr<string> s = ((DBConnector *)db)->get(string(key));
return s ? makeString(move(*s)) : nullptr;
});
}
int8_t SWSSDBConnector_exists(SWSSDBConnector db, const char *key) {
SWSSTry(return ((DBConnector *)db)->exists(string(key)) ? 1 : 0);
}
int8_t SWSSDBConnector_hdel(SWSSDBConnector db, const char *key, const char *field) {
SWSSTry(return ((DBConnector *)db)->hdel(string(key), string(field)) ? 1 : 0);
}
void SWSSDBConnector_hset(SWSSDBConnector db, const char *key, const char *field,
SWSSStrRef value) {
SWSSTry(((DBConnector *)db)->hset(string(key), string(field), takeStrRef(value)));
}
SWSSString SWSSDBConnector_hget(SWSSDBConnector db, const char *key, const char *field) {
SWSSTry({
shared_ptr<string> s = ((DBConnector *)db)->hget(string(key), string(field));
return s ? makeString(move(*s)) : nullptr;
});
}
SWSSFieldValueArray SWSSDBConnector_hgetall(SWSSDBConnector db, const char *key) {
SWSSTry({
auto map = ((DBConnector *)db)->hgetall(string(key));
// We can't move keys out of the map, we have to copy them, until C++17 map::extract so we
// copy them here into a vector to avoid needing an overload on makeFieldValueArray
vector<pair<string, string>> pairs;
pairs.reserve(map.size());
for (auto &pair : map)
pairs.push_back(make_pair(pair.first, move(pair.second)));
return makeFieldValueArray(std::move(pairs));
});
}
int8_t SWSSDBConnector_hexists(SWSSDBConnector db, const char *key, const char *field) {
SWSSTry(return ((DBConnector *)db)->hexists(string(key), string(field)) ? 1 : 0);
}
int8_t SWSSDBConnector_flushdb(SWSSDBConnector db) {
SWSSTry(return ((DBConnector *)db)->flushdb() ? 1 : 0);
}