Skip to content

Commit bcefd68

Browse files
committed
Merge remote-tracking branch 'origin/master' into allow-ui-template-sharing
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2 parents b3ebbcf + b509e08 commit bcefd68

File tree

7 files changed

+181
-159
lines changed

7 files changed

+181
-159
lines changed

framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import java.util.TimeZone;
4545
import java.util.UUID;
4646
import java.util.concurrent.ConcurrentHashMap;
47-
import com.google.common.base.Strings;
47+
4848
import javax.naming.ConfigurationException;
4949
import javax.persistence.AttributeOverride;
5050
import javax.persistence.Column;
@@ -55,16 +55,6 @@
5555
import javax.persistence.Table;
5656
import javax.persistence.TableGenerator;
5757

58-
import net.sf.cglib.proxy.Callback;
59-
import net.sf.cglib.proxy.CallbackFilter;
60-
import net.sf.cglib.proxy.Enhancer;
61-
import net.sf.cglib.proxy.Factory;
62-
import net.sf.cglib.proxy.MethodInterceptor;
63-
import net.sf.cglib.proxy.NoOp;
64-
import net.sf.ehcache.Cache;
65-
import net.sf.ehcache.CacheManager;
66-
import net.sf.ehcache.Element;
67-
6858
import org.apache.log4j.Logger;
6959

7060
import com.cloud.utils.DateUtil;
@@ -79,6 +69,17 @@
7969
import com.cloud.utils.exception.CloudRuntimeException;
8070
import com.cloud.utils.net.Ip;
8171
import com.cloud.utils.net.NetUtils;
72+
import com.google.common.base.Strings;
73+
74+
import net.sf.cglib.proxy.Callback;
75+
import net.sf.cglib.proxy.CallbackFilter;
76+
import net.sf.cglib.proxy.Enhancer;
77+
import net.sf.cglib.proxy.Factory;
78+
import net.sf.cglib.proxy.MethodInterceptor;
79+
import net.sf.cglib.proxy.NoOp;
80+
import net.sf.ehcache.Cache;
81+
import net.sf.ehcache.CacheManager;
82+
import net.sf.ehcache.Element;
8283

8384
/**
8485
* GenericDaoBase is a simple way to implement DAOs. It DOES NOT
@@ -2014,8 +2015,6 @@ public Integer getCount(SearchCriteria<T> sc) {
20142015
}
20152016
}
20162017

2017-
// we have to disable group by in getting count, since count for groupBy clause will be different.
2018-
//List<Object> groupByValues = addGroupBy(str, sc);
20192018
final TransactionLegacy txn = TransactionLegacy.currentTxn();
20202019
final String sql = str.toString();
20212020

@@ -2033,14 +2032,6 @@ public Integer getCount(SearchCriteria<T> sc) {
20332032
i = addJoinAttributes(i, pstmt, joins);
20342033
}
20352034

2036-
/*
2037-
if (groupByValues != null) {
2038-
for (Object value : groupByValues) {
2039-
pstmt.setObject(i++, value);
2040-
}
2041-
}
2042-
*/
2043-
20442035
final ResultSet rs = pstmt.executeQuery();
20452036
while (rs.next()) {
20462037
return rs.getInt(1);
@@ -2056,6 +2047,13 @@ public Integer getCount(SearchCriteria<T> sc) {
20562047
@DB()
20572048
protected StringBuilder createCountSelect(SearchCriteria<?> sc, final boolean whereClause) {
20582049
StringBuilder sql = new StringBuilder(_count);
2050+
if (sc != null) {
2051+
Pair<GroupBy<?, ?, ?>, List<Object>> groupBys = sc.getGroupBy();
2052+
if (groupBys != null) {
2053+
final SqlGenerator generator = new SqlGenerator(_entityBeanType);
2054+
sql = new StringBuilder(generator.buildCountSqlWithGroupBy(groupBys.first()));
2055+
}
2056+
}
20592057

20602058
if (!whereClause) {
20612059
sql.delete(sql.length() - (_discriminatorClause == null ? 6 : 4), sql.length());

framework/db/src/main/java/com/cloud/utils/db/GroupBy.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public J having(final Func func, final Attribute obj, final Op op) {
6363

6464
public void toSql(final StringBuilder builder) {
6565
builder.append(" GROUP BY ");
66+
appendGroupByAttributes(builder);
67+
if (_having != null) {
68+
_having.toSql(builder);
69+
}
70+
}
71+
72+
public void appendGroupByAttributes(final StringBuilder builder) {
6673
for (final Pair<Func, Attribute> groupBy : _groupBys) {
6774
if (groupBy.first() != null) {
6875
String func = groupBy.first().toString();
@@ -71,14 +78,9 @@ public void toSql(final StringBuilder builder) {
7178
} else {
7279
builder.append(groupBy.second().table + "." + groupBy.second().columnName);
7380
}
74-
7581
builder.append(", ");
7682
}
77-
7883
builder.delete(builder.length() - 2, builder.length());
79-
if (_having != null) {
80-
_having.toSql(builder);
81-
}
8284
}
8385

8486
protected class Having {

framework/db/src/main/java/com/cloud/utils/db/SqlGenerator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,14 @@ public String buildCountSql() {
675675
return sql.append("SELECT COUNT(*) FROM ").append(buildTableReferences()).append(" WHERE ").append(buildDiscriminatorClause().first()).toString();
676676
}
677677

678+
public String buildCountSqlWithGroupBy(final GroupBy groupBy) {
679+
StringBuilder sql = new StringBuilder();
680+
sql.append("SELECT COUNT(DISTINCT ");
681+
groupBy.appendGroupByAttributes(sql);
682+
sql.append(") FROM ").append(buildTableReferences()).append(" WHERE ").append(buildDiscriminatorClause().first());
683+
return sql.toString();
684+
}
685+
678686
public String buildDistinctIdSql() {
679687
StringBuilder sql = new StringBuilder();
680688

0 commit comments

Comments
 (0)