Author: tfischer
Date: Wed Sep 24 17:40:11 2014
New Revision: 1627371

URL: http://svn.apache.org/r1627371
Log:
TORQUE-320 - Do not add columns to the select clause when using GroupBy

Added:
    
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/GroupByTest.java
Modified:
    
db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java
    
db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java

Modified: 
db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java?rev=1627371&r1=1627370&r2=1627371&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java
 (original)
+++ 
db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java
 Wed Sep 24 17:40:11 2014
@@ -442,7 +442,6 @@ public final class SqlBuilder
             return;
         }
         UniqueList<String> groupByClause = query.getGroupByClause();
-        UniqueList<String> selectClause = query.getSelectClause();
         UniqueColumnList groupBy = criteria.getGroupByColumns();
 
         for (Column groupByColumn : groupBy)
@@ -456,7 +455,6 @@ public final class SqlBuilder
             }
 
             groupByClause.add(column.getSqlExpression());
-            selectClause.add(column.getSqlExpression());
             addTableToFromClause(column, criteria, query);
         }
     }

Modified: 
db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java?rev=1627371&r1=1627370&r2=1627371&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java
 (original)
+++ 
db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java
 Wed Sep 24 17:40:11 2014
@@ -1383,9 +1383,10 @@ public class SqlBuilderTest extends Base
     {
         Criteria criteria = new Criteria();
         criteria.addGroupByColumn(stringColumnMap);
+        criteria.addSelectColumn(integerColumnMap);
         Query query = SqlBuilder.buildQuery(criteria);
         assertEquals(
-                "SELECT TABLE.COLUMN1 FROM TABLE GROUP BY TABLE.COLUMN1",
+                "SELECT TABLE.COLUMN4 FROM TABLE GROUP BY TABLE.COLUMN1",
                 query.toString());
     }
 

Added: 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/GroupByTest.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/GroupByTest.java?rev=1627371&view=auto
==============================================================================
--- 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/GroupByTest.java
 (added)
+++ 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/generated/peer/GroupByTest.java
 Wed Sep 24 17:40:11 2014
@@ -0,0 +1,119 @@
+package org.apache.torque.generated.peer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.torque.BaseDatabaseTestCase;
+import org.apache.torque.TorqueException;
+import org.apache.torque.criteria.Criteria;
+import org.apache.torque.om.mapper.IntegerMapper;
+import org.apache.torque.test.dbobject.Author;
+import org.apache.torque.test.dbobject.Book;
+import org.apache.torque.test.peer.BookPeer;
+import org.apache.torque.util.functions.Max;
+
+/**
+ * Tests Group by statements.
+ *
+ * @version $Id: JoinTest.java 1436782 2013-01-22 07:51:31Z tfischer $
+ */
+public class GroupByTest extends BaseDatabaseTestCase
+{
+    private List<Author> authorList;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        cleanBookstore();
+        authorList = insertBookstoreData();
+    }
+
+    /**
+     * Test a basic group by.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testAddGroupByColumn() throws Exception
+    {
+        Criteria criteria = new Criteria()
+                .addSelectColumn(BookPeer.AUTHOR_ID)
+                .addGroupByColumn(BookPeer.AUTHOR_ID)
+                .addAscendingOrderByColumn(BookPeer.AUTHOR_ID)
+                .setDistinct();
+
+        List<Integer> idList
+                = BookPeer.doSelect(criteria, new IntegerMapper());
+
+        assertEquals(10, idList.size());
+        assertEquals(getAuthorIds(), idList);
+    }
+
+    private List<Integer> getAuthorIds()
+    {
+        List<Integer> result = new ArrayList<Integer>();
+        for (Author author : authorList)
+        {
+            result.add(author.getAuthorId());
+        }
+        return result;
+    }
+
+    /**
+     * Test a group by where the group by column is not selected.
+     *
+     * @throws Exception if the test fails
+     */
+    public void testAddGroupByColumnNotInSelectClause() throws Exception
+    {
+        Criteria criteria = new Criteria()
+                .addSelectColumn(new Max(BookPeer.BOOK_ID))
+                .addGroupByColumn(BookPeer.AUTHOR_ID);
+
+        List<Integer> maxList
+                = BookPeer.doSelect(criteria, new IntegerMapper());
+
+        assertEquals(10, maxList.size());
+        assertEquals(
+                new HashSet<Integer>(getMaxBookIdPerAuthor()),
+                new HashSet<Integer>(maxList));
+    }
+
+    private List<Integer> getMaxBookIdPerAuthor() throws TorqueException
+    {
+        List<Integer> result = new ArrayList<Integer>();
+        for (Author author : authorList)
+        {
+            int maxBookId = -1;
+            for (Book book : author.getBooks())
+            {
+                if (book.getBookId() > maxBookId)
+                {
+                    maxBookId = book.getBookId();
+                }
+            }
+            result.add(maxBookId);
+        }
+        return result;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscr...@db.apache.org
For additional commands, e-mail: torque-dev-h...@db.apache.org

Reply via email to