aboutsummaryrefslogtreecommitdiff
path: root/brep/database-module.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'brep/database-module.cxx')
-rw-r--r--brep/database-module.cxx50
1 files changed, 50 insertions, 0 deletions
diff --git a/brep/database-module.cxx b/brep/database-module.cxx
new file mode 100644
index 0000000..630fd89
--- /dev/null
+++ b/brep/database-module.cxx
@@ -0,0 +1,50 @@
+// file : brep/database-module.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <brep/database-module>
+
+#include <odb/exceptions.hxx>
+
+#include <brep/options>
+#include <brep/database>
+
+namespace brep
+{
+ // While currently the user-defined copy constructor is not required (we
+ // don't need to deep copy nullptr's), it is a good idea to keep the
+ // placeholder ready for less trivial cases.
+ //
+ database_module::
+ database_module (const database_module& r)
+ : module (r),
+ retry_ (r.retry_),
+ db_ (r.initialized_ ? r.db_ : nullptr)
+ {
+ }
+
+ void database_module::
+ init (const options::db& o)
+ {
+ retry_ = o.db_retry ();
+ db_ = shared_database (o);
+ }
+
+ bool database_module::
+ handle (request& rq, response& rs, log& l)
+ try
+ {
+ return module::handle (rq, rs, l);
+ }
+ catch (const odb::recoverable& e)
+ {
+ if (retry_-- > 0)
+ {
+ MODULE_DIAG;
+ l1 ([&]{trace << e.what () << "; " << retry_ + 1 << " retries left";});
+ throw retry ();
+ }
+
+ throw;
+ }
+}