]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
gsqlbackend: Adds query to return id of added key
authorBenjamin Zengin <b.zengin@yahoo.de>
Tue, 5 Jul 2016 09:48:28 +0000 (11:48 +0200)
committerBenjamin Zengin <b.zengin@yahoo.de>
Tue, 6 Sep 2016 09:32:38 +0000 (11:32 +0200)
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh

index 2809d63593acda9b124cc5b1679cbcd9d17b58b3..79b51293f2f78804ffb18ab3b1c2955610bd6122 100644 (file)
@@ -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)
index 6d92be4f7d941602c08ba549916b646382aac4be..d5deb3a200ed1f1c9f9d9881addc33ee6edaaf4a 100644 (file)
@@ -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;