Skip to content

Commit c2b0624

Browse files
authored
Merge pull request #23 from ZorTik/development
Removed QueryNodeRequest.java
2 parents 81474a0 + b049dfd commit c2b0624

7 files changed

Lines changed: 74 additions & 54 deletions

File tree

core/src/main/java/me/zort/sqllib/internal/query/QueryNode.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import me.zort.sqllib.SQLDatabaseConnectionImpl;
66
import me.zort.sqllib.api.*;
77
import me.zort.sqllib.api.data.QueryResult;
8+
import me.zort.sqllib.api.data.QueryRowsResult;
9+
import me.zort.sqllib.api.data.Row;
810
import me.zort.sqllib.internal.exception.InvalidConnectionInstanceException;
911
import me.zort.sqllib.internal.exception.NoLinkedConnectionException;
1012
import org.jetbrains.annotations.Nullable;
@@ -16,6 +18,13 @@
1618
import java.util.concurrent.ConcurrentHashMap;
1719
import java.util.function.Function;
1820

21+
/**
22+
* Represents a query builder node, a part of a
23+
* query builder flow.
24+
*
25+
* @param <P> Parent node type.
26+
* @author ZorTik
27+
*/
1928
@Getter
2029
public abstract class QueryNode<P extends QueryNode<?>> implements Query, StatementFactory<PreparedStatement> {
2130

@@ -130,6 +139,38 @@ public QueryResult execute() {
130139
return invokeToConnection(connection -> connection.exec(getAncestor()));
131140
}
132141

142+
public Optional<Row> obtainOne() {
143+
QueryRowsResult<Row> resultList = obtainAll();
144+
145+
return resultList.isEmpty()
146+
? Optional.empty()
147+
: Optional.ofNullable(resultList.get(0));
148+
}
149+
150+
public <T> Optional<T> obtainOne(Class<T> mapTo) {
151+
QueryRowsResult<T> resultList = obtainAll(mapTo);
152+
153+
return resultList.isEmpty()
154+
? Optional.empty()
155+
: Optional.ofNullable(resultList.get(0));
156+
}
157+
158+
public QueryRowsResult<Row> obtainAll() {
159+
requireResultSetAware();
160+
return invokeToConnection(connection -> connection.query(getAncestor()));
161+
}
162+
163+
public <T> QueryRowsResult<T> obtainAll(Class<T> mapTo) {
164+
requireResultSetAware();
165+
return invokeToConnection(connection -> connection.query(getAncestor(), mapTo));
166+
}
167+
168+
private void requireResultSetAware() {
169+
if (!(this instanceof ResultSetAware)) {
170+
throw new IllegalStateException("This query node is not ResultSetAware! (Did you mean execute()?)");
171+
}
172+
}
173+
133174
public QueryNode<?> getAncestor() {
134175
QueryNode<?> current = this;
135176
while(current.getParent() != null) {

core/src/main/java/me/zort/sqllib/internal/query/QueryNodeRequest.java

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package me.zort.sqllib.internal.query;
2+
3+
import me.zort.sqllib.api.Query;
4+
import me.zort.sqllib.api.data.QueryRowsResult;
5+
import me.zort.sqllib.api.data.Row;
6+
7+
import java.util.Optional;
8+
9+
/**
10+
* Represents a query node that can handle a result set,
11+
* simply said can produce a rows result. This is a replacement
12+
* for legacy QueryNodeRequest.
13+
* <p></p>
14+
* Typically, a SELECT query is ResultSetAware, CREATE TABLE
15+
* query is not.
16+
*
17+
* @author ZorTik
18+
*/
19+
public interface ResultSetAware extends Query {
20+
21+
Optional<Row> obtainOne();
22+
<T> Optional<T> obtainOne(Class<T> mapTo);
23+
QueryRowsResult<Row> obtainAll();
24+
<T> QueryRowsResult<T> obtainAll(Class<T> mapTo);
25+
26+
}

core/src/main/java/me/zort/sqllib/internal/query/SelectQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import java.util.List;
1212
import java.util.Objects;
1313

14-
public class SelectQuery extends QueryNodeRequest<QueryNode<?>> implements Executive, Conditional<SelectQuery>, Limitable<SelectQuery> {
14+
public class SelectQuery extends QueryNode<QueryNode<?>> implements Executive, Conditional<SelectQuery>, Limitable<SelectQuery>, ResultSetAware {
1515

1616
private final List<String> cols;
1717
private String table;

core/src/main/java/me/zort/sqllib/internal/query/part/LimitStatement.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import me.zort.sqllib.internal.query.QueryDetails;
44
import me.zort.sqllib.internal.query.QueryNode;
5-
import me.zort.sqllib.internal.query.QueryNodeRequest;
5+
import me.zort.sqllib.internal.query.ResultSetAware;
66
import org.jetbrains.annotations.Nullable;
77

88
import java.util.HashMap;
99
import java.util.List;
1010

11-
public class LimitStatement<P extends QueryNode<?>> extends QueryNodeRequest<P> {
11+
public class LimitStatement<P extends QueryNode<?>> extends QueryNode<P> implements ResultSetAware {
1212

1313
private final int limit;
1414

core/src/main/java/me/zort/sqllib/internal/query/part/WhereStatement.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package me.zort.sqllib.internal.query.part;
22

33
import me.zort.sqllib.internal.exception.IllegalStatementOperationException;
4-
import me.zort.sqllib.internal.query.QueryDetails;
5-
import me.zort.sqllib.internal.query.QueryNode;
6-
import me.zort.sqllib.internal.query.QueryNodeRequest;
7-
import me.zort.sqllib.internal.query.QueryPriority;
4+
import me.zort.sqllib.internal.query.*;
85
import org.jetbrains.annotations.Nullable;
96

107
import java.util.*;
118

12-
public class WhereStatement<P extends QueryNode<?>> extends QueryNodeRequest<P> {
9+
public class WhereStatement<P extends QueryNode<?>> extends QueryNode<P> implements ResultSetAware {
1310

1411
private final List<QueryDetails> conditions = new ArrayList<>();
1512
private int currPhIndex = 0;

core/src/main/java/me/zort/sqllib/mapping/DefaultStatementMapping.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import me.zort.sqllib.api.mapping.StatementMappingStrategy;
99
import me.zort.sqllib.api.data.QueryResult;
1010
import me.zort.sqllib.internal.query.QueryNode;
11-
import me.zort.sqllib.internal.query.QueryNodeRequest;
11+
import me.zort.sqllib.internal.query.ResultSetAware;
1212
import me.zort.sqllib.mapping.annotation.Append;
1313
import me.zort.sqllib.mapping.exception.SQLMappingException;
1414
import me.zort.sqllib.util.ParameterPair;
@@ -69,7 +69,7 @@ public QueryResult executeQuery(StatementMappingOptions options, Method method,
6969
return ((SQLDatabaseConnection) connection).query(node);
7070
}
7171

72-
if (wrappedAnnotation.isProducesResult() && node instanceof QueryNodeRequest) {
72+
if (wrappedAnnotation.isProducesResult() && node instanceof ResultSetAware) {
7373
return mapTo != null
7474
? ((SQLDatabaseConnection) connection).query(node, mapTo)
7575
: ((SQLDatabaseConnection) connection).query(node);

0 commit comments

Comments
 (0)