Author: jonesde
Date: Sun Jan 10 09:16:47 2010
New Revision: 897605
URL: http://svn.apache.org/viewvc?rev=897605&view=rev
Log:
Small improvement to the EntityListIterator count total results code when
distinct is used and partial fields are selected; note that this assumes the
most unique field is first in the list since doing distinct on multiple fields
in this way does not seem to work
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java?rev=897605&r1=897604&r2=897605&view=diff
==============================================================================
---
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
(original)
+++
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/datasource/GenericDAO.java
Sun Jan 10 09:16:47 2010
@@ -969,6 +969,10 @@
}
public long selectCountByCondition(ModelEntity modelEntity,
EntityCondition whereEntityCondition, EntityCondition havingEntityCondition,
EntityFindOptions findOptions) throws GenericEntityException {
+ return selectCountByCondition(modelEntity, whereEntityCondition,
havingEntityCondition, null, findOptions);
+ }
+
+ public long selectCountByCondition(ModelEntity modelEntity,
EntityCondition whereEntityCondition, EntityCondition havingEntityCondition,
List<ModelField> selectFields, EntityFindOptions findOptions) throws
GenericEntityException {
if (modelEntity == null) {
return 0;
}
@@ -1007,7 +1011,15 @@
}
if (findOptions.getDistinct()) {
- sqlBuffer.append("DISTINCT COUNT(*) ");
+ if (selectFields != null && selectFields.size() > 0) {
+ sqlBuffer.append("COUNT(DISTINCT ");
+ // this only seems to support a single column, which is not
desirable but seems a lot better than no columns or in certain cases all columns
+ sqlBuffer.append(selectFields.get(0).getColName());
+ // sqlBuffer.append(modelEntity.colNameString(selectFields, ",
", "", datasourceInfo.aliasViews));
+ sqlBuffer.append(")");
+ } else {
+ sqlBuffer.append("COUNT(DISTINCT *) ");
+ }
} else {
// NOTE DEJ20080701 Changed from COUNT(*) to COUNT(1) to improve
performance, and should get the same results at least when there is no DISTINCT
sqlBuffer.append("COUNT(1) ");
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java?rev=897605&r1=897604&r2=897605&view=diff
==============================================================================
---
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java
(original)
+++
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java
Sun Jan 10 09:16:47 2010
@@ -512,7 +512,7 @@
efo = new EntityFindOptions();
efo.setDistinct(distinctQuery);
}
- resultSize = (int)
genericDAO.selectCountByCondition(modelEntity, whereCondition, havingCondition,
efo);
+ resultSize = (int)
genericDAO.selectCountByCondition(modelEntity, whereCondition, havingCondition,
selectFields, efo);
}
return resultSize;
} else if (this.last()) {