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: [email protected]
For additional commands, e-mail: [email protected]