From b9139e77abe5d3dd1a597786ec07cefeaf1ca93d Mon Sep 17 00:00:00 2001 From: mathias <germannewsmaker@gmail.com> Date: Thu, 26 Aug 2021 18:01:43 +0200 Subject: [PATCH] Updated the SelectionManager --- .../sqltoolkit/manager/SelectionManager.java | 104 ++++++++---------- 1 file changed, 45 insertions(+), 59 deletions(-) diff --git a/src/main/java/de/gnmyt/sqltoolkit/manager/SelectionManager.java b/src/main/java/de/gnmyt/sqltoolkit/manager/SelectionManager.java index 8a6288d..9aac725 100644 --- a/src/main/java/de/gnmyt/sqltoolkit/manager/SelectionManager.java +++ b/src/main/java/de/gnmyt/sqltoolkit/manager/SelectionManager.java @@ -1,6 +1,10 @@ package de.gnmyt.sqltoolkit.manager; import de.gnmyt.sqltoolkit.drivers.MySQLConnection; +import de.gnmyt.sqltoolkit.queries.SelectionQuery; +import de.gnmyt.sqltoolkit.querybuilder.QueryBuilder; +import de.gnmyt.sqltoolkit.querybuilder.QueryParameter; +import de.gnmyt.sqltoolkit.querybuilder.SQLQuery; import org.slf4j.Logger; import java.sql.ResultSet; @@ -11,56 +15,43 @@ import java.util.HashMap; public class SelectionManager { private final Logger LOG = MySQLConnection.LOG; - private final MySQLConnection connection; - private final HashMap<String, Object> whereList; - private final ArrayList<Object> databaseParameters; - private final ArrayList<String> optionalQuery; - private int limit; - private String tableName; + + private final HashMap<String, Object> WHERE_LIST = new HashMap<>(); + private final ArrayList<String> SELECTION_LIST = new ArrayList<>(); + + private String limit = ""; + private String tableName = "default"; /** - * Basic constructor for selection + * Advanced constructor of the {@link SelectionManager} with a prefilled table name * - * @param connection The current Connection + * @param connection The current connection * @param tableName The table name */ public SelectionManager(MySQLConnection connection, String tableName) { - this.whereList = new HashMap<>(); - this.databaseParameters = new ArrayList<>(); - this.optionalQuery = new ArrayList<>(); this.connection = connection; - from(tableName); + this.tableName = tableName; } /** - * Basic constructor for selection + * Basic constructor of the {@link SelectionManager} * - * @param connection The current Connection + * @param connection The current connection */ public SelectionManager(MySQLConnection connection) { - this.whereList = new HashMap<>(); - this.databaseParameters = new ArrayList<>(); - this.optionalQuery = new ArrayList<>(); this.connection = connection; } - /** - * Get the temp-generated parameters - * - * @return ArrayList of parameters - */ - private ArrayList<Object> getTempParams() { - ArrayList<Object> tempParameters = new ArrayList<>(); - whereList.forEach((k, v) -> tempParameters.add(v)); - tempParameters.addAll(databaseParameters); - return tempParameters; + public SelectionManager select(String... selection) { + SELECTION_LIST.addAll(Arrays.asList(selection)); + return this; } /** - * Sets the table name + * Sets the table name of the selection * - * @param tableName The table name + * @param tableName The new table name * @return this class */ public SelectionManager from(String tableName) { @@ -76,7 +67,7 @@ public class SelectionManager { * @return this class */ public SelectionManager where(String column, Object value) { - whereList.put(column, value); + WHERE_LIST.put(column, value); return this; } @@ -87,7 +78,19 @@ public class SelectionManager { * @return this class */ public SelectionManager limit(int limit) { - this.limit = limit; + this.limit = String.valueOf(limit); + return this; + } + + /** + * Sets the limit of the rows + * + * @param startRow The first row that should be counted + * @param limit The new limit + * @return this class + */ + public SelectionManager limit(int startRow, int limit) { + this.limit = startRow + "," + limit; return this; } @@ -97,7 +100,7 @@ public class SelectionManager { * @return ResultManager */ public ResultManager getResult() { - return connection.getResult(prepareStatement(), getTempParams().toArray()); + return connection.getResult(build()); } /** @@ -106,40 +109,23 @@ public class SelectionManager { * @return ResultSet */ public ResultSet getResultSet() { - return connection.getResultSet(prepareStatement(), getTempParams().toArray()); + return connection.getResultSet(build()); } /** - * Adding another factors + * Builds the query * - * @param query MySQL Query - * @param params Optional parameters for the Query - * @return this class + * @return the built query */ - public SelectionManager add(String query, Object... params) { - optionalQuery.add(query); - this.databaseParameters.addAll(Arrays.asList(params)); - return this; - } + private SQLQuery build() { + QueryBuilder query = connection.createQuery(SelectionQuery.class) + .addParameter(QueryParameter.TABLE_NAME, tableName) + .addParameter(QueryParameter.LIMIT, limit) + .addParameter(QueryParameter.WHERE_LIST, WHERE_LIST); - /** - * Get the current statement query - * - * @return the current statement query - */ - private String prepareStatement() { - StringBuilder query = new StringBuilder().append("SELECT * FROM ").append(tableName).append(" "); + if (!SELECTION_LIST.isEmpty()) query.addParameter(QueryParameter.SELECT_LIST, SELECTION_LIST); - for (int i = 0; i < whereList.size(); i++) { - if (i == 0) query.append("WHERE "); - else query.append("AND "); - - query.append(whereList.keySet().toArray()[i]).append(" = ? "); - } - - if (limit != 0) query.append("LIMIT ").append(limit); - optionalQuery.forEach(v -> query.append(" ").append(v).append(" ")); - return query.toString(); + return query.build(); } }