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 *
0 commit comments