summaryrefslogtreecommitdiff
path: root/src/components/utils/src/sql_qt_wrapper/sql_database.cc
diff options
context:
space:
mode:
authorAndriy Byzhynar (GitHub) <AByzhynar@luxoft.com>2016-06-23 17:33:32 +0300
committerGitHub <noreply@github.com>2016-06-23 17:33:32 +0300
commit827bcaf0aa39348fa7ec4df796c4e124f7143169 (patch)
tree517a69ced2f09b702cb2368e7ae412efec2ea838 /src/components/utils/src/sql_qt_wrapper/sql_database.cc
parent833cac1b1de464f53d5709904a4ee24634be2936 (diff)
downloadsdl_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.cc88
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