From 2fdb9b19198a0c175a59b3686531f15a51793e49 Mon Sep 17 00:00:00 2001 From: Luigi Dell'Aquila Date: Tue, 17 Jul 2018 09:57:39 +0200 Subject: [PATCH] Fix UPDATE EDGE with subqueries Resolves: #8406 --- .../core/sql/executor/UpdateEdgePointersStep.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/src/main/java/com/orientechnologies/orient/core/sql/executor/UpdateEdgePointersStep.java b/core/src/main/java/com/orientechnologies/orient/core/sql/executor/UpdateEdgePointersStep.java index 4ddde44a86a..7c4bf04f6ff 100644 --- a/core/src/main/java/com/orientechnologies/orient/core/sql/executor/UpdateEdgePointersStep.java +++ b/core/src/main/java/com/orientechnologies/orient/core/sql/executor/UpdateEdgePointersStep.java @@ -7,6 +7,7 @@ import com.orientechnologies.orient.core.exception.OCommandExecutionException; import com.orientechnologies.orient.core.record.impl.ODocument; +import java.util.Collection; import java.util.Map; import java.util.Optional; @@ -83,6 +84,16 @@ private void handleUpdateEdge(ODocument record) { Object prevOut = record.getOriginalValue("out"); Object prevIn = record.getOriginalValue("in"); + // to manage subqueries + if (currentOut instanceof Collection && ((Collection) currentOut).size() == 1) { + currentOut = ((Collection) currentOut).iterator().next(); + record.setProperty("out", currentOut); + } + if (currentIn instanceof Collection && ((Collection) currentIn).size() == 1) { + currentIn = ((Collection) currentIn).iterator().next(); + record.setProperty("in", currentIn); + } + validateOutInForEdge(record, currentOut, currentIn); changeVertexEdgePointer(record, (OIdentifiable) prevIn, (OIdentifiable) currentIn, "in");