[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/utils/charm/trunk
From: Mirko Boehm <mirko () kde ! org>
Date: 2010-03-25 21:30:29
Message-ID: 20100325213029.35C33AC881 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1107518 by mirko:
- add a not fully complete test to verify database transaction support
- add more error handling to the transactor
M +1 -1 CMakeLists.txt
M +25 -2 Core/SqlRaiiTransactor.h
M +12 -0 Tests/CMakeLists.txt
A Tests/SqlTransactionTests.cpp [License: UNKNOWN]
A Tests/SqlTransactionTests.h [License: UNKNOWN]
M +1 -1 Tools/TimesheetProcessor/CommandLine.cpp
M +6 -0 Tools/TimesheetProcessor/Database.cpp
--- trunk/playground/utils/charm/trunk/CMakeLists.txt #1107517:1107518
@@ -1,7 +1,7 @@
# this is the CMake Project File for Charm
PROJECT( Charm )
SET( Charm_VERSION_MAJOR "1" )
-SET( Charm_VERSION_MINOR "3" )
+SET( Charm_VERSION_MINOR "4" )
SET( Charm_VERSION_PATCH "0" )
SET( Charm_VERSION_COUNT 3 )
SET( Charm_VERSION "${Charm_VERSION_MAJOR}.${Charm_VERSION_MINOR}.${Charm_VERSION_PATCH}" \
)
--- trunk/playground/utils/charm/trunk/Core/SqlRaiiTransactor.h #1107517:1107518
@@ -1,25 +1,48 @@
#ifndef SQLRAIITRANSACTOR_H
#define SQLRAIITRANSACTOR_H
+#include <exception>
+
#include <QSqlDatabase>
+#include <QSqlDriver>
#include <QSqlError>
class SqlRaiiTransactor {
public:
+ class TransactionException : public std::exception {
+ public:
+ explicit TransactionException( const QString& text = QString() )
+ : mWhat( text )
+ {}
+
+ ~TransactionException() throw()
+ {}
+
+ const char* what() const throw() {
+ return qPrintable( mWhat );
+ }
+ private:
+ QString mWhat;
+ };
+
SqlRaiiTransactor( QSqlDatabase& database )
: m_database ( database )
{
+ if ( ! database.driver()->hasFeature( QSqlDriver::Transactions ) ) {
+ throw TransactionException( QObject::tr( "Database driver does not \
support transactions." ) ); + }
m_active = m_database.transaction();
if ( ! m_active ) {
qWarning() << "Failed to begin transaction: " << \
m_database.lastError().text(); + throw TransactionException( QObject::tr( \
"Starting a transaction failed." ) ); }
}
~SqlRaiiTransactor() {
if ( m_active ) {
if ( ! m_database.rollback() ) {
+ throw TransactionException( QObject::tr( "Database error, \
transaction rollback failed." ) );
qWarning() << "Failed to rollback transaction: " << \
m_database.lastError().text();
- // throw database_failure_exception
}
}
}
@@ -34,7 +57,7 @@
m_active = false;
return true;
}
- qWarning() << "Failed to commit transaction: " << \
m_database.lastError().text(); + throw TransactionException( QObject::tr( \
"Failed to commit transaction: " ) + m_database.lastError().text() ); }
return false;
}
--- trunk/playground/utils/charm/trunk/Tests/CMakeLists.txt #1107517:1107518
@@ -93,6 +93,17 @@
TARGET_LINK_LIBRARIES( ImportExportTests ${QT_QTXML_LIBRARY} )
TARGET_LINK_LIBRARIES( ImportExportTests ${QT_LIBRARIES} )
+ # Sql Transaction Tests:
+ SET( SqlTransactionTests_SRCS SqlTransactionTests.cpp )
+
+ QT4_AUTOMOC( ${SqlTransactionTests_SRCS} )
+
+ ADD_EXECUTABLE( SqlTransactionTests ${SqlTransactionTests_SRCS} )
+
+ TARGET_LINK_LIBRARIES( SqlTransactionTests ${QT_QTTEST_LIBRARY} )
+ TARGET_LINK_LIBRARIES( SqlTransactionTests ${QT_QTXML_LIBRARY} )
+ TARGET_LINK_LIBRARIES( SqlTransactionTests ${QT_LIBRARIES} )
+
# now add the tests:
ADD_TEST( SqLiteStorageTests ${EXECUTABLE_OUTPUT_PATH}/SqLiteStorageTests )
ADD_TEST( ControllerTests ${EXECUTABLE_OUTPUT_PATH}/ControllerTests )
@@ -101,6 +112,7 @@
ADD_TEST( XmlSerializationTests ${EXECUTABLE_OUTPUT_PATH}/XmlSerializationTests )
ADD_TEST( TaskStructureTests ${EXECUTABLE_OUTPUT_PATH}/TaskStructureTests )
ADD_TEST( ImportExportTests ${EXECUTABLE_OUTPUT_PATH}/ImportExportTests )
+ ADD_TEST( SqlTransactionTests ${EXECUTABLE_OUTPUT_PATH}/SqlTransactionTests )
ENDIF ( QT4_FOUND )
--- trunk/playground/utils/charm/trunk/Tools/TimesheetProcessor/CommandLine.cpp \
#1107517:1107518 @@ -258,7 +258,7 @@
<< endl
<< " * TimesheetProzessor -v <-- print \
version" << endl
- << " * TimesheetProzessor -a filename -i index -u userid -m comment <-- add \
timesheet from file with index" + << " * TimesheetProzessor \
-a filename -u userid -m comment <-- add timesheet from file" << endl
<< " * TimesheetProzessor -r -i index -u userid <-- remove \
timesheet at index" << endl
--- trunk/playground/utils/charm/trunk/Tools/TimesheetProcessor/Database.cpp \
#1107517:1107518 @@ -1,4 +1,5 @@
#include <QSqlDatabase>
+#include <QSqlDriver>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
@@ -116,6 +117,11 @@
"\"%3\", driver said \"%4\"" ) .arg( database ) .arg( host ) .arg( \
error.driverText() ) .arg( error.databaseText() ); throw \
TimesheetProcessorException( msg ); }
+ // check if the driver has transaction support
+ if( ! m_storage.database().driver()->hasFeature( QSqlDriver::Transactions ) \
) { + QString msg = QObject::tr( "The database driver in use does not \
support transactions. Transactions are required." ); + throw \
TimesheetProcessorException( msg ); + }
}
void Database::initializeDatabase() throw (TimesheetProcessorException )
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic