Performance : GenericDao does not always use complete PreparedStatement
-----------------------------------------------------------------------

                 Key: OFBIZ-4286
                 URL: https://issues.apache.org/jira/browse/OFBIZ-4286
             Project: OFBiz
          Issue Type: Improvement
          Components: framework
    Affects Versions: SVN trunk
            Reporter: Philippe Mouawad


Hello,
While profiling SQL requests going to DB I noticed a strange behaviour where 
Ofbiz builds SQL Statement partly with ? and partly with inline values which 
results in lower Database performances.

Example:
JobManager#poll  List<GenericValue> jobEnt = delegator.findByAnd("JobSandbox", 
updateFields, order);
results in the following SQL query:
UPDATE ECFR.JOB_SANDBOX SET RUN_BY_INSTANCE_ID = ?, STATUS_ID = ? WHERE 
((RUN_TIME <= '2011-05-17 17:02:33.163' AND START_DATE_TIME IS NULL AND 
CANCEL_DATE_TIME IS NULL AND RUN_BY_INSTANCE_ID IS NULL) AND (POOL_ID IS NULL 
OR POOL_ID = 'poolfrt025'))

As you can see, RUN_TIME condition is inlined.
Analysing this behaviour, I think issue comes from EntityConditionBase#addValue:
    protected void addValue(StringBuilder buffer, ModelField field, Object 
value, List<EntityConditionParam> params) {
        SqlJdbcUtil.addValue(buffer, params == null ? null : field, value, 
params);
    }

and particularly:
params == null ? null : field

this ends up here in SqlJdbcUtil#addValueSingle and you can see that as field 
is null :
    public static void addValueSingle(StringBuilder buffer, ModelField field, 
Object value, List<EntityConditionParam> params) {
        if (field != null) {
            buffer.append('?');
        } else {
            buffer.append('\'').append(value).append('\'');
        }
        if (field != null && params != null) params.add(new 
EntityConditionParam(field, value));
    }


I there some reason for this code ?
Is there another way to use delegator that makes it work better ?

Thank you
Regards
Philippe
http://www.ubik-ingenierie.com

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to