From 92d88df213e70bce59340f14e3c9f7c9701cbedd Mon Sep 17 00:00:00 2001 From: Khaled Elagamy Date: Mon, 18 Aug 2025 08:03:40 +0300 Subject: [PATCH] =?UTF-8?q?Fix=20Backend=20error:=20Error=20loading=20data?= =?UTF-8?q?:=20Exception=20while=20fetching=20data=20(/vmEmissionSummary)?= =?UTF-8?q?=20:=20org.hibernate.exception.SQLGrammarException:=20could=20n?= =?UTF-8?q?ot=20extract=C2=A0ResultSet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MainDataTableService.java | 96 +++++++++---------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java b/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java index 77eb142..67809e7 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java +++ b/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java @@ -22,7 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -public class MainDataTableService extends BaseService { +public class MainDataTableService + extends BaseService { @PersistenceContext private EntityManager entityManager; @@ -35,96 +36,95 @@ public class MainDataTableService extends BaseService getVMEmissionSummaries() { return getVMEmissionSummaries(null, null); } - + public List getVMEmissionSummaries(UUID datacenterId) { return getVMEmissionSummaries(datacenterId, null); } - + public List getVMEmissionSummaries(UUID datacenterId, UUID projectId) { List whereConditions = new ArrayList<>(); - + if (datacenterId != null) { whereConditions.add("dc.id = decode(replace(:datacenterId, '-', ''), 'hex')"); } - + if (projectId != null) { - whereConditions.add("p.id = decode(replace(:projectId, '-', ''), 'hex')"); + whereConditions.add("v.project = :projectId"); } - - String whereClause = whereConditions.isEmpty() ? "" : - "WHERE " + String.join(" AND ", whereConditions) + " "; - + + String whereClause = whereConditions.isEmpty() ? "" : "WHERE " + String.join(" AND ", whereConditions) + " "; + String sql = """ - SELECT - CAST(v.id AS VARCHAR) as vm_id, - v.vm_name as vm_name, - v.power as vm_power, - v.state as vm_status, - mdt.total_emission, - mdt.created_date, - pm.name as physical_machine_name, - p.name as project_name, - dc.data_center_name as datacenter_name, - mdt.co2, - mdt.ch4, - mdt.n2o - FROM main_data_table mdt - JOIN vm v ON mdt.vm_id = v.id - LEFT JOIN physical_machine pm ON v.physical_machine_id = pm.id - LEFT JOIN project p ON pm.project_id = p.id - LEFT JOIN data_center dc ON p.data_center_id = dc.id - """ + whereClause + """ - ORDER BY mdt.created_date DESC, v.vm_name - """; - + SELECT + CAST(v.id AS VARCHAR) as vm_id, + v.vm_name as vm_name, + v.power as vm_power, + v.state as vm_status, + mdt.total_emission, + mdt.created_date, + pm.name as physical_machine_name, + v.project as project_name, + dc.data_center_name as datacenter_name, + mdt.co2, + mdt.ch4, + mdt.n2o + FROM main_data_table mdt + JOIN vm v ON mdt.vm_id = v.id + LEFT JOIN physical_machine pm ON v.physical_machine_id = pm.id + LEFT JOIN data_center dc ON pm.data_center_id = dc.id + """ + whereClause + """ + ORDER BY mdt.created_date DESC, v.vm_name + """; + Query query = entityManager.createNativeQuery(sql); - + // Add parameters if provided if (datacenterId != null) { query.setParameter("datacenterId", datacenterId.toString()); } - + if (projectId != null) { query.setParameter("projectId", projectId.toString()); } - + @SuppressWarnings("unchecked") List results = query.getResultList(); - + return results.stream().map(row -> { VMEmissionSummary summary = new VMEmissionSummary(); - + // Handle UUID conversion from hex format String uuidStr = (String) row[0]; UUID vmId = convertHexToUUID(uuidStr); summary.setVmId(vmId); - + summary.setVmName((String) row[1]); summary.setVmPower((Double) row[2]); summary.setVmStatus((String) row[3]); summary.setTotalEmission((Double) row[4]); - + // Convert Timestamp to LocalDateTime for created_date Timestamp timestamp = (Timestamp) row[5]; if (timestamp != null) { summary.setCreatedDate(timestamp.toLocalDateTime()); } - + summary.setPhysicalMachine((String) row[6]); summary.setProject((String) row[7]); summary.setDataCenter((String) row[8]); - + // Individual emission values summary.setCo2((Double) row[9]); summary.setCh4((Double) row[10]); summary.setN2o((Double) row[11]); - + return summary; }).collect(Collectors.toList()); } - + /** * Converts PostgreSQL hex format UUID to proper UUID format + * * @param hexUuid UUID in hex format (e.g., \x6205c18b8d1e4f0fa5154212fb44050b) * @return UUID object */ @@ -134,11 +134,11 @@ public class MainDataTableService extends BaseService