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


The following commit(s) were added to refs/heads/master by this push:
     new 1cfd2db  CAY-2657 SelectQueryDescriptor should use ObjectSelect
1cfd2db is described below

commit 1cfd2dbbed4280ba75be29bab02fd6281f3c477f
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Mon Sep 21 17:07:54 2020 +0300

    CAY-2657 SelectQueryDescriptor should use ObjectSelect
---
 RELEASE-NOTES.txt                                                | 1 +
 .../main/java/org/apache/cayenne/map/SelectQueryDescriptor.java  | 4 +++-
 .../src/main/java/org/apache/cayenne/query/ColumnSelect.java     | 9 ---------
 .../src/main/java/org/apache/cayenne/query/FluentSelect.java     | 3 ++-
 .../src/main/java/org/apache/cayenne/query/ObjectSelect.java     | 9 +++++++++
 5 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 0872506..04ba3b3 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -15,6 +15,7 @@ Changes/New Features:
 
 CAY-2338 Support comments in cgen and default templates
 CAY-2656 Modeler: option to download required jars directly from maven central
+CAY-2657 SelectQueryDescriptor should use ObjectSelect
 CAY-2659 Use new SQLBuilder utility to generate SQL for batch queries
 CAY-2662 Use custom interface for SQL tree processor instead of a 
Function<Node, Node>
 CAY-2663 Support for custom SQL operators
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
index 5ca45ef..8722cd0 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
@@ -193,8 +193,10 @@ public class SelectQueryDescriptor extends QueryDescriptor 
{
             prefetchesMap.forEach(query::prefetch);
         }
 
-        // TODO: apply DISTINCT property
         query.initWithProperties(this.getProperties());
+        if(this.isDistinct()) {
+            query.distinct();
+        }
         return query;
     }
 
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java 
b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
index 4a0e040..bc34d0d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
@@ -70,7 +70,6 @@ public class ColumnSelect<T> extends FluentSelect<T> {
     private Collection<Property<?>> columns;
     // package private for tests
     boolean singleColumn = true;
-    boolean distinct;
 
     ColumnSelectMetadata metaData = new ColumnSelectMetadata();
 
@@ -604,14 +603,6 @@ public class ColumnSelect<T> extends FluentSelect<T> {
         return columns;
     }
 
-    /**
-     * @since 4.2
-     */
-    @Override
-    public boolean isDistinct() {
-        return distinct;
-    }
-
     @Override
     public T selectFirst(ObjectContext context) {
         return context.selectFirst(limit(1));
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java 
b/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java
index f886732..58201c0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/FluentSelect.java
@@ -51,6 +51,7 @@ public abstract class FluentSelect<T> extends AbstractQuery 
implements Select<T>
     boolean havingExpressionIsActive = false;
 
     protected Collection<Ordering> orderings;
+    boolean distinct;
 
     protected FluentSelect() {
     }
@@ -213,7 +214,7 @@ public abstract class FluentSelect<T> extends AbstractQuery 
implements Select<T>
      * @since 4.2
      */
     public boolean isDistinct() {
-        return false;
+        return distinct;
     }
 
     /**
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java 
b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
index 6c728a1..4a54d78 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
@@ -655,6 +655,15 @@ public class ObjectSelect<T> extends FluentSelect<T> 
implements ParameterizedQue
     }
 
     /**
+     * @since 4.2
+     * @return this
+     */
+    public ObjectSelect<T> distinct() {
+        this.distinct = true;
+        return this;
+    }
+
+    /**
      * <p>Quick way to select count of records</p>
      * <p>Usage:
      * <pre>

Reply via email to