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 2019/08/26 12:50:57 UTC
[cayenne] 03/05: CAY-2527 API to map Object[] result to POJO -
combine multiple mappers
This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit d3856d212d7c050c4185ede7ad0e7add56923fd8
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Aug 7 17:04:23 2019 +0300
CAY-2527 API to map Object[] result to POJO
- combine multiple mappers
---
.../apache/cayenne/query/ColumnSelectMetadata.java | 7 +++++-
.../apache/cayenne/query/SQLTemplateMetadata.java | 6 ++++-
.../org/apache/cayenne/query/ColumnSelectIT.java | 26 ++++++++++++++++++++++
3 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelectMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelectMetadata.java
index 2ab406e..1222346 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelectMetadata.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelectMetadata.java
@@ -136,8 +136,13 @@ class ColumnSelectMetadata extends ObjectSelectMetadata {
this.suppressingDistinct = suppressingDistinct;
}
+ @SuppressWarnings("unchecked")
void setResultMapper(Function<?, ?> resultMapper) {
- this.resultMapper = resultMapper;
+ if(this.resultMapper != null) {
+ this.resultMapper = this.resultMapper.andThen((Function)resultMapper);
+ } else {
+ this.resultMapper = resultMapper;
+ }
}
@Override
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java
index 6bd92ed..99910ca 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java
@@ -129,7 +129,11 @@ public class SQLTemplateMetadata extends BaseQueryMetadata {
}
void setResultMapper(Function<?,?> resultMapper) {
- this.resultMapper = resultMapper;
+ if(this.resultMapper != null) {
+ this.resultMapper = this.resultMapper.andThen((Function)resultMapper);
+ } else {
+ this.resultMapper = resultMapper;
+ }
}
@Override
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 6ec41fb..5220e7b 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
@@ -1178,6 +1178,25 @@ public class ColumnSelectIT extends ServerCase {
assertNotNull(testPojo19.date);
}
+ @Test
+ public void testDoubleMapToPojo() {
+ List<TestPojo2> result = ObjectSelect.query(Artist.class)
+ .columns(Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH, Artist.ARTIST_NAME.trim().length())
+ .where(Artist.ARTIST_NAME.like("artist%"))
+ .orderBy(Artist.ARTIST_ID_PK_PROPERTY.asc())
+ .map(TestPojo::new)
+ .map(TestPojo2::new)
+ .select(context);
+ assertEquals(20, result.size());
+
+ TestPojo2 testPojo0 = result.get(0);
+ assertNotNull(testPojo0);
+ assertEquals("artist1", testPojo0.pojo.name);
+ assertNotNull(testPojo0.pojo.date);
+ assertEquals(7, testPojo0.pojo.length);
+
+ }
+
static class TestPojo {
String name;
Date date;
@@ -1188,4 +1207,11 @@ public class ColumnSelectIT extends ServerCase {
length = (Integer)data[2];
}
}
+
+ static class TestPojo2 {
+ TestPojo pojo;
+ TestPojo2(TestPojo pojo) {
+ this.pojo = pojo;
+ }
+ }
}