diff --git a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java index 0b900b5..bce2789 100644 --- a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java +++ b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java @@ -30,6 +30,7 @@ import java.util.stream.Collectors; import org.hibernate.id.IdentifierGenerationException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.jdbc.UncategorizedSQLException; @@ -69,8 +70,10 @@ import tech.ailef.dbadmin.external.exceptions.DbAdminException; import tech.ailef.dbadmin.external.exceptions.DbAdminNotFoundException; import tech.ailef.dbadmin.external.exceptions.InvalidPageException; import tech.ailef.dbadmin.external.misc.Utils; +import tech.ailef.dbadmin.internal.model.ConsoleQuery; import tech.ailef.dbadmin.internal.model.UserAction; import tech.ailef.dbadmin.internal.model.UserSetting; +import tech.ailef.dbadmin.internal.repository.ConsoleQueryRepository; import tech.ailef.dbadmin.internal.repository.UserSettingsRepository; import tech.ailef.dbadmin.internal.service.UserActionService; @@ -92,6 +95,9 @@ public class DefaultDbAdminController { @Autowired private UserActionService userActionService; + @Autowired + private ConsoleQueryRepository consoleQueryRepository; + @Autowired private JdbcTemplate jdbTemplate; @@ -545,26 +551,38 @@ public class DefaultDbAdminController { @GetMapping("/console") public String console(Model model, @RequestParam(required=false) String query) { model.addAttribute("activePage", "console"); - model.addAttribute("query", query == null ? "" : query); + model.addAttribute("query", query == null ? "" : query); + List tabs = consoleQueryRepository.findAll(); + + if (tabs.isEmpty()) { + ConsoleQuery q = new ConsoleQuery(); + consoleQueryRepository.save(q); + tabs.add(q); + } + model.addAttribute("tabs", tabs); if (query != null) { - List results = jdbTemplate.query(query, (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, dbAdmin); + try { + List results = jdbTemplate.query(query, (rs, rowNum) -> { + Map result = new HashMap<>(); - result.put(field, o); - } - - return new DbQueryResultRow(result, query); - }); - model.addAttribute("results", new DbQueryResult(results)); + 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, dbAdmin); + + result.put(field, o); + } + + return new DbQueryResultRow(result, query); + }); + model.addAttribute("results", new DbQueryResult(results)); + } catch (DataAccessException e) { + model.addAttribute("error", e.getMessage()); + } } diff --git a/src/main/java/tech/ailef/dbadmin/external/dbmapping/query/DbQueryOutputField.java b/src/main/java/tech/ailef/dbadmin/external/dbmapping/query/DbQueryOutputField.java index 10afcf8..16f1ab5 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dbmapping/query/DbQueryOutputField.java +++ b/src/main/java/tech/ailef/dbadmin/external/dbmapping/query/DbQueryOutputField.java @@ -50,7 +50,9 @@ public class DbQueryOutputField { } public String getType() { - return "TODO TYPE"; + if (dbField != null) + return dbField.getType().toString(); + return "-"; } @Override diff --git a/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java b/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java new file mode 100644 index 0000000..714a8fe --- /dev/null +++ b/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java @@ -0,0 +1,48 @@ +package tech.ailef.dbadmin.internal.model; + +import org.hibernate.annotations.UuidGenerator; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Lob; + +@Entity +public class ConsoleQuery { + @Id + @UuidGenerator + private String id; + + @Lob + private String sql; + + private String title; + + public ConsoleQuery() { + this.title = "Untitled Query"; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + +} diff --git a/src/main/java/tech/ailef/dbadmin/internal/repository/ConsoleQueryRepository.java b/src/main/java/tech/ailef/dbadmin/internal/repository/ConsoleQueryRepository.java new file mode 100644 index 0000000..ab45d0a --- /dev/null +++ b/src/main/java/tech/ailef/dbadmin/internal/repository/ConsoleQueryRepository.java @@ -0,0 +1,30 @@ +/* + * Spring Boot Database Admin - An automatically generated CRUD admin UI for Spring Boot apps + * Copyright (C) 2023 Ailef (http://ailef.tech) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +package tech.ailef.dbadmin.internal.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import tech.ailef.dbadmin.internal.model.ConsoleQuery; + +@Repository +public interface ConsoleQueryRepository extends JpaRepository, CustomActionRepository { + +} diff --git a/src/main/resources/templates/console.html b/src/main/resources/templates/console.html index 7ef965f..87dac96 100644 --- a/src/main/resources/templates/console.html +++ b/src/main/resources/templates/console.html @@ -11,16 +11,27 @@

SQL console

-
+ +
-
-
- +
+
+
+
+