From: Benjamin Zengin Date: Tue, 5 Jul 2016 09:48:28 +0000 (+0200) Subject: gsqlbackend: Adds query to return id of added key X-Git-Tag: dnsdist-1.1.0-beta2~136^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63de53119e80fa93c6374f0db0c4cd5b2712f37c;p=thirdparty%2Fpdns.git gsqlbackend: Adds query to return id of added key --- diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 2809d63593..79b51293f2 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -102,6 +102,7 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix) d_nullifyOrderNameAndUpdateAuthTypeQuery = getArg("nullify-ordername-and-update-auth-type-query"); d_AddDomainKeyQuery = getArg("add-domain-key-query"); + d_GetLastInsertedKeyIdQuery = getArg("get-last-inserted-key-id-query"); d_ListDomainKeysQuery = getArg("list-domain-keys-query"); d_GetAllDomainMetadataQuery = getArg("get-all-domain-metadata-query"); @@ -160,6 +161,7 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix) d_RemoveEmptyNonTerminalsFromZoneQuery_stmt = NULL; d_DeleteEmptyNonTerminalQuery_stmt = NULL; d_AddDomainKeyQuery_stmt = NULL; + d_GetLastInsertedKeyIdQuery_stmt = NULL; d_ListDomainKeysQuery_stmt = NULL; d_GetAllDomainMetadataQuery_stmt = NULL; d_GetDomainMetadataQuery_stmt = NULL; @@ -660,7 +662,22 @@ int GSQLBackend::addDomainKey(const DNSName& name, const KeyData& key) catch (SSqlException &e) { throw PDNSException("GSQLBackend unable to store key: "+e.txtReason()); } - return 1; // XXX FIXME, no idea how to get the id + + try { + d_GetLastInsertedKeyIdQuery_stmt->execute(); + if (!d_GetLastInsertedKeyIdQuery_stmt->hasNextRow()) + throw PDNSException("GSQLBackend unable to get id"); + SSqlStatement::row_t row; + d_GetLastInsertedKeyIdQuery_stmt->nextRow(row); + int id = std::stoi(row[0]); + d_GetLastInsertedKeyIdQuery_stmt->reset(); + return id; + } + catch (SSqlException &e) { + throw PDNSException("GSQLBackend unable to get id: "+e.txtReason()); + } + + return -1; } bool GSQLBackend::activateDomainKey(const DNSName& name, unsigned int id) diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 6d92be4f7d..d5deb3a200 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -88,6 +88,7 @@ public: d_RemoveEmptyNonTerminalsFromZoneQuery_stmt = d_db->prepare(d_RemoveEmptyNonTerminalsFromZoneQuery, 1); d_DeleteEmptyNonTerminalQuery_stmt = d_db->prepare(d_DeleteEmptyNonTerminalQuery, 2); d_AddDomainKeyQuery_stmt = d_db->prepare(d_AddDomainKeyQuery, 4); + d_GetLastInsertedKeyIdQuery_stmt = d_db->prepare(d_GetLastInsertedKeyIdQuery, 0); d_ListDomainKeysQuery_stmt = d_db->prepare(d_ListDomainKeysQuery, 1); d_GetAllDomainMetadataQuery_stmt = d_db->prepare(d_GetAllDomainMetadataQuery, 1); d_GetDomainMetadataQuery_stmt = d_db->prepare(d_GetDomainMetadataQuery, 2); @@ -154,6 +155,7 @@ public: release(&d_RemoveEmptyNonTerminalsFromZoneQuery_stmt); release(&d_DeleteEmptyNonTerminalQuery_stmt); release(&d_AddDomainKeyQuery_stmt); + release(&d_GetLastInsertedKeyIdQuery_stmt); release(&d_ListDomainKeysQuery_stmt); release(&d_GetAllDomainMetadataQuery_stmt); release(&d_GetDomainMetadataQuery_stmt); @@ -296,6 +298,7 @@ private: string d_DeleteEmptyNonTerminalQuery; string d_AddDomainKeyQuery; + string d_GetLastInsertedKeyIdQuery; string d_ListDomainKeysQuery; string d_GetAllDomainMetadataQuery; string d_GetDomainMetadataQuery; @@ -361,6 +364,7 @@ private: SSqlStatement* d_RemoveEmptyNonTerminalsFromZoneQuery_stmt; SSqlStatement* d_DeleteEmptyNonTerminalQuery_stmt; SSqlStatement* d_AddDomainKeyQuery_stmt; + SSqlStatement* d_GetLastInsertedKeyIdQuery_stmt; SSqlStatement* d_ListDomainKeysQuery_stmt; SSqlStatement* d_GetAllDomainMetadataQuery_stmt; SSqlStatement* d_GetDomainMetadataQuery_stmt;