Repository: metamodel Updated Branches: refs/heads/master 90eaf978c -> 7e4ef0c3e
METAMODEL-78: Fixed SELECT DISTINCT queries that returned duplicates Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/c706df83 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/c706df83 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/c706df83 Branch: refs/heads/master Commit: c706df83088150a466d94625ed14f913f52adce9 Parents: 90eaf97 Author: Fabian Welz <[email protected]> Authored: Tue Jan 20 08:58:17 2015 +0100 Committer: Kasper Sørensen <[email protected]> Committed: Tue Jan 20 08:58:17 2015 +0100 ---------------------------------------------------------------------- .../metamodel/QueryPostprocessDataContext.java | 2 +- .../metamodel/pojo/PojoDataContextTest.java | 24 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/c706df83/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java b/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java index ab2dd71..0eba921 100644 --- a/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java +++ b/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java @@ -157,7 +157,7 @@ public abstract class QueryPostprocessDataContext extends AbstractDataContext im // Check for very simple queries with max rows property set (typically // preview), see Ticket #187 previewTable: if (whereItems.isEmpty() && groupByItems.isEmpty() && havingItems.isEmpty() - && orderByItems.isEmpty() && fromItems.size() == 1) { + && orderByItems.isEmpty() && fromItems.size() == 1 && !query.getSelectClause().isDistinct()) { final Table table = fromItems.get(0).getTable(); if (table != null) { http://git-wip-us.apache.org/repos/asf/metamodel/blob/c706df83/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java ---------------------------------------------------------------------- diff --git a/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java b/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java index e345a8c..d5e093c 100644 --- a/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java +++ b/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java @@ -31,6 +31,7 @@ import org.apache.metamodel.DataContext; import org.apache.metamodel.UpdateCallback; import org.apache.metamodel.UpdateScript; import org.apache.metamodel.data.DataSet; +import org.apache.metamodel.query.Query; import org.apache.metamodel.schema.ColumnType; import org.apache.metamodel.schema.Schema; import org.apache.metamodel.schema.Table; @@ -159,6 +160,29 @@ public class PojoDataContextTest extends TestCase { assertEquals("Row[values=[3, 1005, true]]", ds.getRow().toString()); assertFalse(ds.next()); + Query qOrderd = dc.query().from("bar").select("col1").toQuery().selectDistinct().orderBy("col1"); + ds = dc.executeQuery(qOrderd); + assertTrue(ds.next()); + assertEquals("Row[values=[2]]", ds.getRow().toString()); + assertTrue(ds.next()); + assertEquals("Row[values=[3]]", ds.getRow().toString()); + assertFalse(ds.next()); + + Query qUnordered = dc.query().from("bar").select("col1").toQuery().selectDistinct(); + ds = dc.executeQuery(qUnordered); + assertTrue(ds.next()); + //Check both possibilities for the order, because not for certain + if(ds.getRow().toString().equals("Row[values=[2]]")){ + assertEquals("Row[values=[2]]", ds.getRow().toString()); + assertTrue(ds.next()); + assertEquals("Row[values=[3]]", ds.getRow().toString()); + }else{ + assertEquals("Row[values=[3]]", ds.getRow().toString()); + assertTrue(ds.next()); + assertEquals("Row[values=[2]]", ds.getRow().toString()); + } + assertFalse(ds.next()); + dc.executeUpdate(new UpdateScript() { @Override public void run(UpdateCallback callback) {
