diff options
author | Andriy Byzhynar (GitHub) <AByzhynar@luxoft.com> | 2016-06-23 17:33:32 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-23 17:33:32 +0300 |
commit | 827bcaf0aa39348fa7ec4df796c4e124f7143169 (patch) | |
tree | 517a69ced2f09b702cb2368e7ae412efec2ea838 /src/components/utils/src/sql_qt_wrapper/sql_database.cc | |
parent | 833cac1b1de464f53d5709904a4ee24634be2936 (diff) | |
download | sdl_core-827bcaf0aa39348fa7ec4df796c4e124f7143169.tar.gz |
Revert "Cover resumption with unit tests"revert-618-feature/Cover_resumption_with_unit_tests
Diffstat (limited to 'src/components/utils/src/sql_qt_wrapper/sql_database.cc')
-rw-r--r-- | src/components/utils/src/sql_qt_wrapper/sql_database.cc | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/components/utils/src/sql_qt_wrapper/sql_database.cc b/src/components/utils/src/sql_qt_wrapper/sql_database.cc new file mode 100644 index 0000000000..203cfdaa16 --- /dev/null +++ b/src/components/utils/src/sql_qt_wrapper/sql_database.cc @@ -0,0 +1,88 @@ +#include "sql_qt_wrapper/sql_database.h" + +#include <QSqlError> + +namespace { +const QString kDatabaseExtension = ".sqlite"; +} // namespace + +namespace utils { +namespace dbms { + +SQLDatabase::SQLDatabase() : database_path_() {} + +SQLDatabase::SQLDatabase(const std::string& database_path, + const std::string& connection_name) + : database_path_((database_path + kDatabaseExtension.toStdString()).c_str()) + , connection_name_(connection_name.c_str()) { + db_ = QSqlDatabase::addDatabase("QSQLITE", connection_name_); +} + +SQLDatabase::~SQLDatabase() { + Close(); + sync_primitives::AutoLock auto_lock(conn_lock_); + /* + * All database queries and connections should be destroyed + * before database removing. See + * http://doc.qt.io/qt-5/qsqldatabase.html#removeDatabase + */ + db_ = QSqlDatabase(); + QSqlDatabase::removeDatabase(connection_name_); +} + +bool SQLDatabase::Open() { + sync_primitives::AutoLock auto_lock(conn_lock_); + db_.setDatabaseName(database_path_); + return db_.open(); +} + +void SQLDatabase::Close() { + sync_primitives::AutoLock auto_lock(conn_lock_); + if (db_.isOpen()) { + db_.close(); + } +} + +bool SQLDatabase::BeginTransaction() { + sync_primitives::AutoLock auto_lock(conn_lock_); + return db_.transaction(); +} + +bool SQLDatabase::CommitTransaction() { + sync_primitives::AutoLock auto_lock(conn_lock_); + return db_.commit(); +} + +bool SQLDatabase::RollbackTransaction() { + sync_primitives::AutoLock auto_lock(conn_lock_); + return db_.rollback(); +} + +SQLError SQLDatabase::LastError() const { + sync_primitives::AutoLock auto_lock(conn_lock_); + return SQLError(db_.lastError()); +} + +bool SQLDatabase::HasErrors() const { + sync_primitives::AutoLock auto_lock(conn_lock_); + return db_.lastError().type() != QSqlError::NoError; +} + +std::string SQLDatabase::get_path() const { + return database_path_.toStdString(); +} + +bool SQLDatabase::IsReadWrite() { + return true; +} + +SQLDatabase::operator QSqlDatabase() const { + return db_; +} + +bool SQLDatabase::Backup() { + return true; +} + +} // namespace dbms +} // namespace utils |