Apply the updated Tuple & Database interfaces 15/122715/1
authorMu-Woong Lee <muwoong.lee@samsung.com>
Mon, 3 Apr 2017 07:53:02 +0000 (16:53 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Mon, 3 Apr 2017 07:53:02 +0000 (16:53 +0900)
Change-Id: Iae7af355b36ab506ee695ce01065995586b198fa
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
12 files changed:
include/private/ContextStoreSideGate.h
src/client/ContextStore.cpp
src/client/ContextStore.h
src/client/PlatformManagedStore.cpp
src/client/PlatformManagedStore.h
src/client/context_store.cpp
src/server-dummy/ContextStoreSideGate.cpp
src/server/ContextStoreClient.cpp
src/server/ContextStoreSideGate.cpp
src/server/Store.cpp
src/server/Store.h
src/server/StoreManager.cpp

index 7e870d7..777f6c5 100644 (file)
@@ -27,7 +27,7 @@ namespace ctx {
        public:
                ~ContextStoreSideGate();
 
-               int insert(const std::string& columns, std::vector<Tuple*>& tuples);
+               int insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& tuples);
 
                static ContextStoreSideGate getUserStore(const std::string& uri);
                static ContextStoreSideGate getSystemStore(const std::string& uri);
index 8f906f9..1e4d4a9 100644 (file)
@@ -36,17 +36,17 @@ ContextStore::~ContextStore()
 {
 }
 
-int ContextStore::insert(const std::string& columns, Tuple* record)
+int ContextStore::insert(const std::string& columns, std::shared_ptr<Tuple> record)
 {
        return E_SUPPORT;
 }
 
-int ContextStore::insert(const std::string& columns, std::vector<Tuple*>& records)
+int ContextStore::insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& records)
 {
        return E_SUPPORT;
 }
 
-int ContextStore::retrieve(const ContextStoreSearchQuery& query, std::vector<Tuple*>& records)
+int ContextStore::retrieve(const ContextStoreSearchQuery& query, std::vector<std::shared_ptr<Tuple>>* records)
 {
        return E_SUPPORT;
 }
index ccef9ea..01b8458 100644 (file)
@@ -42,9 +42,9 @@ namespace ctx {
        public:
                virtual ~ContextStore();
 
-               virtual int insert(const std::string& columns, Tuple* record);
-               virtual int insert(const std::string& columns, std::vector<Tuple*>& records);
-               virtual int retrieve(const ContextStoreSearchQuery& query, std::vector<Tuple*>& records);
+               virtual int insert(const std::string& columns, std::shared_ptr<Tuple> record);
+               virtual int insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& records);
+               virtual int retrieve(const ContextStoreSearchQuery& query, std::vector<std::shared_ptr<Tuple>>* records);
                virtual int remove(const std::string& selection);
 
                DataType getColumnType(const std::string& columnName);
index 295c878..81491c7 100644 (file)
@@ -44,10 +44,9 @@ int PlatformManagedStore::init(const std::string& uri)
        return E_NONE;
 }
 
-int PlatformManagedStore::insert(const std::string& columns, Tuple* record)
+int PlatformManagedStore::insert(const std::string& columns, std::shared_ptr<Tuple> record)
 {
        if (columns.empty() || record == NULL) {
-               delete record;
                return E_PARAM;
        }
 
@@ -55,12 +54,9 @@ int PlatformManagedStore::insert(const std::string& columns, Tuple* record)
        return __proxy->call(METHOD_INSERT, param);
 }
 
