openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marc Prud'hommeaux (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (OPENJPA-196) Ease the restrictions on forcing a matche between the number of declared and assigned positional parameters
Date Mon, 02 Apr 2007 22:02:32 GMT

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

Marc Prud'hommeaux resolved OPENJPA-196.
----------------------------------------

       Resolution: Fixed
    Fix Version/s: 0.9.7

> Ease the restrictions on forcing a matche between the number of declared and assigned
positional parameters
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-196
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-196
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: query
>    Affects Versions: 0.9.0, 0.9.6
>            Reporter: Marc Prud'hommeaux
>         Assigned To: Marc Prud'hommeaux
>            Priority: Minor
>             Fix For: 0.9.7
>
>         Attachments: OPENJPA-196.patch
>
>
> OpenJPA currently enforces that each positional parameter that is assigned in a query
must actually be declared in that query, although the spec doesn't actually seem to mention
that restriction.
> As respoted by Dain Sundstorm on the OpenJPA mailing list:
> Actually, I think there is a bigger problem...  Say I have a query like this:
>     SELECT x FROM foo AS x WHERE foo.name = ?2
> The org.apache.openjpa.kernel.QueryImpl.assertParameters(...) code assumes that if I
have 1 parameter it is numbered ?1, but in EJB 2.1 this was not a requirement and there are
certification tests that verify you are allowed to have "unused" parameters (e.g, in my example
about ?1 and ?N where N>2 are all not used).  I couldn't find any text in the specification
that says that all all positional parameters must be used in the query, but I did find text
that say the EJB-QL 3.0 language is an extension of the EJB-QL 2.1 language:
> "The Java Persistence query language is an extension of the Enterprise Java Beans query
language, EJB QL, definedin[5]."
> So I think we must remove the "extra-params" check, but I would be happy with a "don't
check for extra-params flag".
> -dain
> On Mar 31, 2007, at 8:56 AM, Dain Sundstrom wrote:
> I'm working on a CMP 2 implementation that delegates to OpenJPA for persistence.  I'm
running into a problem where I get the following exception:
> org.apache.openjpa.persistence.ArgumentException : More parameters were passed to execute()
than were declared: 4 parameters were specified for query execution, but only 2 parameters
were declared in the query.
> In CMP you declare finder and select methods that have parameters which are passed into
the query engine.  You can have as many parameters as you like but are not required to use
them all, but it appears that OpenJPA is enforcing a restriction where if the EJB-QL text
only lists say 2 parameters and I set 4 I get the above exception.  In order of perference:
> Is this spec required? If not, can we remove the check?
> Is there a way to disable the check?  If so, how?
> Is there a way to determine the number of paramters a query takes?  If so, I can change
my code.
> Is there a way to get the ejbql text from a Query object? If so, I'll write a quick parser
to determine number of queries myself.
> BTW, I'm currently using 0.9.6.
> Thanks,
> -dain

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


Mime
View raw message