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