-int PlatformManagedStore::insert(const std::string& columns, std::vector<Tuple*>& records)
+int PlatformManagedStore::insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& records)
 {
        if (columns.empty() || records.empty()) {
-               for (auto& tuple : records) {
-                       delete tuple;
-               }
                records.clear();
                return E_PARAM;
        }
@@ -69,9 +65,9 @@ int PlatformManagedStore::insert(const std::string& columns, std::vector<Tuple*>
        return __proxy->call(METHOD_INSERT, param);
 }
 
-int PlatformManagedStore::retrieve(const ContextStoreSearchQuery& query, std::vector<Tuple*>& records)
+int PlatformManagedStore::retrieve(const ContextStoreSearchQuery& query, std::vector<std::shared_ptr<Tuple>>* records)
 {
-       IF_FAIL_RETURN(!query.projection.empty(), E_PARAM);
+       IF_FAIL_RETURN(!query.projection.empty() && records, E_PARAM);
 
        GVariant* param = g_variant_new("(ssssu)", __uri.c_str(),
                        query.projection.c_str(), query.selection.c_str(),
@@ -84,11 +80,16 @@ int PlatformManagedStore::retrieve(const ContextStoreSearchQuery& query, std::ve
        GVariant* vals = NULL;
        g_variant_get(outParam, "(v)", &vals);
 
-       records = Tuple::buildFrom(vals);
+       try {
+               *records = Tuple::buildFrom(vals);
+       } catch (std::exception& e) {
+               _E("Exception: %s", e.what());
+               error = E_FAILED;
+       }
 
        g_variant_unref(outParam);
 
-       return E_NONE;
+       return error;
 }
 
 int PlatformManagedStore::remove(const std::string& selection)
index 4ba7d89..a47943d 100644 (file)
@@ -32,9 +32,9 @@ namespace ctx {
 
                int init(const std::string& uri);
 
-               int insert(const std::string& columns, Tuple* record);
-               int insert(const std::string& columns, std::vector<Tuple*>& records);
-               int retrieve(const ContextStoreSearchQuery& query, std::vector<Tuple*>& records);
+               int insert(const std::string& columns, std::shared_ptr<Tuple> record);
+               int insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& records);
+               int retrieve(const ContextStoreSearchQuery& query, std::vector<std::shared_ptr<Tuple>>* records);
                int remove(const std::string& selection);
 
        private:
index 0451aab..376da75 100644 (file)
@@ -44,7 +44,7 @@ typedef struct _ctx_store_record_s {
 typedef struct _ctx_store_cursor_s {
        size_t index;
        std::vector<std::string> keys;
-       std::vector<Tuple*> tuples;
+       std::vector<std::shared_ptr<Tuple>> tuples;
 } ctx_store_cursor_s;
 
 static ContextStoreManager __storeManager;
@@ -104,10 +104,12 @@ EXPORT_API int ctx_store_insert(ctx_store_h store, ctx_store_record_h record)
        IF_FAIL_RETURN(!columns.empty(), E_PARAM);
        columns.pop_back();
 
-       Tuple* tuple = builder.build();
-       IF_FAIL_RETURN(tuple, E_FAILED);
-
-       return store->proxy->insert(columns, tuple);
+       try {
+               auto tuple = builder.build();
+               return store->proxy->insert(columns, tuple);
+       } catch (std::exception& e) {
+               return E_FAILED;
+       }
 }
 
 EXPORT_API int ctx_store_lazy_insert(ctx_store_h store, ctx_store_record_h record)
@@ -137,10 +139,10 @@ EXPORT_API int ctx_store_retrieve(ctx_store_h store, const char* projection,
        ctx_store_cursor_s* csr = new(std::nothrow) ctx_store_cursor_s;
        IF_FAIL_RETURN(csr, E_NO_MEM);
 
-       std::vector<Tuple*> tuples;
+       std::vector<std::shared_ptr<Tuple>> tuples;
        ContextStoreSearchQuery query(projection, selection, sort_order, limit);
 
-       int error = store->proxy->retrieve(query, tuples);
+       int error = store->proxy->retrieve(query, &tuples);
        if (error != E_NONE) {
                delete csr;
                return error;
@@ -245,10 +247,7 @@ EXPORT_API int ctx_store_cursor_destroy(ctx_store_cursor_h cursor)
 {
        IF_FAIL_RETURN(cursor, E_NONE);
 
-       for (auto& tuple : cursor->tuples) {
-               delete tuple;
-       }
-
+       cursor->tuples.clear();
        delete cursor;
 
        return E_NONE;
index c965543..0240651 100644 (file)
@@ -31,7 +31,7 @@ ContextStoreSideGate::~ContextStoreSideGate()
 {
 }
 
-int ContextStoreSideGate::insert(const std::string& columns, std::vector<Tuple*>& tuples)
+int ContextStoreSideGate::insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& tuples)
 {
        return E_SUPPORT;
 }
index a89af10..444852e 100644 (file)
@@ -134,7 +134,7 @@ void ContextStoreClient::__insert(Store& store, MethodCall& methodCall)
        if (!__queryChecker.validateProjection(cols))
                throw static_cast<int>(E_PARAM);
 
-       std::vector<Tuple*> tuples = Tuple::buildFrom(vals);
+       std::vector<std::shared_ptr<Tuple>> tuples = Tuple::buildFrom(vals);
        if (tuples.empty()) {
                throw static_cast<int>(E_PARAM);
        }
@@ -163,7 +163,7 @@ void ContextStoreClient::__retrieve(Store& store, MethodCall& methodCall)
        if (!__queryChecker.validateSortOrder(sortOrder))
                throw static_cast<int>(E_PARAM);
 
-       std::vector<Tuple*> tuples;
+       std::vector<std::shared_ptr<Tuple>> tuples;
        int error = store.retrieve(*this, projection, selection, sortOrder, limit, &tuples);
        if (error != E_NONE)
                throw error;
index a3f4e36..415087b 100644 (file)
@@ -31,7 +31,7 @@ ContextStoreSideGate::~ContextStoreSideGate()
 {
 }
 
-int ContextStoreSideGate::insert(const std::string& columns, std::vector<Tuple*>& tuples)
+int ContextStoreSideGate::insert(const std::string& columns, std::vector<std::shared_ptr<Tuple>>& tuples)
 {
        //TODO: Switch to the thread-default mainloop, get the Store object, and insert.
        return E_SUPPORT;
index ef765be..a7ff134 100644 (file)
@@ -42,7 +42,7 @@ const std::string& Store::getColumns()
        return metadata.columns;
 }
 
-int Store::insert(ContextStoreClient& client, const std::string& columns, std::vector<Tuple*>& tuples)
+int Store::insert(ContextStoreClient& client, const std::string& columns, std::vector<std::shared_ptr<Tuple>>& tuples)
 {
        //TODO: handling owner's ID
        //TODO: delete expired data
@@ -52,16 +52,13 @@ int Store::insert(ContextStoreClient& client, const std::string& columns, std::v
        _D("Inserting %u tuples of (%s) to %s", tuples.size(), columns.c_str(), metadata.uri.c_str());
 
        int error = __getDatabase().insert(metadata.uri, columns, tuples) ? E_NONE : E_PARAM;
-       for (auto& tuple : tuples) {
-               delete tuple;
-       }
        tuples.clear();
        return error;
 }
 
 int Store::retrieve(ContextStoreClient& client,
                const std::string& projection, const std::string& selection,
-               const std::string& sortOrder, unsigned int limit, std::vector<Tuple*>* tuples)
+               const std::string& sortOrder, unsigned int limit, std::vector<std::shared_ptr<Tuple>>* tuples)
 {
        if (!__readable(client))
                return E_ACCESS;
index 0000146..d2edfc6 100644 (file)
@@ -47,12 +47,12 @@ namespace ctx {
 
                const std::string& getColumns();
 
-               int insert(ContextStoreClient& client, const std::string& columns, std::vector<Tuple*>& tuples);
+               int insert(ContextStoreClient& client, const std::string& columns, std::vector<std::shared_ptr<Tuple>>& tuples);
 
                int retrieve(ContextStoreClient& client,
                                const std::string& projection, const std::string& selection,
                                const std::string& sortOrder, unsigned int limit,
-                               std::vector<Tuple*>* tuples);
+                               std::vector<std::shared_ptr<Tuple>>* tuples);
 
                int remove(ContextStoreClient& client, const std::string selection);
 
index 9119884..1c3b900 100644 (file)
@@ -54,7 +54,7 @@ Store* StoreManager::__createStore(Database& database, std::list<Store*>& stores
                " FROM ContextStoreSchema"
                " WHERE uri='" + uri + "'";
 
-       std::vector<Tuple*> tuples;
+       std::vector<std::shared_ptr<Tuple>> tuples;
        if (!database.execute(query, COL_STRING COL_INT64 COL_INT64 COL_STRING COL_STRING, NULL, &tuples)) {
                _E("DB search failed");
                return NULL;
@@ -76,8 +76,6 @@ Store* StoreManager::__createStore(Database& database, std::list<Store*>& stores
        tuples[0]->getAt(3, &readPrivil);
        tuples[0]->getAt(4, &writePrivil);
 
-       delete tuples[0];
-
        _D("URI: %s, Retention: %u, Limit: %u", uri.c_str(), static_cast<unsigned int>(retention), static_cast<unsigned int>(limit));
        _D("Columns: %s", columns.c_str());
        _D("Read: %s", readPrivil.c_str());