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

Milosz Tylenda updated OPENJPA-487:
-----------------------------------

    Attachment: handle_params_in_group_by.patch

I noticed that parameters in GROUP BY are handled in a half-baked fashion -
parameter markers are correctly inserted into SQL but are not filled with
values. A patch is attached but seems unnecessary since most databases will
reject parameters in GROUP BY anyway. I found only MySQL accepting such a
query (TestJDBCGrouping.testSubstringInGroupBy), probably because MySQL
only emulates prepared statements by default:

SELECT SUBSTRING(t0.stringField, ?, ?), COUNT(t0.id) FROM AllFieldTypes t0 
GROUP BY SUBSTRING(t0.stringField, ?, ?)

Other databases require parameters be inlined into SQL:

SELECT SUBSTRING(t0.stringField, 1, 1), COUNT(t0.id) FROM AllFieldTypes t0 
GROUP BY SUBSTRING(t0.stringField, 1, 1)

That's why DBDictionary.substring still uses inlining where possible.



> Generated SUBSTRING SQL is ugly and inefficient
> -----------------------------------------------
>
>                 Key: OPENJPA-487
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-487
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 0.9.0, 0.9.6, 0.9.7, 1.0.0, 1.0.1, 1.0.2, 1.1.0
>            Reporter: Patrick Linskey
>            Assignee: Milosz Tylenda
>            Priority: Minor
>             Fix For: 2.2.0
>
>         Attachments: handle_params_in_group_by.patch
>
>
> When performing a JPQL query with a SUBSTRING clause, OpenJPA converts from 
> one-based index + length parameters to zero-based index + end index for 
> internal handling, and then re-converts back to one-based + length when 
> generating SQL. This conversion is entirely performed in query values, so the 
> generated SQL has a lot of math in it. This extra math is never necessary.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to