[svn] commit: r2197 - in /branches/trac232/src: bin/auth/auth_srv.cc lib/datasrc/data_source.cc lib/datasrc/data_source.h lib/datasrc/sqlite3_datasrc.cc lib/datasrc/sqlite3_datasrc.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Jun 21 13:59:49 UTC 2010
Author: jelte
Date: Mon Jun 21 13:59:49 2010
New Revision: 2197
Log:
base add/delete/etc on a (right now still very basic) transaction class object
Modified:
branches/trac232/src/bin/auth/auth_srv.cc
branches/trac232/src/lib/datasrc/data_source.cc
branches/trac232/src/lib/datasrc/data_source.h
branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
Modified: branches/trac232/src/bin/auth/auth_srv.cc
==============================================================================
--- branches/trac232/src/bin/auth/auth_srv.cc (original)
+++ branches/trac232/src/bin/auth/auth_srv.cc Mon Jun 21 13:59:49 2010
@@ -340,16 +340,17 @@
RRTTL(args->get("rr_ttl")->stringValue()));
RdataPtr rdata = createRdata(rrset.getType(), rrset.getClass(), args->get("rr_rdata")->stringValue());
rrset.addRdata(rdata);
- DataSrc::Result r = datasource->startTransaction();
+ DataSrcTransaction* transaction;
+ DataSrc::Result r = datasource->startTransaction(&transaction, zone_name);
if (r != DataSrc::SUCCESS) {
return isc::config::createAnswer(r, "error starting transaction");
}
- r = datasource->addRRset(zone_name, rrset);
+ r = datasource->addRRset(transaction, rrset);
std::cout << "[XX] RESULT: " << r << std::endl;
if (r != DataSrc::SUCCESS) {
// log? rollback immediately?
}
- r = datasource->commitTransaction();
+ r = datasource->commitTransaction(transaction);
std::cout << "[XX] RESULT rollback: " << r << std::endl;
if (r == DataSrc::SUCCESS) {
return isc::config::createAnswer();
@@ -378,16 +379,17 @@
RRTTL(0));
RdataPtr rdata = createRdata(rrset.getType(), rrset.getClass(), args->get("rr_rdata")->stringValue());
rrset.addRdata(rdata);
- DataSrc::Result r = datasource->startTransaction();
+ DataSrcTransaction* transaction;
+ DataSrc::Result r = datasource->startTransaction(&transaction, zone_name);
if (r != DataSrc::SUCCESS) {
return isc::config::createAnswer(r, "error starting transaction");
}
- r = datasource->delRRset(zone_name, rrset);
+ r = datasource->delRRset(transaction, rrset);
std::cout << "[XX] RESULT: " << r << std::endl;
if (r != DataSrc::SUCCESS) {
// log? rollback immediately?
}
- r = datasource->commitTransaction();
+ r = datasource->commitTransaction(transaction);
std::cout << "[XX] RESULT rollback: " << r << std::endl;
if (r == DataSrc::SUCCESS) {
return isc::config::createAnswer();
Modified: branches/trac232/src/lib/datasrc/data_source.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.cc (original)
+++ branches/trac232/src/lib/datasrc/data_source.cc Mon Jun 21 13:59:49 2010
@@ -917,32 +917,32 @@
}
DataSrc::Result
-DataSrc::startTransaction()
+DataSrc::startTransaction(DataSrcTransaction **transaction UNUSED_PARAM, const Name& zonename UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-DataSrc::commitTransaction()
+DataSrc::commitTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-DataSrc::rollbackTransaction()
+DataSrc::rollbackTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-DataSrc::addRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+DataSrc::addRRset(DataSrcTransaction* transaction UNUSED_PARAM,
const isc::dns::RRset& rrset UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-DataSrc::delRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+DataSrc::delRRset(DataSrcTransaction* transaction UNUSED_PARAM,
const isc::dns::RRset& rrset UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
@@ -1007,25 +1007,25 @@
}
DataSrc::Result
-MetaDataSrc::startTransaction()
+MetaDataSrc::startTransaction(DataSrcTransaction **transaction UNUSED_PARAM, const Name& zonename UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-MetaDataSrc::commitTransaction()
+MetaDataSrc::commitTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-MetaDataSrc::rollbackTransaction()
+MetaDataSrc::rollbackTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
}
DataSrc::Result
-MetaDataSrc::addRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+MetaDataSrc::addRRset(DataSrcTransaction* transaction UNUSED_PARAM,
const isc::dns::RRset& rrset UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
@@ -1044,7 +1044,7 @@
}
DataSrc::Result
-MetaDataSrc::delRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+MetaDataSrc::delRRset(DataSrcTransaction* transaction UNUSED_PARAM,
const isc::dns::RRset& rrset UNUSED_PARAM)
{
return NOT_IMPLEMENTED;
Modified: branches/trac232/src/lib/datasrc/data_source.h
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.h (original)
+++ branches/trac232/src/lib/datasrc/data_source.h Mon Jun 21 13:59:49 2010
@@ -160,6 +160,15 @@
isc::dns::RRsetList& target) const = 0;
};
+// subclass this if you need specific data in your transaction model
+// TODO: probably needs private constructor, so that only startTransaction can make them
+// also probably should keep a pointer to a datasource
+// should this also provide the outwards interface?
+class DataSrcTransaction {
+public:
+ virtual ~DataSrcTransaction() {};
+};
+
// Base class for a DNS Data Source
class DataSrc : public AbstractDataSrc {
///
@@ -234,13 +243,13 @@
// class that creates the transaction on init, and move al write
// functions there. (keeping in mind that high-level write
// functions also need read functionality)
- virtual Result addRRset(const isc::dns::Name& zonename,
+ virtual Result addRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset);
- virtual Result delRRset(const isc::dns::Name& zonename,
+ virtual Result delRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset);
- virtual Result startTransaction();
- virtual Result commitTransaction();
- virtual Result rollbackTransaction();
+ virtual Result startTransaction(DataSrcTransaction** transaction, const isc::dns::Name& zonename);
+ virtual Result commitTransaction(DataSrcTransaction *transaction);
+ virtual Result rollbackTransaction(DataSrcTransaction *transaction);
private:
isc::dns::RRClass rrclass;
@@ -315,13 +324,13 @@
// Writable data sources
//
// see comments at DataSrc
- virtual Result startTransaction();
- virtual Result commitTransaction();
- virtual Result rollbackTransaction();
+ virtual Result startTransaction(DataSrcTransaction** transaction, const isc::dns::Name& zonename);
+ virtual Result commitTransaction(DataSrcTransaction* transaction);
+ virtual Result rollbackTransaction(DataSrcTransaction* transaction);
- virtual Result addRRset(const isc::dns::Name& zonename,
+ virtual Result addRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset);
- virtual Result delRRset(const isc::dns::Name& zonename,
+ virtual Result delRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset);
// end of writable data sources part
private:
Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc Mon Jun 21 13:59:49 2010
@@ -13,6 +13,8 @@
// PERFORMANCE OF THIS SOFTWARE.
// $Id$
+
+#include <config.h>
#include <string>
#include <sstream>
@@ -756,9 +758,26 @@
}
DataSrc::Result
-Sqlite3DataSrc::startTransaction()
+Sqlite3DataSrc::startTransaction(DataSrcTransaction **transaction, const Name& zonename)
{
int result = sqlite3_exec(dbparameters->db_, w_start_transaction_str, NULL, NULL, NULL);
+ if (result == SQLITE_OK) {
+ if (transaction) {
+ Sqlite3DataSrcTransaction *trans = new Sqlite3DataSrcTransaction();
+ trans->zone_id = hasExactZone(zonename.toText().c_str());
+ *transaction = trans;
+ }
+ return DataSrc::SUCCESS;
+ } else {
+ return DataSrc::ERROR;
+ }
+}
+
+DataSrc::Result
+Sqlite3DataSrc::commitTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
+{
+ int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
+ delete transaction;
if (result == SQLITE_OK) {
return DataSrc::SUCCESS;
} else {
@@ -767,20 +786,10 @@
}
DataSrc::Result
-Sqlite3DataSrc::commitTransaction()
-{
- int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
- if (result == SQLITE_OK) {
- return DataSrc::SUCCESS;
- } else {
- return DataSrc::ERROR;
- }
-}
-
-DataSrc::Result
-Sqlite3DataSrc::rollbackTransaction()
+Sqlite3DataSrc::rollbackTransaction(DataSrcTransaction *transaction UNUSED_PARAM)
{
int result = sqlite3_exec(dbparameters->db_, w_rollback_transaction_str, NULL, NULL, NULL);
+ delete transaction;
if (result == SQLITE_OK) {
return DataSrc::SUCCESS;
} else {
@@ -862,13 +871,12 @@
}
DataSrc::Result
-Sqlite3DataSrc::addRRset(const isc::dns::Name& zonename,
+Sqlite3DataSrc::addRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset)
{
std::cout << "[XX] addRR at sqlite3" << std::endl;
- int zone_id = hasExactZone(zonename.toText().c_str());
-
- std::cout << "[XX] zone id for: " << zonename << ": " << zone_id << std::endl;
+ Sqlite3DataSrcTransaction* trans = (Sqlite3DataSrcTransaction*) transaction;
+ std::cout << "[XX] zone id: " << trans->zone_id << std::endl;
RdataIteratorPtr rdp = rrset.getRdataIterator();
rdp->first();
@@ -876,7 +884,7 @@
std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
DataSrc::Result result = DataSrc::SUCCESS;
do {
- result = addRR(zone_id, rrset.getName(), rrset.getType(), rrset.getTTL(), rdp->getCurrent());
+ result = addRR(trans->zone_id, rrset.getName(), rrset.getType(), rrset.getTTL(), rdp->getCurrent());
if (result != DataSrc::SUCCESS) {
return result;
} else {
@@ -892,7 +900,6 @@
const isc::dns::RRType& rrtype,
const isc::dns::rdata::Rdata& rdata)
{
-
sqlite3_stmt* query = dbparameters->w_del_rr_;
sqlite3_reset(query);
@@ -941,13 +948,13 @@
}
DataSrc::Result
-Sqlite3DataSrc::delRRset(const isc::dns::Name& zonename,
+Sqlite3DataSrc::delRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset)
{
std::cout << "[XX] delRR at sqlite3" << std::endl;
- int zone_id = hasExactZone(zonename.toText().c_str());
+ Sqlite3DataSrcTransaction* trans = (Sqlite3DataSrcTransaction*) transaction;
- std::cout << "[XX] zone id for: " << zonename << ": " << zone_id << std::endl;
+ std::cout << "[XX] zone id for: " << trans->zone_id << std::endl;
RdataIteratorPtr rdp = rrset.getRdataIterator();
rdp->first();
@@ -955,7 +962,7 @@
std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
DataSrc::Result result = DataSrc::SUCCESS;
do {
- result = delRR(zone_id, rrset.getName(), rrset.getType(), rdp->getCurrent());
+ result = delRR(trans->zone_id, rrset.getName(), rrset.getType(), rdp->getCurrent());
if (result != DataSrc::SUCCESS) {
return result;
} else {
Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.h (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.h Mon Jun 21 13:59:49 2010
@@ -109,14 +109,14 @@
// hmz, should we have a transaction context object? (see comments
// in datasource.h
- Result startTransaction();
- Result commitTransaction();
- Result rollbackTransaction();
+ Result startTransaction(DataSrcTransaction **transaction, const isc::dns::Name& zonename);
+ Result commitTransaction(DataSrcTransaction *transaction);
+ Result rollbackTransaction(DataSrcTransaction *transaction);
//DataSrc::Result addRRset(const isc::dns::Name& zonename, const isc::dns::RRset& rrset);
- DataSrc::Result addRRset(const isc::dns::Name& zonename,
+ DataSrc::Result addRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset);
- DataSrc::Result delRRset(const isc::dns::Name& zonename,
+ DataSrc::Result delRRset(DataSrcTransaction* transaction,
const isc::dns::RRset& rrset);
private:
DataSrc::Result addRR(int zone_id,
@@ -147,6 +147,11 @@
Sqlite3Parameters* dbparameters;
};
+class Sqlite3DataSrcTransaction : public DataSrcTransaction {
+public:
+ int zone_id;
+};
+
}
}
More information about the bind10-changes
mailing list