diff --git a/sadu-queries/src/main/java/de/chojo/sadu/queries/exception/Check.java b/sadu-queries/src/main/java/de/chojo/sadu/queries/exception/Check.java new file mode 100644 index 00000000..16929bc5 --- /dev/null +++ b/sadu-queries/src/main/java/de/chojo/sadu/queries/exception/Check.java @@ -0,0 +1,23 @@ +/* + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * Copyright (C) RainbowDashLabs and Contributor + */ + +package de.chojo.sadu.queries.exception; + +import de.chojo.sadu.mapper.wrapper.Row; +import org.jetbrains.annotations.Nullable; + +import java.sql.ResultSet; + +public final class Check { + public static void assertQueryResult(@Nullable Object object) { + if (object instanceof Row) { + throw new IllegalQueryReturnTypeException("Result is of type Row. Using a row mapper to map to a Row is forbidden. Rows are mutable and are no longer accessible after query execution."); + } + if (object instanceof ResultSet) { + throw new IllegalQueryReturnTypeException("Result is of type ResultSet. Using a row mapper to map to a ResultSet is forbidden. ResultSets are mutable and are no longer accessible after query execution."); + } + } +} diff --git a/sadu-queries/src/main/java/de/chojo/sadu/queries/exception/IllegalQueryReturnTypeException.java b/sadu-queries/src/main/java/de/chojo/sadu/queries/exception/IllegalQueryReturnTypeException.java new file mode 100644 index 00000000..ee8ac921 --- /dev/null +++ b/sadu-queries/src/main/java/de/chojo/sadu/queries/exception/IllegalQueryReturnTypeException.java @@ -0,0 +1,13 @@ +/* + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * Copyright (C) RainbowDashLabs and Contributor + */ + +package de.chojo.sadu.queries.exception; + +public class IllegalQueryReturnTypeException extends RuntimeException{ + public IllegalQueryReturnTypeException(String message) { + super(message); + } +} diff --git a/sadu-queries/src/main/java/de/chojo/sadu/queries/execution/reading/ReaderImpl.java b/sadu-queries/src/main/java/de/chojo/sadu/queries/execution/reading/ReaderImpl.java index 938b7350..19d977f8 100644 --- a/sadu-queries/src/main/java/de/chojo/sadu/queries/execution/reading/ReaderImpl.java +++ b/sadu-queries/src/main/java/de/chojo/sadu/queries/execution/reading/ReaderImpl.java @@ -15,6 +15,7 @@ import de.chojo.sadu.queries.api.query.AppendedQuery; import de.chojo.sadu.queries.api.results.reading.Result; import de.chojo.sadu.queries.call.CallImpl; +import de.chojo.sadu.queries.exception.Check; import de.chojo.sadu.queries.query.AppendedQueryImpl; import de.chojo.sadu.queries.query.QueryImpl; import de.chojo.sadu.queries.query.TokenizedQuery; @@ -70,7 +71,9 @@ private SingleResult mapOne() { ((CallImpl) call()).apply(sql(), stmt); var resultSet = stmt.executeQuery(); if (resultSet.next()) { - return new SingleResult<>(this, mapper(resultSet).map(new Row(resultSet, mapperConfig()))); + V mapped = mapper(resultSet).map(new Row(resultSet, mapperConfig())); + Check.assertQueryResult(mapped); + return new SingleResult<>(this, mapped); } } return new SingleResult<>(this, null); @@ -85,7 +88,11 @@ private MultiResult> mapAll() { ((CallImpl) call()).apply(sql(), stmt); var resultSet = stmt.executeQuery(); var row = new Row(resultSet, mapperConfig()); - while (resultSet.next()) result.add(mapper(resultSet).map(row)); + while (resultSet.next()) { + V mapped = mapper(resultSet).map(row); + Check.assertQueryResult(mapped); + result.add(mapped); + } } return new MultiResult<>(this, result); });