Skip to content

Commit dfcbcfc

Browse files
committed
Code improvements.
Signed-off-by: Franz Wilhelmstötter <franz.wilhelmstoetter@gmail.com>
1 parent e2aa603 commit dfcbcfc

File tree

2 files changed

+57
-36
lines changed

2 files changed

+57
-36
lines changed

facilejdbc/src/main/java/io/jenetics/facilejdbc/Param.java

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,26 @@
3333
* This is the base interface of the {@link SingleParam} and {@link MultiParam}
3434
* class.
3535
* <p>
36-
* Creating single-valued parameters:
36+
* <b>Creating single-valued parameters</b>
3737
* {@snippet lang="java":
3838
* INSERT_QUERY.on(
3939
* Param.value("forename", "Werner"),
4040
* Param.value("birthday", LocalDate.now()),
41-
* Param.value("email", "some.email@gmail.com"))
41+
* Param.value("email", "some.email@gmail.com")
42+
* );
4243
* }
43-
*
44-
* Creating multivalued parameters:
44+
* <p>
45+
* <b>Creating multi-valued parameters</b>
4546
* {@snippet lang="java":
46-
* Query.of("SELECT * FROM table WHERE id = IN(:ids);")
47+
* var query = Query.of("SELECT * FROM table WHERE id = IN(:ids);")
4748
* .on(Param.values("ids", 1, 2, 3, 4))
49+
*
50+
* assert query.rawSql().equals(
51+
* "SELECT * FROM book WHERE id IN(:ids[0],:ids[1],:ids[2],:ids[3]);"
52+
* );
53+
* assert query.sql().equals(
54+
* "SELECT * FROM book WHERE id IN(?,?,?,?);"
55+
* );
4856
* }
4957
*
5058
* @see SingleParam
@@ -72,7 +80,7 @@ public sealed interface Param permits SingleParam, MultiParam {
7280
* {@code value}.
7381
* {@snippet lang="java":
7482
* final var result = Query.of("SELECT * FROM table WHERE id = :id;")
75-
* .on(Param.value("id", 43245)
83+
* .on(Param.value("id", 43245))
7684
* .as(PARSER.singleOpt(), conn);
7785
* }
7886
*
@@ -91,11 +99,20 @@ static SingleParam value(final String name, final Object value) {
9199

92100
/**
93101
* Create a new (multi) query parameter object for the given {@code name}
94-
* and the given {@code values}.
102+
* and the given {@code values}. Each value is converted into prepared
103+
* statement parameter.
95104
* {@snippet lang="java":
96-
* final var result = Query.of("SELECT * FROM table WHERE id = IN(:ids);")
97-
* .on(Param.values("ids", List.of(43245, 434, 23, 987, 1239))
98-
* .as(PARSER.list(), conn);
105+
* final var query = Query.of("SELECT * FROM table WHERE id = IN(:ids);")
106+
* .on(Param.values("ids", List.of(43245, 434, 23, 987)));
107+
*
108+
* assert query.rawSql().equals(
109+
* "SELECT * FROM table WHERE id IN(:ids[0],:ids[1],:ids[2],:ids[3]);"
110+
* );
111+
* assert query.sql().equals(
112+
* "SELECT * FROM table WHERE id IN(?,?,?,?);"
113+
* );
114+
*
115+
* final var result = query.as(PARSER.list(), conn);
99116
* }
100117
*
101118
* @since 1.3
@@ -118,20 +135,31 @@ static MultiParam values(final String name, final Iterable<?> values) {
118135
);
119136
}
120137

121-
@SuppressWarnings("unchecked")
122138
private static <T> Stream<T> stream(final Iterable<? extends T> values) {
123-
return values instanceof Collection<?>
124-
? ((Collection<T>)values).stream()
125-
: StreamSupport.stream(((Iterable<T>)values).spliterator(), false);
139+
@SuppressWarnings("unchecked")
140+
final var vals = (Iterable<T>)values;
141+
142+
return vals instanceof Collection<T> collection
143+
? collection.stream()
144+
: StreamSupport.stream((vals).spliterator(), false);
126145
}
127146

128147
/**
129148
* Create a new (multi) query parameter object for the given {@code name}
130-
* and the given {@code values}.
149+
* and the given {@code values}. Each value is converted into prepared
150+
* statement parameter.
131151
* {@snippet lang="java":
132-
* final var result = Query.of("SELECT * FROM table WHERE id = IN(:ids);")
133-
* .on(Param.values("ids", 43245, 434, 23, 987, 1239)
134-
* .as(PARSER.list(), conn);
152+
* final var query = Query.of("SELECT * FROM table WHERE id = IN(:ids);")
153+
* .on(Param.values("ids", 43245, 434, 23, 987));
154+
*
155+
* assert query.rawSql().equals(
156+
* "SELECT * FROM table WHERE id IN(:ids[0],:ids[1],:ids[2],:ids[3]);"
157+
* );
158+
* assert query.sql().equals(
159+
* "SELECT * FROM table WHERE id IN(?,?,?,?);"
160+
* );
161+
*
162+
* final var result = query.as(PARSER.list(), conn);
135163
* }
136164
*
137165
* @since 1.3
@@ -154,7 +182,7 @@ static MultiParam values(final String name, final Object... values) {
154182
* lazily evaluated {@code value}.
155183
* {@snippet lang="java":
156184
* final var result = Query.of("SELECT * FROM table WHERE date < :date;")
157-
* .on(Param.lazyValue("date", LocalDate::now)
185+
* .on(Param.lazyValue("date", LocalDate::now))
158186
* .as(PARSER.singleOpt(), conn);
159187
* }
160188
*
@@ -175,10 +203,10 @@ static SingleParam lazyValue(final String name, final SqlSupplier<?> value) {
175203
* Create a new query parameter object for the given {@code name} and
176204
* lazily evaluated {@code values}.
177205
* {@snippet lang="java":
178-
* final SqlSupplier<Integer> id1 = ...;
179-
* final SqlSupplier<Integer> id2 = ...;
206+
* final SqlSupplier<Integer> id1 = null; // @replace substring='null' replacement="..."
207+
* final SqlSupplier<Integer> id2 = null; // @replace substring='null' replacement="..."
180208
* final var result = Query.of("SELECT * FROM table WHERE id = IN(:ids);")
181-
* .on(Param.lazyValues("id", List.of(id1, id2))
209+
* .on(Param.lazyValues("id", List.of(id1, id2)))
182210
* .as(PARSER.list(), conn);
183211
* }
184212
*

facilejdbc/src/main/java/io/jenetics/facilejdbc/Query.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package io.jenetics.facilejdbc;
2121

22-
import static java.lang.String.format;
2322
import static java.sql.Statement.RETURN_GENERATED_KEYS;
2423
import static java.util.Arrays.asList;
2524
import static java.util.Objects.requireNonNull;
@@ -44,7 +43,6 @@
4443
import java.util.List;
4544
import java.util.Map;
4645
import java.util.Optional;
47-
import java.util.stream.Collectors;
4846
import java.util.stream.IntStream;
4947
import java.util.stream.Stream;
5048

@@ -223,18 +221,13 @@ public Query withTimeout(final Duration timeout) {
223221
* @throws NullPointerException if the given {@code params} is {@code null}
224222
*/
225223
public Query on(final Iterable<? extends Param> params) {
226-
final List<SingleParam> singleParams = new ArrayList<>();
227-
final List<MultiParam> multiParams = new ArrayList<>();
228-
for (var param : params) {
224+
final var singleParams = new ArrayList<SingleParam>();
225+
final var multiParams = new ArrayList<MultiParam>();
229226

230-
if (param instanceof SingleParam p) {
231-
singleParams.add(p);
232-
} else if (param instanceof MultiParam p) {
233-
multiParams.add(p);
234-
} else {
235-
throw new AssertionError(format(
236-
"Type '%s' not expected.", param.getClass().getName()
237-
));
227+
for (var param : params) {
228+
switch (param) {
229+
case SingleParam sp -> singleParams.add(sp);
230+
case MultiParam mp -> multiParams.add(mp);
238231
}
239232
}
240233

@@ -261,7 +254,7 @@ private Query onMultiParam(final List<MultiParam> params) {
261254
new Params(
262255
params.stream()
263256
.flatMap(Query::toParams)
264-
.collect(Collectors.toList())
257+
.toList()
265258
)
266259
);
267260

0 commit comments

Comments
 (0)