]> granicus.if.org Git - pdns/commitdiff
Add transaction support to goracle
authorAki Tuomi <cmouse@desteem.org>
Wed, 8 Jul 2015 18:10:27 +0000 (21:10 +0300)
committerAki Tuomi <cmouse@cmouse.fi>
Thu, 9 Jul 2015 18:40:32 +0000 (21:40 +0300)
modules/goraclebackend/soracle.cc
modules/goraclebackend/soracle.hh

index aafe54415f9bf9a6d8dfe397ae811a7f30c9ae40..19e7aae934cc4e2b08a8e6234ae437f2623b0b5b 100644 (file)
@@ -13,6 +13,8 @@
 #include "pdns/namespaces.hh"
 #include "pdns/md5.hh"
 
+static AtomicCounter s_txid;
+
 bool SOracle::s_dolog;
 
 class SOracleStatement: public SSqlStatement {
@@ -464,6 +466,19 @@ SOracle::~SOracle()
   }
 }
 
+void SOracle::startTransaction() {
+  std::string cmd = "SET TRANSACTION NAME '" + boost::lexical_cast<std::string>(s_txid++) + "'";
+  execute(cmd);
+}
+
+void SOracle::commit() {
+  execute("COMMIT");
+}
+
+void SOracle::rollback() {
+  execute("ROLLBACK");
+}
+
 SSqlException SOracle::sPerrorException(const string &reason)
 {
   return SSqlException(reason);
index 689cb7403f02e22dce75cc4088bf558b5f4162f1..d61108053631e88f15430be224351625c59e6fc5 100644 (file)
@@ -8,6 +8,7 @@
 #include "pdns/utility.hh"
 #include <oci.h>
 #include <oratypes.h>
+#include "pdns/misc.hh"
 
 #ifndef dsword
 typedef sb4 dsword;
@@ -29,9 +30,9 @@ public:
   SSqlStatement* prepare(const string& query, int nparams);
   void execute(const string& query);
 
-  void startTransaction() {}
-  void commit() {}
-  void rollback() {}
+  void startTransaction();
+  void commit();
+  void rollback();
 private:
   OCIEnv*    d_environmentHandle;
   OCIError*  d_errorHandle;