diff --git a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp index c2716d4e77d6f65edf848be6ed8a842d4452c754..aac48df35df27422b09764275b0f623ed89c26a8 100644 --- a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp +++ b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.cpp @@ -29,6 +29,8 @@ #include <RobotAPI/libraries/armem/component/MemoryRemoteGui.h> #include <RobotAPI/libraries/armem/client/MemoryWriter.h> +#include <RobotAPI/libraries/armem/client/MemoryReader.h> +#include <RobotAPI/libraries/armem/client/QueryBuilder.h> #include <RobotAPI/libraries/armem/memory/ice_conversions.h> #include <RobotAPI/components/armem/ArMemExampleMemory/aron/Primitive.aron.generated.h> @@ -156,58 +158,13 @@ namespace armarx ARMARX_CHECK_EQUAL(commitResult.results.size(), commit.updates.size()); } - /* - * ToDo: Recreate with raw and new query syntax. - { - armem::data::EntitySnapshotQuery query; - query.snapshotID = snapshotID.str(); - - ARMARX_IMPORTANT - << "Querying snapshot:" - << "\n- snapshotID: \t'" << query.snapshotID << "'" - ; - - armem::data::EntitySnapshotQueryResultList results = memory->getEntitySnapshots({query}); - - ARMARX_CHECK_EQUAL(results.size(), 1); - armem::data::EntitySnapshotQueryResult& result = results.at(0); - - ARMARX_INFO << "Result: " - << "\n- success: \t" << result.success - << "\n- # instances: \t" << result.instances.size() - << "\n- time created: \t" << armem::Time::microSeconds(result.timeCreatedMicroSeconds).toDateTime() - << "\n- error message: \t" << result.errorMessage - ; - } - if (true) { - armem::data::EntitySnapshotQuery query; - snapshotID.clearTimestamp(); - query.snapshotID = snapshotID.str(); - - ARMARX_IMPORTANT - << "Querying latest snapshot:" - << "\n- entityID: \t'" << query.snapshotID << "'" - ; - - armem::data::EntitySnapshotQueryResultList results = memory->getEntitySnapshots({query}); - - ARMARX_CHECK_EQUAL(results.size(), 1); - armem::data::EntitySnapshotQueryResult& result = results.at(0); - - ARMARX_INFO << "Result: " - << "\n- success: \t" << result.success - << "\n- # instances: \t" << result.instances.size() - << "\n- time created: \t" << armem::Time::microSeconds(result.timeCreatedMicroSeconds).toDateTime() - << "\n- error message: \t" << result.errorMessage - ; + queryLatestRawIce(snapshotID.getEntityID()); } - */ - if (true) { - rawIceQuery(snapshotID); + querySnapshot(snapshotID); } if (true) { @@ -225,79 +182,115 @@ namespace armarx { } - bool ArMemExampleClient::rawIceQuery(const armem::MemoryID& snapshotID) + bool ArMemExampleClient::queryLatestRawIce(const armem::MemoryID& entityID) { ARMARX_IMPORTANT - << "Querying latest snapshot:" - << "\n- entityID: \t'" << snapshotID << "'" - // << "\n" << *memoryQuery + << "Querying latest snapshot (via raw ice query types):" + << "\n- entityID: \t'" << entityID << "'" ; armem::data::query::EntityQueryPtr entityQuery = - // new armem::data::query::entity::Single(); - new armem::data::query::entity::All(); + new armem::data::query::entity::Single(); armem::data::query::ProviderSegmentQueryPtr providerQuery = - new armem::data::query::provider::Single({entityQuery}, snapshotID.entityName); - // new armem::data::query::provider::All({entityQuery}); + new armem::data::query::provider::Single({entityQuery}, entityID.entityName); armem::data::query::CoreSegmentQueryPtr coreQuery = - new armem::data::query::core::Single({providerQuery}, snapshotID.providerSegmentName); + new armem::data::query::core::Single({providerQuery}, entityID.providerSegmentName); armem::data::query::MemoryQueryPtr memoryQuery = - new armem::data::query::memory::Single({coreQuery}, snapshotID.coreSegmentName); + new armem::data::query::memory::Single({coreQuery}, entityID.coreSegmentName); - armem::data::QueryInput input; - input.memoryQueries = {memoryQuery}; + armem::data::QueryInput qInput; + qInput.memoryQueries = {memoryQuery}; - armem::data::QueryResult iceResult = memory->query(input); + armem::data::QueryResult qResult = memory->query(qInput); ARMARX_INFO << "Result: " - << "\n- success: \t" << iceResult.success - << "\n- error message: \t" << iceResult.errorMessage + << "\n- success: \t" << qResult.success + << "\n- error message: \t" << qResult.errorMessage ; - if (!iceResult.success) + if (qResult.success) { - ARMARX_ERROR << iceResult.errorMessage; - return false; - } + armem::MemoryPtr result = armem::fromIce<armem::MemoryPtr>(qResult.memory); - armem::MemoryPtr result = armem::fromIce<armem::MemoryPtr>(iceResult.memory); + ARMARX_CHECK_EQUAL(result->coreSegments.size(), 1); + armem::CoreSegmentPtr& coreSeg = result->coreSegments.begin()->second; - ARMARX_CHECK_EQUAL(result->coreSegments.size(), 1); + ARMARX_CHECK_EQUAL(coreSeg->providerSegments.size(), 1); + armem::ProviderSegmentPtr& provSeg = coreSeg->providerSegments.begin()->second; - armem::CoreSegmentPtr& coreSeg = result->coreSegments.begin()->second; - ARMARX_CHECK_EQUAL(coreSeg->providerSegments.size(), 1); + ARMARX_CHECK_EQUAL(provSeg->entities.size(), 1); + armem::EntityPtr& entity = provSeg->entities.begin()->second; - armem::ProviderSegmentPtr& provSeg = coreSeg->providerSegments.begin()->second; - ARMARX_CHECK_EQUAL(provSeg->entities.size(), 1); + ARMARX_CHECK_GREATER_EQUAL(entity->history.size(), 1); + armem::EntitySnapshotPtr& snapshot = entity->history.begin()->second; - armem::EntityPtr& entity = provSeg->entities.begin()->second; - ARMARX_CHECK_GREATER_EQUAL(entity->history.size(), 1); + ARMARX_INFO << "Result: " + << "\n- memory: \t" << result->name() + << "\n- core segment: \t" << coreSeg->name() + << "\n- prov segment: \t" << provSeg->name() + << "\n- entity: \t" << entity->name() + << "\n- snapshot: \t" << snapshot->time() + << "\n- #instances: \t" << snapshot->instances.size() + ; - armem::EntitySnapshotPtr& snapshot = entity->history.begin()->second; + ARMARX_IMPORTANT << "Getting entity from snapshot ID"; + const armem::Entity& e = result->getEntity(entityID); + ARMARX_INFO << "Result: " + << "\n- entity: \t" << e.name() + << "\n- snapshot: \t" << e.getLatestSnapshot().time() + << "\n- #instances: \t" << e.getLatestSnapshot().instances.size() + ; - ARMARX_INFO << "Result: " - << "\n- memory: \t" << result->name() - << "\n- core segment: \t" << coreSeg->name() - << "\n- prov segment: \t" << provSeg->name() - << "\n- entity: \t" << entity->name() - << "\n- snapshot: \t" << snapshot->time() - << "\n- #instances: \t" << snapshot->instances.size() - ; + tab.queryResult = std::move(result); + tab.rebuild = true; + } + else + { + ARMARX_ERROR << qResult.errorMessage; + } + + return qResult.success; + } + + bool ArMemExampleClient::querySnapshot(const armem::MemoryID& snapshotID) + { + ARMARX_IMPORTANT + << "Querying exact snapshot of entity: (via query builder)" + << "\n- snapshotID: \t'" << snapshotID << "'" + ; + + armem::MemoryReader reader(memory); + armem::client::QueryBuilder qb; + qb + .coreSegments().withID(snapshotID) + .providerSegments().withID(snapshotID) + .entities().withID(snapshotID) + .snapshots().withID(snapshotID); - ARMARX_IMPORTANT << "Getting entity from snapshot ID"; - const armem::Entity& e = result->getEntity(snapshotID); + armem::data::QueryResult qResult = reader.query(qb.buildQueryInput()); ARMARX_INFO << "Result: " - << "\n- entity: \t" << e.name() - << "\n- snapshot: \t" << e.getLatestSnapshot().time() - << "\n- #instances: \t" << e.getLatestSnapshot().instances.size() + << "\n- success: \t" << qResult.success + << "\n- error message: \t" << qResult.errorMessage ; + if (qResult.success) + { + armem::MemoryPtr memory; + fromIce(qResult.memory, memory); + armem::EntitySnapshot& entitySnapshot = memory->getEntity(snapshotID).getLatestSnapshot(); - tab.queryResult = std::move(result); - tab.rebuild = true; + ARMARX_INFO << "Result snapshot: " + << "\n- time: \t" << entitySnapshot.time() + << "\n- # instances: \t" << entitySnapshot.instances.size() + ; + } + else + { + ARMARX_ERROR << qResult.errorMessage; + } - return true; + return qResult.success; } bool ArMemExampleClient::primitives(armem::MemoryWriter& writer) @@ -347,21 +340,16 @@ namespace armarx return false; } - // Query. - - armem::data::query::EntityQueryPtr entityQuery = new armem::data::query::entity::All(); - armem::data::query::ProviderSegmentQueryPtr providerQuery = - new armem::data::query::provider::All({entityQuery}); - armem::data::query::CoreSegmentQueryPtr coreQuery = - new armem::data::query::core::Single({providerQuery}, providerID.providerSegmentName); - armem::data::query::MemoryQueryPtr memoryQuery = - new armem::data::query::memory::Single({coreQuery}, providerID.coreSegmentName); - - - armem::data::QueryInput input; - input.memoryQueries = {memoryQuery}; + // Query all entities from provider. + armem::client::QueryBuilder qb; + qb + .coreSegments().withID(providerID) + .providerSegments().withID(providerID) + .entities().all() + .snapshots().all(); - armem::data::QueryResult result = memory->query(input); + armem::MemoryReader reader(memory); + armem::data::QueryResult result = reader.query(qb.buildQueryInput()); if (result.success) { armem::MemoryPtr resultMemory = armem::fromIce<armem::MemoryPtr>(result.memory); diff --git a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h index bbf97094fd93c248deacbb907d515e5ea8d6eda8..00f0fc269a20bd4eedb927abe6d864872217e01c 100644 --- a/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h +++ b/source/RobotAPI/components/armem/ArMemExampleClient/ArMemExampleClient.h @@ -102,7 +102,9 @@ namespace armarx private: // Examples - bool rawIceQuery(const armem::MemoryID& snapshotID); + bool queryLatestRawIce(const armem::MemoryID& entityID); + bool querySnapshot(const armem::MemoryID& snapshotID); + bool primitives(armem::MemoryWriter& writer);