From 4268fce9456527cbd47a8a53ef385e73f706b572 Mon Sep 17 00:00:00 2001 From: Iliyan Velichkov Date: Wed, 29 May 2024 15:51:09 +0300 Subject: [PATCH] fix exposing odata for view (#3972) * fix exposing odata for view Signed-off-by: Iliyan Velichkov * fix, handle the case where keys are missing (views) Signed-off-by: Iliyan Velichkov --------- Signed-off-by: Iliyan Velichkov --- .../odata2/sql/processor/AbstractSQLProcessor.java | 13 +++++++++---- .../odata2/sql/processor/ResultSetReader.java | 11 ++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/AbstractSQLProcessor.java b/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/AbstractSQLProcessor.java index 435e24a3b09..a27af91c8f8 100644 --- a/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/AbstractSQLProcessor.java +++ b/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/AbstractSQLProcessor.java @@ -37,9 +37,11 @@ import org.apache.olingo.odata2.core.commons.ContentType; import org.apache.olingo.odata2.core.uri.KeyPredicateImpl; import org.apache.olingo.odata2.core.uri.UriInfoImpl; -import org.eclipse.dirigible.engine.odata2.sql.api.*; +import org.eclipse.dirigible.engine.odata2.sql.api.OData2EventHandler; +import org.eclipse.dirigible.engine.odata2.sql.api.SQLProcessor; +import org.eclipse.dirigible.engine.odata2.sql.api.SQLStatement; +import org.eclipse.dirigible.engine.odata2.sql.api.SQLStatementParam; import org.eclipse.dirigible.engine.odata2.sql.builder.*; -import org.eclipse.dirigible.engine.odata2.sql.builder.SQLUtils; import org.eclipse.dirigible.engine.odata2.sql.utils.OData2Utils; import org.eclipse.dirigible.engine.odata2.sql.utils.SingleConnectionDataSource; import org.slf4j.Logger; @@ -51,7 +53,10 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.*; import static org.eclipse.dirigible.engine.odata2.sql.builder.EdmUtils.getProperties; @@ -320,7 +325,7 @@ public ODataResponse readEntitySet(final GetEntitySetUriInfo uriInfo, final Stri ResultSetReader.ResultSetEntity currentTargetEntity = resultSetReader.getResultSetEntity(query, targetEntityType, properties, resultSet, hasGeneratedId); logger.info("Current entity set object is {}", currentTargetEntity); - if (!currentAccumulator.isAccumulatorFor(currentTargetEntity)) { + if (!currentAccumulator.isAccumulatorFor(currentTargetEntity) || currentTargetEntity.keys.isEmpty()) { currentAccumulator = new ResultSetReader.ExpandAccumulator(currentTargetEntity); entitiesFeed.add(currentAccumulator); } diff --git a/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/ResultSetReader.java b/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/ResultSetReader.java index 5efe28427cf..fce6961db24 100644 --- a/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/ResultSetReader.java +++ b/modules/odata/odata-core/src/main/java/org/eclipse/dirigible/engine/odata2/sql/processor/ResultSetReader.java @@ -9,7 +9,10 @@ */ package org.eclipse.dirigible.engine.odata2.sql.processor; -import org.apache.olingo.odata2.api.edm.*; +import org.apache.olingo.odata2.api.edm.EdmEntityType; +import org.apache.olingo.odata2.api.edm.EdmException; +import org.apache.olingo.odata2.api.edm.EdmProperty; +import org.apache.olingo.odata2.api.edm.EdmStructuralType; import org.apache.olingo.odata2.api.exception.ODataException; import org.apache.olingo.odata2.api.uri.NavigationPropertySegment; import org.eclipse.dirigible.engine.odata2.sql.api.SQLProcessor; @@ -305,6 +308,7 @@ public Map renderForExpand(ExpandAccumulator input) { } } + /** * The Class ResultSetEntity. */ @@ -387,6 +391,11 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(keys); } + + @Override + public String toString() { + return "ResultSetEntity{" + "data=" + data + ", keys=" + keys + ", entityType=" + entityType + '}'; + } } }