();
+
+ for (Param> param : extractParams(part).values()) {
+ result.add(param.getValue());
+ }
+
+ return Collections.unmodifiableList(result);
+ }
+
+ /**
+ * Get a Map of named parameters
+ *
+ * The Map itself is immutable, but the {@link Param} elements
+ * allow for modifying bind values on an existing {@link Query} (or any
+ * other {@link QueryPart}).
+ *
+ * Bind values created with {@link Factory#val(Object)} will have their bind
+ * index as name.
+ *
+ * @see Param
+ * @see Factory#param(String, Object)
+ */
+ public final Map> extractParams(QueryPart part) {
+ ParamCollector collector = new ParamCollector(this);
+ collector.bind(part);
+ return Collections.unmodifiableMap(collector.result);
+ }
+
+ /**
+ * Get a named parameter from a {@link QueryPart}, provided its name.
+ *
+ * Bind values created with {@link Factory#val(Object)} will have their bind
+ * index as name.
+ *
+ * @see Param
+ * @see Factory#param(String, Object)
+ */
+ public final Param> extractParam(QueryPart part, String name) {
+ return extractParams(part).get(name);
+ }
+
/**
* Get a new {@link BindContext} for the context of this executor
*
diff --git a/jOOQ/src/test/java/org/jooq/test/BasicTest.java b/jOOQ/src/test/java/org/jooq/test/BasicTest.java
index 923c2f0109..702d7a023c 100644
--- a/jOOQ/src/test/java/org/jooq/test/BasicTest.java
+++ b/jOOQ/src/test/java/org/jooq/test/BasicTest.java
@@ -2332,10 +2332,25 @@ public class BasicTest extends AbstractTest {
Param> p32 = q3.getParam("2");
Param> p42 = q4.getParam("p2");
- assertEquals(Arrays.asList("1", "2"), new ArrayList(q1.getParams().keySet()));
- assertEquals(Arrays.asList("p1", "p2"), new ArrayList(q2.getParams().keySet()));
- assertEquals(Arrays.asList("p1", "2"), new ArrayList(q3.getParams().keySet()));
- assertEquals(Arrays.asList("1", "p2"), new ArrayList(q4.getParams().keySet()));
+ assertEquals(p11, create.extractParam(q1, "1"));
+ assertEquals(p21, create.extractParam(q2, "p1"));
+ assertEquals(p31, create.extractParam(q3, "p1"));
+ assertEquals(p41, create.extractParam(q4, "1"));
+
+ assertEquals(p12, create.extractParam(q1, "2"));
+ assertEquals(p22, create.extractParam(q2, "p2"));
+ assertEquals(p32, create.extractParam(q3, "2"));
+ assertEquals(p42, create.extractParam(q4, "p2"));
+
+ assertEquals(Arrays.asList("1", "2"), new ArrayList(create.extractParams(q1).keySet()));
+ assertEquals(Arrays.asList("p1", "p2"), new ArrayList(create.extractParams(q2).keySet()));
+ assertEquals(Arrays.asList("p1", "2"), new ArrayList(create.extractParams(q3).keySet()));
+ assertEquals(Arrays.asList("1", "p2"), new ArrayList(create.extractParams(q4).keySet()));
+
+ assertEquals(Arrays.asList("1", "2"), new ArrayList(create.extractParams(q1).keySet()));
+ assertEquals(Arrays.asList("p1", "p2"), new ArrayList(create.extractParams(q2).keySet()));
+ assertEquals(Arrays.asList("p1", "2"), new ArrayList(create.extractParams(q3).keySet()));
+ assertEquals(Arrays.asList("1", "p2"), new ArrayList(create.extractParams(q4).keySet()));
// Types
assertEquals(Integer.class, p11.getType());