You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/07/15 12:25:05 UTC
[cayenne] branch STABLE-4.2 updated: Improve javadocs for map() methods of SQLSelect and ColumnSelect
This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch STABLE-4.2
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/STABLE-4.2 by this push:
new 9a0c69b94 Improve javadocs for map() methods of SQLSelect and ColumnSelect
9a0c69b94 is described below
commit 9a0c69b948cac89e7af56e1da1b3c9f85d008d6e
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Jul 15 15:24:58 2022 +0300
Improve javadocs for map() methods of SQLSelect and ColumnSelect
---
.../main/java/org/apache/cayenne/query/ColumnSelect.java | 11 ++++++++---
.../src/main/java/org/apache/cayenne/query/SQLSelect.java | 14 ++++++++++++++
.../main/java/org/apache/cayenne/reflect/PojoMapper.java | 12 ++++++++++--
.../test/java/org/apache/cayenne/query/ColumnSelectIT.java | 1 -
4 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
index bc34d0d63..a4fc807f9 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
@@ -625,10 +625,15 @@ public class ColumnSelect<T> extends FluentSelect<T> {
}
/**
- * Wrap result to given class. Wrapper class should be public and have public constructor with no args.
- * Columns order in the query should corespond to fields defined in that class.
+ * Maps result of this query by processing with a given function.
+ * <br/>
+ * Could be used to map plain Object[] to some domain-specific object.
+ * <br/>
+ * <b>Note:</b> this method could be called multiple time, result will be mapped by all functions in the call order.
+ * @param mapper function that maps result to the required type.
+ * @return this query with changed result type
+ * @param <E> new result type
*
- * @param mapper function that maps result to required form.
* @since 4.2
*/
@SuppressWarnings("unchecked")
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
index 3278036fd..cd9f10943 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
@@ -687,6 +687,20 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
return this;
}
+ /**
+ * Map result of this query by processing with a given function.
+ * <br/>
+ * Could be used to map plain Object[] to some domain-specific object.
+ * <br/>
+ * <b>Note:</b> this method could be called multiple time, result will be mapped by all functions in the call order.
+ * @param mapper function that maps result to the required type.
+ * @return this query with changed result type
+ * @param <E> new result type
+ *
+ * @see ColumnSelect#map(Function)
+ *
+ * @since 4.2
+ */
@SuppressWarnings("unchecked")
public <E> SQLSelect<E> map(Function<T, E> mapper) {
this.resultMapper = mapper;
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/PojoMapper.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/PojoMapper.java
index c0abf6e19..7739c8c6d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/PojoMapper.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/PojoMapper.java
@@ -27,13 +27,21 @@ import java.util.function.Function;
import org.apache.cayenne.CayenneRuntimeException;
/**
- * Simple mapper of Object[] to POJO class. This class relies on field order, so use with caution.
+ * Simple mapper of Object[] to a POJO class.
+ * Target class must have default constructor and at least as many fields as a processed array.
+ * <br/>
+ * <b>Note:</b> Current implementation relies on the field order,
+ * so use with caution as this order may vary on different JDK platforms.
* @param <T> type of object to produce
+ *
+ * @see org.apache.cayenne.query.ColumnSelect#map(Function)
+ * @see org.apache.cayenne.query.SQLSelect#map(Function)
+ *
* @since 4.2
*/
public class PojoMapper<T> implements Function<Object[], T> {
- private static MethodHandles.Lookup lookup = MethodHandles.lookup();
+ private static final MethodHandles.Lookup lookup = MethodHandles.lookup();
private final Class<T> type;
private final MethodHandle constructor;
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
index eb79b6f4d..f9496e020 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
@@ -41,7 +41,6 @@ import org.apache.cayenne.exp.property.EntityProperty;
import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
-import org.apache.cayenne.reflect.PojoMapper;
import org.apache.cayenne.test.jdbc.DBHelper;
import org.apache.cayenne.test.jdbc.TableHelper;
import org.apache.cayenne.testdo.testmap.Artist;