Issue Details (XML | Word | Printable)

Key: OPENJPA-22
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: David Wisneski
Reporter: David Wisneski
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
OpenJPA

locate & substring queries fail both db2 & derby, cannot use parameter markers in expression ?-?

Created: 16/Aug/06 11:32 PM   Updated: 10/Mar/07 12:36 AM
Return to search
Component/s: query
Affects Version/s: None
Fix Version/s: 0.9.7

Time Tracking:
Not Specified

Resolution Date: 10/Mar/07 12:36 AM


 Description  « Hide
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)





 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
No work has yet been logged on this issue.