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) {

Reply via email to