From: Jelte Jansen Date: Thu, 7 Mar 2013 14:48:51 +0000 (+0100) Subject: [2821] Move MySqlHolder to header, and use as member X-Git-Tag: bind10-1.1.0beta1-release~58^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e58c2fd32cb85d37cd96ff8bb6a7cdf0f653a5a1;p=thirdparty%2Fkea.git [2821] Move MySqlHolder to header, and use as member Half-related change, if available, call mysql_library_end() at the end of the unit test run --- diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.cc b/src/lib/dhcpsrv/mysql_lease_mgr.cc index 364642506a..f029189ec1 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.cc +++ b/src/lib/dhcpsrv/mysql_lease_mgr.cc @@ -193,32 +193,6 @@ TaggedStatement tagged_statements[] = { {MySqlLeaseMgr::NUM_STATEMENTS, NULL} }; -// Small RAII object for safer initialization, will close the database -// connection upon destruction, unless release() has been called. -class MySQLHolder { -public: - MySQLHolder(MYSQL* mysql) : mysql_(mysql) {} - - ~MySQLHolder() { - if (mysql_) { - mysql_close(mysql_); - } - } - - MYSQL* get_ptr() { - return (mysql_); - } - - MYSQL* release() { - MYSQL* ptr = mysql_; - mysql_ = NULL; - return (ptr); - } - -private: - MYSQL* mysql_; -}; - }; // Anonymous namespace @@ -899,15 +873,7 @@ private: // MySqlLeaseMgr Constructor and Destructor MySqlLeaseMgr::MySqlLeaseMgr(const LeaseMgr::ParameterMap& parameters) - : LeaseMgr(parameters), mysql_(NULL) { - - // Allocate context for MySQL - MySQLHolder mysql_holder(mysql_init(NULL)); - - mysql_ = mysql_holder.get_ptr(); - if (mysql_ == NULL) { - isc_throw(DbOpenError, "unable to initialize MySQL"); - } + : LeaseMgr(parameters) { // Open the database. openDatabase(); @@ -929,9 +895,6 @@ MySqlLeaseMgr::MySqlLeaseMgr(const LeaseMgr::ParameterMap& parameters) // program and the database. exchange4_.reset(new MySqlLease4Exchange()); exchange6_.reset(new MySqlLease6Exchange()); - - // Let the real destructor take care of cleaning up now - mysql_holder.release(); } @@ -945,10 +908,6 @@ MySqlLeaseMgr::~MySqlLeaseMgr() { statements_[i] = NULL; } } - - // Close the database - mysql_close(mysql_); - mysql_ = NULL; } diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.h b/src/lib/dhcpsrv/mysql_lease_mgr.h index 62f4435078..253f30fa86 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.h +++ b/src/lib/dhcpsrv/mysql_lease_mgr.h @@ -26,6 +26,30 @@ namespace isc { namespace dhcp { +/// Small RAII object for safer initialization, will close the database +/// connection upon destruction +class MySqlHolder { +public: + MySqlHolder() : mysql_(mysql_init(NULL)) { + if (mysql_ == NULL) { + isc_throw(DbOpenError, "unable to initialize MySQL"); + } + } + + ~MySqlHolder() { + if (mysql_) { + mysql_close(mysql_); + } + } + + operator MYSQL*() const { + return (mysql_); + } + +private: + MYSQL* mysql_; +}; + // Define the current database schema values const uint32_t CURRENT_VERSION_VERSION = 1; @@ -379,7 +403,7 @@ public: /// @param cltt Reference to location where client last transmit time /// is put. static - void convertFromDatabaseTime(const MYSQL_TIME& expire, + void convertFromDatabaseTime(const MYSQL_TIME& expire, uint32_t valid_lifetime, time_t& cltt); ///@} @@ -616,7 +640,7 @@ private: /// declare them as "mutable".) boost::scoped_ptr exchange4_; ///< Exchange object boost::scoped_ptr exchange6_; ///< Exchange object - MYSQL* mysql_; ///< MySQL context object + MySqlHolder mysql_; std::vector statements_; ///< Prepared statements std::vector text_statements_; ///< Raw text of statements }; diff --git a/src/lib/dhcpsrv/tests/run_unittests.cc b/src/lib/dhcpsrv/tests/run_unittests.cc index d333a6fa0b..8235c59b21 100644 --- a/src/lib/dhcpsrv/tests/run_unittests.cc +++ b/src/lib/dhcpsrv/tests/run_unittests.cc @@ -12,10 +12,15 @@ // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR // PERFORMANCE OF THIS SOFTWARE. +#include #include #include +#ifdef HAVE_MYSQL +#include +#endif + int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); @@ -23,5 +28,9 @@ main(int argc, char* argv[]) { int result = RUN_ALL_TESTS(); +#ifdef HAVE_MYSQL + mysql_library_end(); +#endif + return (result); }