You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "David Wisneski (JIRA)" <ji...@apache.org> on 2007/03/10 01:38:09 UTC

[jira] Resolved: (OPENJPA-22) locate & substring queries fail both db2 & derby, cannot use parameter markers in expression ?-?

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

David Wisneski resolved OPENJPA-22.
-----------------------------------

    Resolution: Fixed
      Assignee: David Wisneski

fixed in r516624

> locate & substring queries fail both db2 & derby, cannot use parameter markers in expression ?-?
> ------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-22
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-22
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: query
>            Reporter: David Wisneski
>         Assigned To: David Wisneski
>             Fix For: 0.9.7
>
>
> EJB Q::   SELECT d.name FROM DeptBean d WHERE SUBSTRING(d.name,1,10) = 'Dept' 
>                                                                                                                    
> DB2 SQL error: SQLCODE: -417, SQLSTATE: 42609, SQLERRMC: null {prepstmnt 1662018320 SELECT t0.name FROM DeptBean t0
> WHERE (SUBSTR(CAST((t0.name) AS VARCHAR(1000)), CAST(((? - ?)) AS INTEGER) + 1, CAST(((? + (? - ?))) AS INTEGER) - CAST(((?
> - ?)) AS INTEGER)) = ?) [params=(long) 1, (int) 1, (long) 10, (long) 1, (int) 1, (long) 1, (int) 1, (String) Dept]}
> [code=-417, state=42609]
> EJB QL SELECT e.name FROM EmpBean e WHERE LOCATE('10',e.name,5) > 0 
>             DB2 SQL error: SQLCODE: -417, SQLSTATE: 42609, SQLERRMC: null {prepstmnt 1217808534 SELECT t0.name FROM EmpBean t0 WHERE
> (((LOCATE(CAST((?) AS VARCHAR(1000)), CAST((t0.name) AS VARCHAR(1000)), CAST(((? - ?)) AS INTEGER) + 1) - 1) + ?) >
> ?) [params=(String) 10, (long) 5, (int) 1, (int) 1, (long) 0]} [code=-417, state=42609]
>  TEST411; 1 tuple
> I am not sure why OpenJPA generates the sql expression ?-?.  The proper SQL should be 
> SELECT t0.name FROM DeptBean t0  WHERE  substr (to.name, CAST ((?) as INTEGER),  CAST ((?) as INTEGER)   with parm values ( Integer 1,  Integer 10)
> Although it helps query reuse to replace literals with parm markers and then pass the literal values as parm values,  this is not always 
> best in a system like DB2 which uses distribution statistics and cost based optimization to compute the sql access path.  The better sql would 
> simply be 
> SELECT t0.name FROM DeptBean t0  WHERE  substr (to.name,1, 10)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.