From 63de53119e80fa93c6374f0db0c4cd5b2712f37c Mon Sep 17 00:00:00 2001 From: Benjamin Zengin Date: Tue, 5 Jul 2016 11:48:28 +0200 Subject: [PATCH] gsqlbackend: Adds query to return id of added key --- pdns/backends/gsql/gsqlbackend.cc | 19 ++++++++++++++++++- pdns/backends/gsql/gsqlbackend.hh | 4 ++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 2809d6359..79b51293f 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 6d92be4f7..d5deb3a20 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; -- 2.40.0