db-ojb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vadim Gritsenko (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OJB-16) Support stored procedures in select by pk statement
Date Fri, 08 Apr 2005 21:22:17 GMT
     [ http://issues.apache.org/jira/browse/OJB-16?page=comments#action_62474 ]
     
Vadim Gritsenko commented on OJB-16:
------------------------------------

> on the OJB level the find-by-pk and find-by-fk (or rather,
> find-by-some-fields) differ only in that in the first case
> OJB can determine which fields to use,

True. All primary key values has to be fed into the stored procedure. That's how patch currently
implements it. Hence, no need for additional configuration (as for other procedure types).

> and in which order
> whereas in the second case, the user has to specify this.

As I do not want to go into providing muliple procedures for each reference of collection,
I decided to go with single retrieve-by-fk procedure, which can handle any relation.

In order to do this, this procedure must take all fields as an argument, so that you can retrieve
references/collections regardless of the field used for the foreign key.

As a result, this procedure is less efficient (to some degree) then simple select by pk. Hence,
I decided to go with two different procedures. I'd like to hear your suggestions for more
efficient procedure implementation(s), if you have any.

But ATM, I'd like to go with 2 procedures approach - as it allows for simplier and more efficient
select-by-pk procedure.


> Therefore, they are alike and you can use the same format as e.g.
> delete-procedure uses:
> 
> <!ELEMENT delete-procedure
>    (documentation?, (runtime-argument | constant-argument)*, attribute*)>
> 
> If no runtime/constant arguments were given, then OJB uses the pk
> fields. This mapping is also already defined for the XDoclet tags
> so nothing new there. Btw, it also allows to use constant values if
> one so desires.

I still do not understand why would anybody need constant-argument. It is a constant, right?
So just write a constant into stored procedure itself if desired so! :-) And runtime-argument
actually does not provide a way to refer to the runtime variable - all you can do is refer
to the field. So its functionality is limited to the renaming of the fields (which is: no
functionality).

More interesting will be to support JavaBean properties, so that you can pass to the stored
procedure some (really) runtime intformation. Just to give an example:

/**
 * @ojb.runtime-argument name="user"
 *                       property="currentUser"
 */
public class Bean {
    public String getCurrentUser() {
        return context.getCallerPrincipal().getName();
    }
}

Now, that could be more valuable then constant-argument.


> As for what is required for the XDoclet tags, the ojb.xml file
> is only for documentation purposes.

I'm sorry, my first patch was not properly created, it did not include patch to *.xdt file
- attached now as separate patch.

Thanks,
Vadim

> Support stored procedures in select by pk statement
> ---------------------------------------------------
>
>          Key: OJB-16
>          URL: http://issues.apache.org/jira/browse/OJB-16
>      Project: OJB
>         Type: New Feature
>   Components: PB-API
>     Versions: 1.0.x CVS
>     Reporter: Vadim Gritsenko
>  Attachments: SelectByPKProcedureDescriptor.java, db-ojb-selectbypk.diff, xdoclet.diff
>
> This patch adds support for retrieving objects by primary keys through call to stored
procedure instead of using select statement.
> To activate the feature, add xdoclet tag to the class:
> /**
>  * @ojb.class table="MYBEAN"
>  * @ojb.selectbypk-procedure name="FIND_MYBEAN_BYID"
>  */
> public class MyBean {
>     /**
>      * @ojb.field primarykey="true"
>      */
>     Integer id;
> }
> And then, create stored procedure:
> CREATE OR REPLACE PACKAGE TYPES AS
>   TYPE CURSORTYPE IS REF CURSOR;
> END TYPES;
> /
> CREATE OR REPLACE FUNCTION FIND_MYBEAN_BYID (ANID IN MYBEAN.ID%TYPE)
> RETURN TYPES.CURSORTYPE AS
> RESULT TYPES.CURSORTYPE;
> BEGIN
>   OPEN RESULT FOR SELECT * FROM MYBEAN WHERE ID = ANID;
>   RETURN RESULT;
> END;
> /
> Patch is made against OJB_1_0_RELEASE branch.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


Mime
View raw message