[ 
https://issues.apache.org/jira/browse/OFBIZ-4286?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Philippe Mouawad resolved OFBIZ-4286.
-------------------------------------

    Resolution: Duplicate

Duplicate OFBIZ-4285

> 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