diff --git a/persistence/runtime/src/main/java/org/eclipsefoundation/persistence/model/HQLGenerator.java b/persistence/runtime/src/main/java/org/eclipsefoundation/persistence/model/HQLGenerator.java index 69f5ba96cc22d16158b3bd34d304d6e3644c22de..628071117334c214a9a0283776f3796c5f62fac4 100644 --- a/persistence/runtime/src/main/java/org/eclipsefoundation/persistence/model/HQLGenerator.java +++ b/persistence/runtime/src/main/java/org/eclipsefoundation/persistence/model/HQLGenerator.java @@ -11,6 +11,8 @@ **********************************************************************/ package org.eclipsefoundation.persistence.model; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -49,7 +51,7 @@ public class HQLGenerator implements SQLGenerator { } else if (SortOrder.RANDOM.equals(src.getOrder())) { sb.append(" order by RAND()"); } - return sb.toString(); + return decorateWithNodeName(sb).toString(); } @Override @@ -68,7 +70,7 @@ public class HQLGenerator implements SQLGenerator { // retrieve the where clauses sb.append(getWhereClause(src)); - return sb.toString(); + return decorateWithNodeName(sb).toString(); } private String getFromClause(ParameterizedSQLStatement src) { @@ -136,4 +138,18 @@ public class HQLGenerator implements SQLGenerator { return sb.toString(); } + /** + * Appends a comment containing the local host's name to the provided StringBuilder. + * If the local host's name cannot be determined, the original StringBuilder is returned unchanged. + * + * @param sb the StringBuilder to which the comment will be appended + * @return the StringBuilder with the appended comment, or the original StringBuilder if the host name cannot be determined + */ + private StringBuilder decorateWithNodeName(StringBuilder sb) { + try { + return sb.append(String.format(" /* node name: %s */", InetAddress.getLocalHost().getHostName())); + } catch (UnknownHostException e) { + return sb; + } + } } diff --git a/persistence/runtime/src/test/java/org/eclipsefoundation/persistence/model/HQLGeneratorTest.java b/persistence/runtime/src/test/java/org/eclipsefoundation/persistence/model/HQLGeneratorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..354f8bf35b03146dd69aa9a5ba8ce1cbec791468 --- /dev/null +++ b/persistence/runtime/src/test/java/org/eclipsefoundation/persistence/model/HQLGeneratorTest.java @@ -0,0 +1,60 @@ +package org.eclipsefoundation.persistence.model; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; + +import org.eclipsefoundation.persistence.namespace.SortOrder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class HQLGeneratorTest { + + private HQLGenerator hqlGenerator; + private ParameterizedSQLStatement mockStatement; + private DtoTable mockTable; + + @BeforeEach + void setUp() { + hqlGenerator = new HQLGenerator(); + mockStatement = mock(ParameterizedSQLStatement.class); + mockTable = mock(DtoTable.class); + + doReturn(this.getClass()).when(mockTable).getType(); + doReturn(mockTable).when(mockStatement).getBase(); + doReturn("t").when(mockTable).getAlias(); + doReturn(new ArrayList<>()).when(mockStatement).getJoins(); + doReturn(new ArrayList<>()).when(mockStatement).getClauses(); + } + + @Test + void testGetSelectSQL() { + when(mockStatement.getGroups()).thenReturn(new ArrayList<>()); + when(mockStatement.getSortField()).thenReturn(null); + when(mockStatement.getOrder()).thenReturn(SortOrder.ASCENDING); + + String expectedSQL = "SELECT t FROM HQLGeneratorTest t /* node name: " + getHostName() + " */"; + String actualSQL = hqlGenerator.getSelectSQL(mockStatement); + + assertEquals(expectedSQL, actualSQL); + } + + @Test + void testGetCountSQL() { + String expectedSQL = "SELECT COUNT(DISTINCT t) FROM HQLGeneratorTest t /* node name: " + getHostName() + " */"; + String actualSQL = hqlGenerator.getCountSQL(mockStatement); + + assertEquals(expectedSQL, actualSQL); + } + + private String getHostName() { + try { + return java.net.InetAddress.getLocalHost().getHostName(); + } catch (java.net.UnknownHostException e) { + return ""; + } + } +} \ No newline at end of file