diff --git a/jOOQ-scala/.classpath b/jOOQ-scala/.classpath
index 5d979ae3e1..0b70e55cb9 100644
--- a/jOOQ-scala/.classpath
+++ b/jOOQ-scala/.classpath
@@ -13,8 +13,8 @@
-
+
diff --git a/jOOQ-scala/src/test/scala/org/jooq/scala/test/MapperTest.scala b/jOOQ-scala/src/test/scala/org/jooq/scala/test/MapperTest.scala
index bb836e2d9d..645812efbb 100644
--- a/jOOQ-scala/src/test/scala/org/jooq/scala/test/MapperTest.scala
+++ b/jOOQ-scala/src/test/scala/org/jooq/scala/test/MapperTest.scala
@@ -51,28 +51,34 @@ import java.sql.DriverManager
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import java.util.ArrayList
+import org.jooq.scala.test.pojo.BookCaseWithConstructorProperties
+import org.jooq.scala.test.pojo.BookCase
@RunWith(classOf[JUnitRunner])
class MapperTest extends FunSuite {
- test("RecordMapper") {
+ def dsl() = {
val c = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
val f = DSL.using(c, SQLDialect.H2);
+ f;
+ }
+
+ test("RecordMapper") {
val r =
- f.select(
- field("A", classOf[java.lang.Integer]),
- field("B", classOf[java.lang.Integer])
- )
- .from(
- values(
- row(1, 2),
- row(1, 3),
- row(2, 3)
- )
- as("T", "A", "B")
- )
- .fetch();
+ dsl().select(
+ field("A", classOf[java.lang.Integer]),
+ field("B", classOf[java.lang.Integer])
+ )
+ .from(
+ values(
+ row(1, 2),
+ row(1, 3),
+ row(2, 3)
+ )
+ as("T", "A", "B")
+ )
+ .fetch();
val mapped1 = r.map((x1 : java.lang.Integer, x2 : java.lang.Integer) => (x1 + ", " + x2))
val mapped2 = r.map((x : (java.lang.Integer, java.lang.Integer)) => (x._1 + ", " + x._2))
@@ -84,4 +90,29 @@ class MapperTest extends FunSuite {
assert(mapped1 == mapped2, "Tuple vs ArgumentList")
}
+ test("MapCaseClass") {
+ val books1 =
+ dsl().select(T_BOOK.ID, T_BOOK.AUTHOR_ID, T_BOOK.TITLE)
+ .from(T_BOOK)
+ .orderBy(T_BOOK.ID asc)
+ .fetchInto(classOf[BookCase])
+
+ assert(4 == books1.size());
+ assert(BookCase(1, 1, "1984") == books1.get(0));
+ assert(BookCase(2, 1, "Animal Farm") == books1.get(1));
+ assert(BookCase(3, 2, "O Alquimista") == books1.get(2));
+ assert(BookCase(4, 2, "Brida") == books1.get(3));
+
+ val books2 =
+ dsl().select()
+ .from(T_BOOK)
+ .orderBy(T_BOOK.ID asc)
+ .fetchInto(classOf[BookCaseWithConstructorProperties])
+
+ assert(4 == books2.size());
+ assert(BookCaseWithConstructorProperties(1, 1, "1984") == books2.get(0));
+ assert(BookCaseWithConstructorProperties(2, 1, "Animal Farm") == books2.get(1));
+ assert(BookCaseWithConstructorProperties(3, 2, "O Alquimista") == books2.get(2));
+ assert(BookCaseWithConstructorProperties(4, 2, "Brida") == books2.get(3));
+ }
}
diff --git a/jOOQ-scala/src/test/scala/org/jooq/scala/test/pojo/BookCase.scala b/jOOQ-scala/src/test/scala/org/jooq/scala/test/pojo/BookCase.scala
new file mode 100644
index 0000000000..b8d86f8877
--- /dev/null
+++ b/jOOQ-scala/src/test/scala/org/jooq/scala/test/pojo/BookCase.scala
@@ -0,0 +1,12 @@
+package org.jooq.scala.test.pojo
+
+import java.beans.ConstructorProperties
+
+/**
+ * Case classes are in fact classes with a public constructor
+ * @author Lukas Eder
+ */
+case class BookCase(
+ id: Int,
+ authorId: Int,
+ title: String)
\ No newline at end of file
diff --git a/jOOQ-scala/src/test/scala/org/jooq/scala/test/pojo/BookCaseWithConstructorProperties.scala b/jOOQ-scala/src/test/scala/org/jooq/scala/test/pojo/BookCaseWithConstructorProperties.scala
new file mode 100644
index 0000000000..62c9f07b26
--- /dev/null
+++ b/jOOQ-scala/src/test/scala/org/jooq/scala/test/pojo/BookCaseWithConstructorProperties.scala
@@ -0,0 +1,12 @@
+package org.jooq.scala.test.pojo
+
+import java.beans.ConstructorProperties
+
+/**
+ * Case classes are in fact classes with a public constructor, which can be annotated using {@link ConstructorProperties}
+ * @author Lukas Eder
+ */
+case class BookCaseWithConstructorProperties @ConstructorProperties(Array("id", "authorId", "title")) (
+ id: Int,
+ authorId: Int,
+ title: String)
\ No newline at end of file