Use new database.hpp 21/284621/1
authorjh9216.park <jh9216.park@samsung.com>
Tue, 22 Nov 2022 02:39:22 +0000 (21:39 -0500)
committerjh9216.park <jh9216.park@samsung.com>
Tue, 22 Nov 2022 02:39:22 +0000 (21:39 -0500)
- We don't need dbtype_cast<> any more because it provides type
conversion operators

Change-Id: Id8d0c86216f40716613cf94934c7c197d8fed44e
Signed-off-by: jh9216.park <jh9216.park@samsung.com>
src/modules/cion/cion_module.cc
src/modules/cion/database.hpp

index 42b4cf9..de10eec 100644 (file)
@@ -29,7 +29,6 @@
 namespace esd::module {
 
 using tizen_base::_;
-using tizen_base::dbtype_cast;
 
 namespace {
 
@@ -72,8 +71,8 @@ bool IsTableExist(const tizen_base::Database& db) {
     return false;
 
   for (const auto& i : r) {
-    auto [table_name] = i.Get<_>();
-    if (dbtype_cast<std::string>(table_name) == "cion")
+    std::string table_name = i.Get(0);
+    if (table_name == "cion")
       return true;
   }
 
@@ -230,8 +229,7 @@ bool CionModule::GetUuidFromDb(const tizen_base::Database& db,
     return false;
 
   for (const auto& i : r) {
-    auto [uuid_rec] = i.Get<_>();
-    uuid = dbtype_cast<std::string>(uuid_rec);
+    uuid = static_cast<std::string>(i.Get(0));
     return true;
   }
 
@@ -320,8 +318,7 @@ void CionModule::GetDisplayName(const std::string& appid,
       return;
 
     for (const auto& i : r) {
-      auto [display_name_rec] = i.Get<_>();
-      display_name = dbtype_cast<std::string>(display_name_rec);
+      display_name = static_cast<std::string>(i.Get(0));
       ret = 0;
       break;
     }
@@ -358,8 +355,7 @@ void CionModule::SetEnabled(const std::string& appid, const std::string& service
       return;
 
     for (const auto& i : r2) {
-      auto [display_name_rec] = i.Get<_>();
-      std::string display_name = dbtype_cast<std::string>(display_name_rec);
+      std::string display_name = i.Get(0);
       if (enabled)
         AddEnabledApp(service_name, appid, display_name);
       else
@@ -389,8 +385,7 @@ void CionModule::GetEnabled(const std::string& appid, const std::string& service
       return;
 
     for (const auto& i : r) {
-      auto [enabled_rec] = i.Get<_>();
-      enabled = (bool)dbtype_cast<int>(enabled_rec);
+      enabled = static_cast<bool>(static_cast<int>(i.Get(0)));
       ret = 0;
       break;
     }
@@ -414,9 +409,9 @@ std::optional<std::list<CionServiceInfo>> CionModule::GetEnabledServiceList() {
     for (const auto& i : r) {
       auto [service_name, appid, display_name] = i.Get<_, _, _>();
       info_list.push_back(
-          CionServiceInfo(dbtype_cast<std::string>(service_name),
-              dbtype_cast<std::string>(appid),
-              dbtype_cast<std::string>(display_name)));
+          CionServiceInfo(static_cast<std::string>(service_name),
+              static_cast<std::string>(appid),
+              static_cast<std::string>(display_name)));
     }
 
     return info_list;
index a31a90e..a2d8fca 100644 (file)
 
 namespace tizen_base {
 
-using DbType = std::variant<int, double, std::string,
-    std::vector<unsigned char>>;
-using _ = DbType;
-
-template<typename T>
-T dbtype_cast(DbType v) {
-  return std::get<T>(v);
-}
-
 template<std::size_t N>
 struct num {
   static const constexpr auto value = N;
@@ -53,6 +44,36 @@ void for_(F func) {
   for_(func, std::make_index_sequence<N>());
 }
 
+using DbType = std::variant<int, double, std::string,
+  std::vector<unsigned char>>;
+
+class AutoDbType {
+ public:
+  AutoDbType() = default;
+  AutoDbType(DbType db_type) : db_type_(db_type) {}
+
+  operator int () {
+    return std::get<int>(db_type_);
+  }
+
+  operator std::string () {
+    return std::get<std::string>(db_type_);
+  }
+
+  operator double () {
+    return std::get<double>(db_type_);
+  }
+
+  operator std::vector<unsigned char> () {
+    return std::get<std::vector<unsigned char>>(db_type_);
+  }
+
+ private:
+  DbType db_type_;
+};
+
+using _ = AutoDbType;
+
 class Database {
  public:
   class TransactionGuard {
@@ -219,7 +240,7 @@ class Database {
      public:
       Record(const sqlite3_stmt* stmt) : stmt_(stmt) {}
 
-      DbType Get(int pos) const {
+      AutoDbType Get(int pos) const {
         sqlite3_stmt* stmt = const_cast<sqlite3_stmt*>(stmt_);
         int type = sqlite3_column_type(stmt, pos);
         if (type == SQLITE_NULL)
@@ -247,7 +268,7 @@ class Database {
           throw std::runtime_error("invalid column type");
         }
 
-        return dbt;
+        return AutoDbType(dbt);
       }
 
       template <typename ...Types>