diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/Union.java b/querydsl-sql/src/main/java/com/querydsl/sql/Union.java index 08f7b93e2..aaad3688c 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/Union.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/Union.java @@ -16,6 +16,7 @@ package com.querydsl.sql; import java.util.List; import com.mysema.commons.lang.CloseableIterator; +import com.querydsl.core.Fetchable; import com.querydsl.core.types.*; /** @@ -25,13 +26,14 @@ import com.querydsl.core.types.*; * * @param return type of projection */ -public interface Union extends SubQueryExpression { +public interface Union extends SubQueryExpression, Fetchable { /** * Get the projection as a typed List * - * @return results + * @deprecated Use {@link Union#fetch()} */ + @Deprecated List list(); /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java b/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java index 9629520f5..6e238bf01 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java @@ -20,6 +20,7 @@ import javax.annotation.Nullable; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.Query; import com.querydsl.core.QueryMetadata; +import com.querydsl.core.QueryResults; import com.querydsl.core.types.*; /** @@ -43,11 +44,36 @@ public class UnionImpl & Query> imple return query.fetch(); } + @Override + public List fetch() { + return query.fetch(); + } + + @Override + public T fetchFirst() { + return query.fetchFirst(); + } + + @Override + public T fetchOne() { + return query.fetchOne(); + } + @Override public CloseableIterator iterate() { return query.iterate(); } + @Override + public QueryResults fetchResults() { + return query.fetchResults(); + } + + @Override + public long fetchCount() { + return query.fetchCount(); + } + @Override public Union groupBy(Expression... o) { query.groupBy(o); @@ -60,7 +86,6 @@ public class UnionImpl & Query> imple return this; } - @Override public Union orderBy(OrderSpecifier... o) { query.orderBy(o); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/UnionBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/UnionBase.java index fa2edb361..79987cd6f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/UnionBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/UnionBase.java @@ -12,6 +12,7 @@ import java.util.List; import org.junit.Ignore; import org.junit.Test; +import com.google.common.collect.ImmutableList; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.Tuple; import com.querydsl.core.testutil.ExcludeIn; @@ -37,11 +38,24 @@ public class UnionBase extends AbstractBaseTest { @Test @SuppressWarnings("unchecked") + @ExcludeIn(FIREBIRD) // order is not properly supported public void Union() throws SQLException { + SubQueryExpression sq1 = query().from(employee).select(employee.id.max().as("ID")); + SubQueryExpression sq2 = query().from(employee).select(employee.id.min().as("ID")); + assertEquals( + ImmutableList.of(query().select(employee.id.min()).from(employee).fetchFirst(), + query().select(employee.id.max()).from(employee).fetchFirst()), + query().union(sq1, sq2).orderBy(employee.id.asc()).fetch()); + } + + @Test + @SuppressWarnings("unchecked") + public void Union_List() throws SQLException { SubQueryExpression sq1 = query().from(employee).select(employee.id.max()); SubQueryExpression sq2 = query().from(employee).select(employee.id.min()); - List list = query().union(sq1, sq2).list(); - assertFalse(list.isEmpty()); + assertEquals( + query().union(sq1, sq2).fetch(), + query().union(sq1, sq2).list()); } @Test @@ -49,7 +63,7 @@ public class UnionBase extends AbstractBaseTest { public void Union_All() { SubQueryExpression sq1 = query().from(employee).select(employee.id.max()); SubQueryExpression sq2 = query().from(employee).select(employee.id.min()); - List list = query().unionAll(sq1, sq2).list(); + List list = query().unionAll(sq1, sq2).fetch(); assertFalse(list.isEmpty()); } @@ -58,7 +72,7 @@ public class UnionBase extends AbstractBaseTest { public void Union_Multiple_Columns() throws SQLException { SubQueryExpression sq1 = query().from(employee).select(employee.firstname, employee.lastname); SubQueryExpression sq2 = query().from(employee).select(employee.lastname, employee.firstname); - List list = query().union(sq1, sq2).list(); + List list = query().union(sq1, sq2).fetch(); assertFalse(list.isEmpty()); for (Tuple row : list) { assertNotNull(row.get(0, Object.class)); @@ -101,7 +115,7 @@ public class UnionBase extends AbstractBaseTest { public void Union_Empty_Result() throws SQLException { SubQueryExpression sq1 = query().from(employee).where(employee.firstname.eq("XXX")).select(employee.id); SubQueryExpression sq2 = query().from(employee).where(employee.firstname.eq("YYY")).select(employee.id); - List list = query().union(sq1, sq2).list(); + List list = query().union(sq1, sq2).fetch(); assertTrue(list.isEmpty()); } @@ -110,7 +124,7 @@ public class UnionBase extends AbstractBaseTest { public void Union2() throws SQLException { List list = query().union( query().from(employee).select(employee.id.max()), - query().from(employee).select(employee.id.min())).list(); + query().from(employee).select(employee.id.min())).fetch(); assertFalse(list.isEmpty()); } @@ -120,7 +134,7 @@ public class UnionBase extends AbstractBaseTest { public void Union3() throws SQLException { SubQueryExpression sq3 = query().from(employee).select(new Expression[]{employee.id.max()}); SubQueryExpression sq4 = query().from(employee).select(new Expression[]{employee.id.min()}); - List list2 = query().union(sq3, sq4).list(); + List list2 = query().union(sq3, sq4).fetch(); assertFalse(list2.isEmpty()); } @@ -150,7 +164,7 @@ public class UnionBase extends AbstractBaseTest { .select(employee.id, employee.firstname, superior.id.as("sup_id"), superior.firstname.as("sup_name")); SubQueryExpression sq2 = query().from(employee) .select(employee.id, employee.firstname, null, null); - List results = query().union(sq1, sq2).orderBy(employee.id.asc()).list(); + List results = query().union(sq1, sq2).orderBy(employee.id.asc()).fetch(); for (Tuple result : results) { System.err.println(Arrays.asList(result)); } @@ -162,7 +176,7 @@ public class UnionBase extends AbstractBaseTest { public void Union_With_Order() throws SQLException { SubQueryExpression sq1 = query().from(employee).select(employee.id); SubQueryExpression sq2 = query().from(employee).select(employee.id); - List list = query().union(sq1, sq2).orderBy(employee.id.asc()).list(); + List list = query().union(sq1, sq2).orderBy(employee.id.asc()).fetch(); assertFalse(list.isEmpty()); }