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