diff --git a/core/src/main/java/org/opensearch/sql/planner/physical/FlattenOperator.java b/core/src/main/java/org/opensearch/sql/planner/physical/FlattenOperator.java index e42d8b65bd..16a4c1dd87 100644 --- a/core/src/main/java/org/opensearch/sql/planner/physical/FlattenOperator.java +++ b/core/src/main/java/org/opensearch/sql/planner/physical/FlattenOperator.java @@ -88,10 +88,11 @@ private static ExprValue flattenExprValueAtPath(ExprValue rootExprValue, String } ExprValue childExprValue = exprValueMap.get(path); - if (!childExprValue.isNull() && !childExprValue.isMissing()) { - exprValueMap.putAll(ExprValueUtils.getTupleValue(childExprValue)); + if (childExprValue.isNull() || childExprValue.isMissing()) { + return rootExprValue; } + exprValueMap.putAll(ExprValueUtils.getTupleValue(childExprValue)); return ExprTupleValue.fromExprValueMap(exprValueMap); } } diff --git a/core/src/test/java/org/opensearch/sql/planner/logical/LogicalFlattenTest.java b/core/src/test/java/org/opensearch/sql/planner/logical/LogicalFlattenTest.java index f291165559..75a800af00 100644 --- a/core/src/test/java/org/opensearch/sql/planner/logical/LogicalFlattenTest.java +++ b/core/src/test/java/org/opensearch/sql/planner/logical/LogicalFlattenTest.java @@ -113,14 +113,17 @@ void testInvalidName() { @Test void testInvalidDuplicate() { - Exception ex; + String msg; - ex = assertThrows(SemanticCheckException.class, () -> executeFlatten("duplicate")); - assertEquals("Flatten command cannot overwrite fields: integer_value", ex.getMessage()); + msg = + assertThrows(SemanticCheckException.class, () -> executeFlatten("duplicate")).getMessage(); + assertTrue(msg.contains("integer_value")); - ex = assertThrows(SemanticCheckException.class, () -> executeFlatten("duplicate_2")); - assertEquals( - "Flatten command cannot overwrite fields: integer_value, double_value", ex.getMessage()); + msg = + assertThrows(SemanticCheckException.class, () -> executeFlatten("duplicate_2")) + .getMessage(); + assertTrue(msg.contains("integer_value")); + assertTrue(msg.contains("double_value")); } /**