[svn] commit: r1384 - in /trunk/src/lib/auth: sqlite3_datasrc.cc tests/sqlite3_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Sat Mar 13 00:42:24 UTC 2010
Author: jinmei
Date: Sat Mar 13 00:42:23 2010
New Revision: 1384
Log:
prevented duplicate DB open
Modified:
trunk/src/lib/auth/sqlite3_datasrc.cc
trunk/src/lib/auth/tests/sqlite3_unittest.cc
Modified: trunk/src/lib/auth/sqlite3_datasrc.cc
==============================================================================
--- trunk/src/lib/auth/sqlite3_datasrc.cc (original)
+++ trunk/src/lib/auth/sqlite3_datasrc.cc Sat Mar 13 00:42:23 2010
@@ -37,7 +37,7 @@
namespace {
// Note: this cannot be std::string to avoid
// "static initialization order fiasco".
-static const char* DEFAULT_DB_FILE = "/tmp/zone.sqlite3";
+const char* DEFAULT_DB_FILE = "/tmp/zone.sqlite3";
}
//
@@ -95,7 +95,8 @@
return (i);
}
-static int
+namespace {
+int
importSqlite3Rows(sqlite3_stmt* query, const Name& qname, const RRClass& qclass,
const RRType& qtype, const bool nsec3_tree,
RRsetList& result_sets, uint32_t& flags)
@@ -180,6 +181,7 @@
}
return (rows);
+}
}
int
@@ -685,6 +687,9 @@
//
void
Sqlite3DataSrc::open(const string& name) {
+ if (db != NULL) {
+ isc_throw(Sqlite3Error, "Duplicate Sqlite3 open with " << name);
+ }
if (sqlite3_open(name.c_str(), &db) != 0) {
// sqlite3_close() must be called even when open fails.
sqlite3_close(db);
Modified: trunk/src/lib/auth/tests/sqlite3_unittest.cc
==============================================================================
--- trunk/src/lib/auth/tests/sqlite3_unittest.cc (original)
+++ trunk/src/lib/auth/tests/sqlite3_unittest.cc Sat Mar 13 00:42:23 2010
@@ -365,6 +365,11 @@
EXPECT_THROW(data_source.init(SQLITE_DBFILE_NOTEXIST), Sqlite3Error);
}
+TEST_F(Sqlite3DataSourceTest, doubleOpen) {
+ // An attempt of duplicate open should trigger an exception.
+ EXPECT_THROW(data_source.init(SQLITE_DBFILE_EXAMPLE), Sqlite3Error);
+}
+
TEST_F(Sqlite3DataSourceTest, findClosestEnclosure) {
NameMatch name_match(www_name);
data_source.findClosestEnclosure(name_match, rrclass);
More information about the bind10-changes
mailing list