From: Sangwan Kwon Date: Thu, 12 Dec 2019 02:57:48 +0000 (+0900) Subject: Add transaction feature to database X-Git-Tag: submit/tizen/20200810.073515~136 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c41bad66337fa8c76456030d9e9c09ed470f9061;p=platform%2Fcore%2Fsecurity%2Fvist.git Add transaction feature to database - performance (500 insert statements) - DatabaseTests.no_transaction (2380 ms) DatabaseTests.transaction (16 ms) Signed-off-by: Sangwan Kwon --- diff --git a/src/vist/database/connection.hpp b/src/vist/database/connection.hpp index b4a9eee..bbaedf2 100644 --- a/src/vist/database/connection.hpp +++ b/src/vist/database/connection.hpp @@ -53,6 +53,16 @@ public: return filename; } + void transactionBegin() + { + this->exec("BEGIN TRANSACTION;"); + } + + void transactionEnd() + { + this->exec("END TRANSACTION;"); + } + int getErrorCode() const { return ::sqlite3_errcode(handle); diff --git a/src/vist/database/tests/database.cpp b/src/vist/database/tests/database.cpp index 60159c8..f3dc613 100644 --- a/src/vist/database/tests/database.cpp +++ b/src/vist/database/tests/database.cpp @@ -15,6 +15,7 @@ */ #include +#include #include #include @@ -192,3 +193,56 @@ TEST(DatabaseTests, column) EXPECT_TRUE(false) << e.what(); } } + +TEST(DatabaseTests, no_transaction) +{ + std::string query = "INSERT INTO CLIENT VALUES (NULL, 'TP', 'TK', 0, 5001)"; + + + try { + database::Connection db(TEST_DB_PATH); + int loop = 500; + while (loop--) + { + database::Statement(db, query).exec(); + } + } catch (const vist::Exception& e) { + EXPECT_TRUE(false) << e.what(); + } +} + +TEST(DatabaseTests, transaction) +{ + std::string query = "INSERT INTO CLIENT VALUES (NULL, 'TP', 'TK', 0, 5001)"; + + try { + database::Connection db(TEST_DB_PATH); + db.transactionBegin(); + int loop = 500; + while (loop--) + { + database::Statement(db, query).exec(); + } + db.transactionEnd(); + } catch (const vist::Exception& e) { + EXPECT_TRUE(false) << e.what(); + } +} + +TEST(DatabaseTests, transaction_RAW_STRING) +{ + std::string query = "INSERT INTO CLIENT VALUES (NULL, 'TP', 'TK', 0, 5001)"; + + try { + database::Connection db(TEST_DB_PATH); + db.exec("BEGIN TRANSACTION;"); + int loop = 500; + while (loop--) + { + database::Statement(db, query).exec(); + } + db.exec("END TRANSACTION;"); + } catch (const vist::Exception& e) { + EXPECT_TRUE(false) << e.what(); + } +}