Change type conversion operators in class 'Result' 70/285570/1
authorjh9216.park <jh9216.park@samsung.com>
Thu, 15 Dec 2022 00:38:27 +0000 (19:38 -0500)
committerjh9216.park <jh9216.park@samsung.com>
Thu, 15 Dec 2022 00:38:27 +0000 (19:38 -0500)
- 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 <jh9216.park@samsung.com>
tests/tizen-database_unittests/src/test_database.cc
tizen-database/README.md
tizen-database/database.hpp

index a582767..897dbd6 100644 (file)
@@ -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<bool>(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<bool>(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<bool>(r));
+  ASSERT_TRUE(r);
   tizen_base::Database::Result r2(std::move(r));
 
-  EXPECT_FALSE(static_cast<bool>(r));
-  EXPECT_TRUE(static_cast<bool>(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<bool>(r));
+  ASSERT_TRUE(r);
   tizen_base::Database::Result r2;
-  ASSERT_FALSE(static_cast<bool>(r2));
+  ASSERT_FALSE(r2);
   r2 = std::move(r);
 
-  EXPECT_FALSE(static_cast<bool>(r));
-  EXPECT_TRUE(static_cast<bool>(r2));
+  EXPECT_FALSE(r);
+  EXPECT_TRUE(r2);
 }
 
 class DatabaseTest : public ::testing::Test {
@@ -144,9 +144,9 @@ class DatabaseTest : public ::testing::Test {
         .Bind(std::vector<unsigned char> {'9', '2', '1', '6' });
 
     auto r1 = db.Exec(q);
-    ASSERT_TRUE(static_cast<bool>(r1));
+    ASSERT_TRUE(r1);
     auto r2 = db.Exec(q);
-    ASSERT_TRUE(static_cast<bool>(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<bool>(r1));
+    ASSERT_TRUE(r1);
     auto r2 = db.Exec(q);
-    ASSERT_TRUE(static_cast<bool>(r2));
+    ASSERT_TRUE(r2);
   }
 };
 
@@ -173,7 +173,7 @@ TEST_F(DatabaseTest, test_insert) {
       .Bind(std::vector<unsigned char> {'9', '2', '1', '6' });
   auto r = db.Exec(q);
 
-  EXPECT_TRUE(static_cast<bool>(r));
+  EXPECT_TRUE(r);
 }
 
 TEST_F(DatabaseTest, test_insert_pos) {
@@ -185,7 +185,7 @@ TEST_F(DatabaseTest, test_insert_pos) {
       .Bind(104, std::vector<unsigned char> {'9', '2', '1', '6' });
   auto r = db.Exec(q);
 
-  EXPECT_TRUE(static_cast<bool>(r));
+  EXPECT_TRUE(r);
 }
 
 TEST_F(DatabaseTest, test_insert_name) {
@@ -197,7 +197,7 @@ TEST_F(DatabaseTest, test_insert_name) {
       .Bind(":data", std::vector<unsigned char> {'9', '2', '1', '6' });
   auto r = db.Exec(q);
 
-  EXPECT_TRUE(static_cast<bool>(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<bool>(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<unsigned char> {'9', '2', '1', '6' });
   auto r = db.Exec(q);
-  EXPECT_TRUE(static_cast<bool>(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<unsigned char> {});
   auto r = db.Exec(q);
-  EXPECT_TRUE(static_cast<bool>(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<bool>(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<bool>(r));
+  EXPECT_TRUE(r);
   for (const auto& i : r) {
     std::string name = static_cast<std::string>(i.Get(0));
     double val = static_cast<double>(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<bool>(r));
+  EXPECT_TRUE(r);
   for (const auto& i : r) {
     std::optional<std::string> name = i.Get(0);
     double val = static_cast<double>(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<bool>(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<bool>(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<bool>(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<bool>(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<bool>(r));
+  EXPECT_FALSE(r);
   EXPECT_EQ(static_cast<int>(r), SQLITE_READONLY);
-  EXPECT_STREQ(r, "attempt to write a readonly database");
+  EXPECT_STREQ(static_cast<const char*>(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<unsigned char> {'9', '2', '1', '6' });
   auto r = db.Exec(q);
-  ASSERT_TRUE(static_cast<bool>(r));
+  ASSERT_TRUE(r);
   int ret = guard.Commit();
 
   EXPECT_EQ(ret, SQLITE_OK);
index d16bc6f..00b5e94 100644 (file)
@@ -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<bool>(r)) {
+  if (!r) {
     std::cout << "error code:" << static_cast<int>(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<bool>(r)) {
-    std::cout << "error message:" << r << std::endl;
+  if (!r) {
+    std::cout << "error message:" << static_cast<const char*>(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<bool>(r))
+  if (!r)
     return; // Rollback
 
   auto r2 = db.Exec({ "INSERT INTO MyTable(name, id) VALUES('gugu', 2);" });
-  if (!static_cast<bool>(r2))
+  if (!r2)
     return; // Rollback
 
   guard.Commit();
@@ -192,7 +192,7 @@ void test() {
       .Bind(9.216)
       .Bind( std::vector<unsigned char> {'9', '2', '1', '6' } );
   auto r = db.Exec(q);
-  if (!static_cast<bool>(r)) {
+  if (!r) {
     std::cout << "insert failed:" << r << std::endl;
     std::cout << "error code:" << static_cast<int>(r) << std::endl;
   }
@@ -209,7 +209,7 @@ void test() {
       .Bind(":val", 9.216)
       .Bind(":data", std::vector<unsigned char> {'9', '2', '1', '6' });
   auto r = db.Exec(q);
-  if (!static_cast<bool>(r)) {
+  if (!r) {
     std::cout << "insert failed:" << r << std::endl;
     std::cout << "error code:" << static_cast<int>(r) << std::endl;
   }
index 9714251..5effc55 100644 (file)
@@ -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;