From 1f6d79cf6cc538130ca62587416cdfa930cacb87 Mon Sep 17 00:00:00 2001 From: Francesco Date: Sat, 11 Nov 2023 11:36:14 +0100 Subject: [PATCH] Fixed lower page size change --- .../controller/SnapAdminController.java | 14 ++++++ .../dbmapping/SnapAdminRepository.java | 47 ++++++++++--------- .../resources/static/snapadmin/js/console.js | 10 ++-- src/main/resources/templates/console.html | 26 ++++++++-- 4 files changed, 67 insertions(+), 30 deletions(-) diff --git a/src/main/java/tech/ailef/snapadmin/external/controller/SnapAdminController.java b/src/main/java/tech/ailef/snapadmin/external/controller/SnapAdminController.java index 02d126e..4360228 100644 --- a/src/main/java/tech/ailef/snapadmin/external/controller/SnapAdminController.java +++ b/src/main/java/tech/ailef/snapadmin/external/controller/SnapAdminController.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Random; import java.util.Set; import java.util.stream.Collectors; @@ -581,6 +582,16 @@ public class SnapAdminController { if (tabs.isEmpty()) { ConsoleQuery q = new ConsoleQuery(); + + int randomIndex = new Random().nextInt(0, snapAdmin.getSchemas().size()); + String randomTable = snapAdmin.getSchemas().get(randomIndex).getTableName(); + + q.setSql( + "-- It's recommended to always include a LIMIT clause in your query\n" + + "-- Although the SQL Console supports pagination, it retrieves the entire ResultSet\n\n" + + "-- SELECT * FROM " + randomTable + " LIMIT 1000;\n" + ); + consoleService.save(q); return "redirect:/" + properties.getBaseUrl() + "/console/run/" + q.getId(); } else { @@ -645,6 +656,9 @@ public class SnapAdminController { results.crop(startOffset, endOffset); model.addAttribute("pagination", pagination); model.addAttribute("results", results); + } else { + PaginationInfo pagination = new PaginationInfo(page, 0, pageSize, results.size(), null, null); + model.addAttribute("pagination", pagination); } model.addAttribute("title", "SQL Console | " + activeQuery.getTitle()); diff --git a/src/main/java/tech/ailef/snapadmin/external/dbmapping/SnapAdminRepository.java b/src/main/java/tech/ailef/snapadmin/external/dbmapping/SnapAdminRepository.java index ef79afc..8b50cb1 100644 --- a/src/main/java/tech/ailef/snapadmin/external/dbmapping/SnapAdminRepository.java +++ b/src/main/java/tech/ailef/snapadmin/external/dbmapping/SnapAdminRepository.java @@ -31,6 +31,7 @@ import java.util.Set; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.TransientDataAccessResourceException; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; @@ -294,29 +295,33 @@ public class SnapAdminRepository { public DbQueryResult executeQuery(String sql) { List results = new ArrayList<>(); if (sql != null && !sql.isBlank()) { - results = jdbcTemplate.query(sql, (rs, rowNum) -> { - Map result = new HashMap<>(); - - ResultSetMetaData metaData = rs.getMetaData(); - int cols = metaData.getColumnCount(); - - for (int i = 0; i < cols; i++) { - Object o = rs.getObject(i + 1); - String columnName = metaData.getColumnName(i + 1); - String tableName = metaData.getTableName(i + 1); - DbQueryOutputField field = new DbQueryOutputField(columnName, tableName, snapAdmin); + try { + results = jdbcTemplate.query(sql, (rs, rowNum) -> { + Map result = new HashMap<>(); - result.put(field, o); - } - - DbQueryResultRow row = new DbQueryResultRow(result, sql); - - result.keySet().forEach(f -> { - f.setResult(row); + ResultSetMetaData metaData = rs.getMetaData(); + int cols = metaData.getColumnCount(); + + for (int i = 0; i < cols; i++) { + Object o = rs.getObject(i + 1); + String columnName = metaData.getColumnName(i + 1); + String tableName = metaData.getTableName(i + 1); + DbQueryOutputField field = new DbQueryOutputField(columnName, tableName, snapAdmin); + + result.put(field, o); + } + + DbQueryResultRow row = new DbQueryResultRow(result, sql); + + result.keySet().forEach(f -> { + f.setResult(row); + }); + + return row; }); - - return row; - }); + } catch (TransientDataAccessResourceException e) { + // If there's an exception we leave the results as empty + } } return new DbQueryResult(results); } diff --git a/src/main/resources/static/snapadmin/js/console.js b/src/main/resources/static/snapadmin/js/console.js index 1a66d16..9f2c482 100644 --- a/src/main/resources/static/snapadmin/js/console.js +++ b/src/main/resources/static/snapadmin/js/console.js @@ -6,11 +6,11 @@ document.addEventListener("DOMContentLoaded", () => { }); if (document.querySelector("nav select.page-size") != null) { - document.querySelector("nav select.page-size").addEventListener('change', function(e) { - console.log(e.target.parentElement); - e.target.parentElement.submit(); -// this.parentElement.querySelector("input[name=\"pageSize\"]").value = e.target.value; -// this.parentElement.submit(); + document.querySelectorAll("nav select.page-size").forEach(e => { + e.addEventListener('change', function(e) { + console.log(e.target.parentElement); + e.target.parentElement.submit(); + }); }); } diff --git a/src/main/resources/templates/console.html b/src/main/resources/templates/console.html index e348a77..e4aa5c6 100644 --- a/src/main/resources/templates/console.html +++ b/src/main/resources/templates/console.html @@ -106,7 +106,7 @@