From 431d1571449a5ea84feef191ad949fb601aac296 Mon Sep 17 00:00:00 2001 From: "jh9216.park" Date: Wed, 14 Dec 2022 19:38:27 -0500 Subject: [PATCH] Change type conversion operators in class 'Result' - Operator 'bool' is useful operator to check the result. So I'd like to use it easily. - Behavior changes: - Change type 'bool' conversion operator from explicit to implicit. - Change type 'const char*' conversion operator from implicit to explicit. Change-Id: I3dc5ab3be7a080e2b816a5e94eed0f68854bcb85 Signed-off-by: jh9216.park --- .../tizen-database_unittests/src/test_database.cc | 59 +++++++++++----------- tizen-database/README.md | 18 +++---- tizen-database/database.hpp | 8 +-- 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/tests/tizen-database_unittests/src/test_database.cc b/tests/tizen-database_unittests/src/test_database.cc index a582767..897dbd6 100644 --- a/tests/tizen-database_unittests/src/test_database.cc +++ b/tests/tizen-database_unittests/src/test_database.cc @@ -45,7 +45,7 @@ TEST(DBBasicTest, create_table) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); auto r = db.Exec({ Q_CREATE_TABLE }); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST(DBBasicTest, drop_table) { @@ -53,7 +53,7 @@ TEST(DBBasicTest, drop_table) { db.Exec({ Q_CREATE_TABLE }); auto r1 = db.Exec({ Q_DROP_TABLE }); - EXPECT_TRUE(static_cast(r1)); + EXPECT_TRUE(r1); } TEST(DBBasicTest, db_move_ctor) { @@ -103,23 +103,23 @@ class ResultTest : public ::testing::Test { TEST_F(ResultTest, result_move_ctor) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE); tizen_base::Database::Result r = db.Exec({ Q_CREATE_TABLE }); - ASSERT_TRUE(static_cast(r)); + ASSERT_TRUE(r); tizen_base::Database::Result r2(std::move(r)); - EXPECT_FALSE(static_cast(r)); - EXPECT_TRUE(static_cast(r2)); + EXPECT_FALSE(r); + EXPECT_TRUE(r2); } TEST_F(ResultTest, result_move_assignment) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE); tizen_base::Database::Result r = db.Exec({ Q_CREATE_TABLE }); - ASSERT_TRUE(static_cast(r)); + ASSERT_TRUE(r); tizen_base::Database::Result r2; - ASSERT_FALSE(static_cast(r2)); + ASSERT_FALSE(r2); r2 = std::move(r); - EXPECT_FALSE(static_cast(r)); - EXPECT_TRUE(static_cast(r2)); + EXPECT_FALSE(r); + EXPECT_TRUE(r2); } class DatabaseTest : public ::testing::Test { @@ -144,9 +144,9 @@ class DatabaseTest : public ::testing::Test { .Bind(std::vector {'9', '2', '1', '6' }); auto r1 = db.Exec(q); - ASSERT_TRUE(static_cast(r1)); + ASSERT_TRUE(r1); auto r2 = db.Exec(q); - ASSERT_TRUE(static_cast(r2)); + ASSERT_TRUE(r2); } void SetDefaultWithNull() { @@ -158,9 +158,9 @@ class DatabaseTest : public ::testing::Test { .Bind(std::nullopt); auto r1 = db.Exec(q); - ASSERT_TRUE(static_cast(r1)); + ASSERT_TRUE(r1); auto r2 = db.Exec(q); - ASSERT_TRUE(static_cast(r2)); + ASSERT_TRUE(r2); } }; @@ -173,7 +173,7 @@ TEST_F(DatabaseTest, test_insert) { .Bind(std::vector {'9', '2', '1', '6' }); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST_F(DatabaseTest, test_insert_pos) { @@ -185,7 +185,7 @@ TEST_F(DatabaseTest, test_insert_pos) { .Bind(104, std::vector {'9', '2', '1', '6' }); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST_F(DatabaseTest, test_insert_name) { @@ -197,7 +197,7 @@ TEST_F(DatabaseTest, test_insert_name) { .Bind(":data", std::vector {'9', '2', '1', '6' }); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST_F(DatabaseTest, test_insert_name_and_data_with_null) { @@ -209,7 +209,7 @@ TEST_F(DatabaseTest, test_insert_name_and_data_with_null) { .Bind(":data", std::nullopt); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST_F(DatabaseTest, test_reuse_result) { @@ -220,7 +220,7 @@ TEST_F(DatabaseTest, test_reuse_result) { .Bind(9.216) .Bind(std::vector {'9', '2', '1', '6' }); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); q.Reset() .Bind("gugu") @@ -249,7 +249,7 @@ TEST_F(DatabaseTest, test_set_empty_string_as_null) { .SetEmptyVectorAsNull(true) .Bind(std::vector {}); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); r = db.Exec({ Q_SELECT }); auto rec = r.GetFirstRecord(); @@ -265,7 +265,7 @@ TEST_F(DatabaseTest, test_select) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE); auto r = db.Exec({ Q_SELECT }); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); int cnt = 0; for (const auto& i : r) { auto [name, num, val, data] = i.Get<_, _, _, _>(); @@ -290,7 +290,7 @@ TEST_F(DatabaseTest, test_select2) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE); auto r = db.Exec({ Q_SELECT }); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); for (const auto& i : r) { std::string name = static_cast(i.Get(0)); double val = static_cast(i.Get(2)); @@ -305,7 +305,7 @@ TEST_F(DatabaseTest, test_select3) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE); auto r = db.Exec({ Q_SELECT }); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); for (const auto& i : r) { std::optional name = i.Get(0); double val = static_cast(i.Get(2)); @@ -322,7 +322,7 @@ TEST_F(DatabaseTest, test_select4) { auto r = db.Exec({ Q_SELECT }); int cnt = 0; - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); for (const auto& i : r) { (void)i; cnt++; @@ -416,7 +416,7 @@ TEST_F(DatabaseTest, test_GetFirstRecord) { tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE); auto r = db.Exec({ Q_SELECT }); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); auto rec = r.GetFirstRecord(); EXPECT_TRUE(rec); @@ -433,7 +433,7 @@ TEST_F(DatabaseTest, test_update) { .Bind("gugu"); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST_F(DatabaseTest, test_delete) { @@ -443,7 +443,7 @@ TEST_F(DatabaseTest, test_delete) { .Bind("gogo"); auto r = db.Exec(q); - EXPECT_TRUE(static_cast(r)); + EXPECT_TRUE(r); } TEST_F(DatabaseTest, test_delete_n) { @@ -452,9 +452,10 @@ TEST_F(DatabaseTest, test_delete_n) { .Bind("gogo"); auto r = db.Exec(q); - EXPECT_FALSE(static_cast(r)); + EXPECT_FALSE(r); EXPECT_EQ(static_cast(r), SQLITE_READONLY); - EXPECT_STREQ(r, "attempt to write a readonly database"); + EXPECT_STREQ(static_cast(r), + "attempt to write a readonly database"); } TEST_F(DatabaseTest, test_transaction_commit) { @@ -466,7 +467,7 @@ TEST_F(DatabaseTest, test_transaction_commit) { .Bind(9.216) .Bind(std::vector {'9', '2', '1', '6' }); auto r = db.Exec(q); - ASSERT_TRUE(static_cast(r)); + ASSERT_TRUE(r); int ret = guard.Commit(); EXPECT_EQ(ret, SQLITE_OK); diff --git a/tizen-database/README.md b/tizen-database/README.md index d16bc6f..00b5e94 100644 --- a/tizen-database/README.md +++ b/tizen-database/README.md @@ -90,22 +90,22 @@ void test() { } ``` -### Explicit 'bool' type and 'int' type conversion operator +### 'bool' type and 'int' type conversion operator - 'bool' type operator is supported to check errors. - 'int' type operator is supported to get error number. ```cpp auto r = db.Exec(q); - if (!static_cast(r)) { + if (!r) { std::cout << "error code:" << static_cast(r) << std::endl; } ``` -### Implicit 'const char*' type conversion operator +### 'const char*' type conversion operator - 'const char*' type operator is supported to get error string ```cpp auto r = db.Exec(q); - if (!static_cast(r)) { - std::cout << "error message:" << r << std::endl; + if (!r) { + std::cout << "error message:" << static_cast(r) << std::endl; } ``` @@ -146,11 +146,11 @@ void test() { auto guard = db.CreateTransactionGuard(); auto r = db.Exec({ "INSERT INTO MyTable(name, id) VALUES('gogo', 1);" }); - if (!static_cast(r)) + if (!r) return; // Rollback auto r2 = db.Exec({ "INSERT INTO MyTable(name, id) VALUES('gugu', 2);" }); - if (!static_cast(r2)) + if (!r2) return; // Rollback guard.Commit(); @@ -192,7 +192,7 @@ void test() { .Bind(9.216) .Bind( std::vector {'9', '2', '1', '6' } ); auto r = db.Exec(q); - if (!static_cast(r)) { + if (!r) { std::cout << "insert failed:" << r << std::endl; std::cout << "error code:" << static_cast(r) << std::endl; } @@ -209,7 +209,7 @@ void test() { .Bind(":val", 9.216) .Bind(":data", std::vector {'9', '2', '1', '6' }); auto r = db.Exec(q); - if (!static_cast(r)) { + if (!r) { std::cout << "insert failed:" << r << std::endl; std::cout << "error code:" << static_cast(r) << std::endl; } diff --git a/tizen-database/database.hpp b/tizen-database/database.hpp index 9714251..5effc55 100644 --- a/tizen-database/database.hpp +++ b/tizen-database/database.hpp @@ -445,19 +445,19 @@ class Database { return Iterator(nullptr); } - explicit operator bool() { + operator bool() const { if (stmt_ == nullptr) return false; return true; } - explicit operator int() { + explicit operator int() const { if (db_ == nullptr) return SQLITE_ERROR; return sqlite3_errcode(db_); } - operator const char*() { + explicit operator const char*() const { if (db_ == nullptr) return ""; return sqlite3_errmsg(db_); @@ -578,7 +578,7 @@ class Database { db.db_ = nullptr; } - explicit operator bool() { + explicit operator bool() const { if (db_ == nullptr) return false; return true; -- 2.7.4