From 908a5fa7058a674a4aa025fc2ff5a8f4d2199d6f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jordi=20G=C3=B3mez?= <jordi.gomez@eclipse-foundation.org>
Date: Wed, 12 Mar 2025 12:57:50 +0100
Subject: [PATCH] feat(HQLGenerator): adding decorator with node name
---
.../persistence/model/HQLGenerator.java | 20 ++++++-
.../persistence/model/HQLGeneratorTest.java | 60 +++++++++++++++++++
2 files changed, 78 insertions(+), 2 deletions(-)
create mode 100644 persistence/runtime/src/test/java/org/eclipsefoundation/persistence/model/HQLGeneratorTest.java
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 69f5ba96..62807111 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 00000000..354f8bf3
--- /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
--
GitLab