From f9f61a868f331e61c98c33326a5cfbdb3889ee3e Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Thu, 5 Aug 2021 14:47:42 +0200 Subject: [PATCH] WIP: query --- .../grpc/EntityTransactionServiceImpl.java | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java index 7c87c8bb..98887751 100644 --- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java +++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java @@ -212,36 +212,49 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa public MultiTransactionResponse retrieve(final MultiTransactionRequest request) throws Exception { final MultiTransactionResponse.Builder builder = MultiTransactionResponse.newBuilder(); final RetrieveContainer container = - new RetrieveContainer(SecurityUtils.getSubject(), getTimestamp(), getSRID(), null); + new RetrieveContainer( + SecurityUtils.getSubject(), getTimestamp(), getSRID(), new HashMap<>()); for (final TransactionRequest sub_request : request.getRequestsList()) { - final String id = sub_request.getRetrieveRequest().getId(); - try { - final RetrieveEntity entity = new RetrieveEntity(getId(id)); - container.add(entity); - } catch (final NumberFormatException e) { - // We handle this after the retrieval + if (sub_request.getRetrieveRequest().hasQuery() + && !sub_request.getRetrieveRequest().getQuery().getQuery().isBlank()) { + container.getFlags().put("query", sub_request.getRetrieveRequest().getQuery().getQuery()); + } else { + final String id = sub_request.getRetrieveRequest().getId(); + if (!id.isBlank()) { + try { + final RetrieveEntity entity = new RetrieveEntity(getId(id)); + container.add(entity); + } catch (final NumberFormatException e) { + // We handle this after the retrieval + } + } } } final Retrieve transaction = new Retrieve(container); transaction.execute(); + for (final EntityInterface entity : container) { + builder + .addResponsesBuilder() + .setRetrieveResponse(RetrieveResponse.newBuilder().setEntity(convert(entity))); + } + // Add those entities which have not been retrieved because the have a string id for (final TransactionRequest sub_request : request.getRequestsList()) { final String id = sub_request.getRetrieveRequest().getId(); - try { - final EntityInterface entity = container.getEntityById(getId(id)); - - builder.addResponses( - TransactionResponse.newBuilder() - .setRetrieveResponse(RetrieveResponse.newBuilder().setEntity(convert(entity)))); - } catch (final NumberFormatException e) { - // ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot - // exist. - builder.addResponses( - TransactionResponse.newBuilder() - .setRetrieveResponse( - RetrieveResponse.newBuilder().setEntity(entityDoesNotExist(id)))); + if (!id.isBlank()) { + try { + getId(id); + } catch (final NumberFormatException e) { + // ID wasn't an integer - the server doesn't support string id's yet, so that entity + // cannot + // exist. + builder.addResponses( + TransactionResponse.newBuilder() + .setRetrieveResponse( + RetrieveResponse.newBuilder().setEntity(entityDoesNotExist(id)))); + } } } return builder.build(); -- GitLab