Anonymous | Login
News | My View | View Issues | Roadmap | Summary

View Issue DetailsJump to Notes ] Issue History ] Print ]
TypeCategorySeverityReproducibilityDate SubmittedLast Update
backport[Openbravo ERP] A. Platformminorhave not tried2016-08-12 17:242016-08-29 15:12
ReportershuehnerView Statuspublic 
Assigned Toaferraz 
PrioritynormalResolutionfixedFixed in Version3.0PR16Q2.3
StatusclosedFix in branchFixed in SCM revision2cc93f8dd77a
ProjectionnoneETAnoneTarget Version3.0PR16Q2.3
OSAnyDatabaseAnyJava version
OS VersionDatabase versionAnt version
Product VersionSCM revision 
Review Assigned Tocaristu
Web browser
Regression level
Regression date
Regression introduced in release
Regression introduced by commit
Triggers an Emergency PackNo

0033810: Double query in PricelistVersionFilterExpression (product selector)

DescriptionThe PriceListVersionFilterExpression has following code which does 2 db queries

    OBCriteria<PriceListVersion> plVersionCrit = OBDal.getInstance().createCriteria(
    plVersionCrit.add(Restrictions.eq(PriceListVersion.PROPERTY_PRICELIST, priceList));
    plVersionCrit.add(Restrictions.le(PriceListVersion.PROPERTY_VALIDFROMDATE, date));
    if (plVersionCrit.count() > 0) {
      plVersionCrit.addOrderBy(PriceListVersion.PROPERTY_VALIDFROMDATE, false);
      return plVersionCrit.list().get(0);

Filter m_pricelist_version by m_pricelist_id and validfrom<='some value'

First query does a count of matching rows.
Then order by validfrom desc is added and a 2nd query is done to retrieve the 'newest' row.

The count query is not really an optimization as it forces same effort on db.
As there is a m_pricelist_id + name unique constraint those filter criteria combination is indexed anyway.

Additionally that query should get a "limit 1" constraint as it only uses 1 row of result anyway.

Without that and many pricelistversion matches the filter criteria lots of rows are loaded into memory without good reason.
Steps To Reproduce-
TagsNo tags attached.
Attached Files

- Relationships Relation Graph ] Dependency Graph ]
blocks defect 0033705 closedshuehner Double query in PricelistVersionFilterExpression (product selector) 

-  Notes
hgbot (developer)
2016-08-29 14:20

Repository: erp/backports/3.0PR16Q2.3
Changeset: 2cc93f8dd77a19d5de50d47f71ef46e941e49655
Author: Alvaro Ferraz <alvaro.ferraz <at>>
Date: Thu Aug 25 15:14:16 2016 +0200
URL: [^]

Fixed issue 33810. Avoid double query with .count() + .list(). Add limit 1 to query

Query did .count() + then retrieve 1 record after adding extra order by.

This change removes the count as it only adds extra overhead and directly
does the real .list() query.
As the code only uses single row of result add extra limit 1 to reduce
number of result rows loaded into memory if many match the filter.
Simply code to use .uniqueResult() instead of .list().get(0)

M src/org/openbravo/erpCommon/info/
caristu (developer)
2016-08-29 15:12

Code reviewed

- Issue History
Date Modified Username Field Change
2016-08-25 14:25 aferraz Type defect => backport
2016-08-25 14:25 aferraz Target Version => 3.0PR16Q2.3
2016-08-29 13:09 aferraz Assigned To shuehner => aferraz
2016-08-29 14:20 hgbot Checkin
2016-08-29 14:20 hgbot Note Added: 0089497
2016-08-29 14:20 hgbot Status scheduled => resolved
2016-08-29 14:20 hgbot Resolution open => fixed
2016-08-29 14:20 hgbot Fixed in SCM revision [^] => [^]
2016-08-29 15:12 caristu Note Added: 0089505
2016-08-29 15:12 caristu Status resolved => closed
2016-08-29 15:12 caristu Fixed in Version => 3.0PR16Q2.3

Copyright © 2000 - 2009 MantisBT Group
Powered by Mantis Bugtracker