You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Brandon Goodin <br...@gmail.com> on 2005/01/01 20:41:10 UTC

Re: nested javabeans properties

have you looked into the isPresent, isEqual, isNotEqual,etc.. tags
yet? Otherwise, you will need to be more specific. It is difficult to
help out with ambiquous scenarios in dynasql.

Brandon


On Fri, 31 Dec 2004 12:35:14 +0100, Michał Małecki
<Mi...@man.poznan.pl> wrote:
> Hello Clinton,
> 
> I have class Condition {
>         int timestamp;
>         Vector attributes; //Vector of key-value class
>         int level;
>         /* constructors, getters, setters, etc*/
> }
> I would like to pass List of condition objects, and to generate
> following query
> select .....
> from log_events
> where (
>         --first Condition object
>         conditions for timestamp and level
>         multiple subqueries for each element of attributes Vector
> 
> ) OR (
>         --second Condition object
>         conditions for timestamp and level
>         multiple subqueries for each element of attributes Vector
> ).....
> So I have to use first iterate element for the big condition (connected
> using OR) and nested iterate for all subqueries built using "attribute"
> Vector; How can this be done??
> 
> Michał
> 
> Clinton Begin wrote:
> > Hi Michal,
> >
> >
> >>is it planned to add support for nested javabeans properties, also
> >>collections?
> >
> >
> > iBATIS supports both of these already.  I don't understand enough
> > about what you're asking to know how to help you.  Can you provide
> > some code examples?
> >
> > Clinton
> >
> 
> 
>

Re: nested javabeans properties

Posted by Michał Małecki <mi...@poczta.onet.pl>.
I would never connect any ugliness with iBATIS. This is Java hard-coded 
sql, which I see ugly. I have yet one question (please don't be nervous 
;)) - do you think that nested loops (that would solve my problem) 
should be added to iBATIS sqlmap. If yes I am eager to look at this 
deeper, and try to write it down

Best Regards,
Michał Małecki

Clinton Begin wrote:
> Personally, I don't think that ugliness has  anything to do with
> iBATIS.  It has to do with the fact that you're trying to merge two
> dynamic SQL generation paradigms.  I'd suggest that if iBATIS Dynamic
> SQL isn't capable of _completely_ expressing your SQL and it's
> conditional parts, then just use Java entirely for that part.  Don't
> try to generate half of it in Java and the other half in iBATIS.
> 
> Cheers,
> Clinton
> 
> 
> On Tue, 4 Jan 2005 10:17:51 +0100, Michał Małecki
> <mi...@poczta.onet.pl> wrote:
> 
>>Hello Brandon,
>>here is my detailed query:
>><select id="selectEvents" parameterClass="ListOfConditions"
>>resultClass="LoggingBean"><![CDATA[
>>select le_level as level, le_location as location, le_logger as logger,
>>le_message as message,
>>le_ndc as ndc, le_thread as thread, le_throwable as throwable, le_timestamp
>>as timeStampAsDate
>>from log_events
>>where
>>]]>
>><iterate conjunction="OR" property="list" open="(" close=")">
>><![CDATA[
>>(#list[].level# = -1 OR #list[].level# $list[].levelOperator$ le_level)
>>AND (#list[].logger# = '' OR le_logger LIKE #list[].logger#)
>>AND (#list[].timestampSeconds# = -1 OR #list[].timestampSeconds#
>>$list[].timestampOperator$ (extract(epoch from le_timestamp)::integer))
>>$list[].attributesSubQuery$
>>]]> </iterate>
>>as you see, at the end there is $list[].attributesSubQuery$, which is
>>subqueries generated in Java, like this:
>>for (Iterator it = attributes.iterator(); it.hasNext();) {
>>            KeyValue kv = (KeyValue) it.next();
>>            sb
>>                    .append(" AND EXISTS (select 1 from
>>log_event_attributes")
>>                    .append(" where lea_event = le_id")
>>                    .append(" and lea_value LIKE '")
>>                    .append(kv.getValue())
>>                    .append(
>>                            "' and lea_key = (select lk_id from log_keys
>>where lk_name='")
>>                    .append(kv.getKey()).append("')) ");
>>        }
>>
>>So, is this possible to express everthing in ibatis xml, without this dirty
>>$list[].attributesSubQuery$?
>>
>>Michał Małecki
>>
>>----- Original Message -----
>>From: "Brandon Goodin" <br...@gmail.com>
>>To: <ib...@incubator.apache.org>
>>Sent: Saturday, January 01, 2005 8:41 PM
>>Subject: Re: nested javabeans properties
>>
>>have you looked into the isPresent, isEqual, isNotEqual,etc.. tags
>>yet? Otherwise, you will need to be more specific. It is difficult to
>>help out with ambiquous scenarios in dynasql.
>>
>>Brandon
>>
>>On Fri, 31 Dec 2004 12:35:14 +0100, Michał Małecki
>><Mi...@man.poznan.pl> wrote:
>>
>>>Hello Clinton,
>>>
>>>I have class Condition {
>>>        int timestamp;
>>>        Vector attributes; //Vector of key-value class
>>>        int level;
>>>        /* constructors, getters, setters, etc*/
>>>}
>>>I would like to pass List of condition objects, and to generate
>>>following query
>>>select .....
>>>from log_events
>>>where (
>>>        --first Condition object
>>>        conditions for timestamp and level
>>>        multiple subqueries for each element of attributes Vector
>>>
>>>) OR (
>>>        --second Condition object
>>>        conditions for timestamp and level
>>>        multiple subqueries for each element of attributes Vector
>>>).....
>>>So I have to use first iterate element for the big condition (connected
>>>using OR) and nested iterate for all subqueries built using "attribute"
>>>Vector; How can this be done??
>>>
>>>Michał
>>>
>>>Clinton Begin wrote:
>>>
>>>>Hi Michal,
>>>>
>>>>
>>>>
>>>>>is it planned to add support for nested javabeans properties, also
>>>>>collections?
>>>>
>>>>
>>>>iBATIS supports both of these already.  I don't understand enough
>>>>about what you're asking to know how to help you.  Can you provide
>>>>some code examples?
>>>>
>>>>Clinton
>>>>
>>>
>>>
>>>
>>
> 
> 



Re: nested javabeans properties

Posted by Clinton Begin <cl...@gmail.com>.
Personally, I don't think that ugliness has  anything to do with
iBATIS.  It has to do with the fact that you're trying to merge two
dynamic SQL generation paradigms.  I'd suggest that if iBATIS Dynamic
SQL isn't capable of _completely_ expressing your SQL and it's
conditional parts, then just use Java entirely for that part.  Don't
try to generate half of it in Java and the other half in iBATIS.

Cheers,
Clinton


On Tue, 4 Jan 2005 10:17:51 +0100, Michał Małecki
<mi...@poczta.onet.pl> wrote:
> Hello Brandon,
> here is my detailed query:
> <select id="selectEvents" parameterClass="ListOfConditions"
> resultClass="LoggingBean"><![CDATA[
> select le_level as level, le_location as location, le_logger as logger,
> le_message as message,
> le_ndc as ndc, le_thread as thread, le_throwable as throwable, le_timestamp
> as timeStampAsDate
> from log_events
> where
> ]]>
> <iterate conjunction="OR" property="list" open="(" close=")">
> <![CDATA[
> (#list[].level# = -1 OR #list[].level# $list[].levelOperator$ le_level)
> AND (#list[].logger# = '' OR le_logger LIKE #list[].logger#)
> AND (#list[].timestampSeconds# = -1 OR #list[].timestampSeconds#
> $list[].timestampOperator$ (extract(epoch from le_timestamp)::integer))
> $list[].attributesSubQuery$
> ]]> </iterate>
> as you see, at the end there is $list[].attributesSubQuery$, which is
> subqueries generated in Java, like this:
> for (Iterator it = attributes.iterator(); it.hasNext();) {
>             KeyValue kv = (KeyValue) it.next();
>             sb
>                     .append(" AND EXISTS (select 1 from
> log_event_attributes")
>                     .append(" where lea_event = le_id")
>                     .append(" and lea_value LIKE '")
>                     .append(kv.getValue())
>                     .append(
>                             "' and lea_key = (select lk_id from log_keys
> where lk_name='")
>                     .append(kv.getKey()).append("')) ");
>         }
> 
> So, is this possible to express everthing in ibatis xml, without this dirty
> $list[].attributesSubQuery$?
> 
> Michał Małecki
> 
> ----- Original Message -----
> From: "Brandon Goodin" <br...@gmail.com>
> To: <ib...@incubator.apache.org>
> Sent: Saturday, January 01, 2005 8:41 PM
> Subject: Re: nested javabeans properties
> 
> have you looked into the isPresent, isEqual, isNotEqual,etc.. tags
> yet? Otherwise, you will need to be more specific. It is difficult to
> help out with ambiquous scenarios in dynasql.
> 
> Brandon
> 
> On Fri, 31 Dec 2004 12:35:14 +0100, Michał Małecki
> <Mi...@man.poznan.pl> wrote:
> > Hello Clinton,
> >
> > I have class Condition {
> >         int timestamp;
> >         Vector attributes; //Vector of key-value class
> >         int level;
> >         /* constructors, getters, setters, etc*/
> > }
> > I would like to pass List of condition objects, and to generate
> > following query
> > select .....
> > from log_events
> > where (
> >         --first Condition object
> >         conditions for timestamp and level
> >         multiple subqueries for each element of attributes Vector
> >
> > ) OR (
> >         --second Condition object
> >         conditions for timestamp and level
> >         multiple subqueries for each element of attributes Vector
> > ).....
> > So I have to use first iterate element for the big condition (connected
> > using OR) and nested iterate for all subqueries built using "attribute"
> > Vector; How can this be done??
> >
> > Michał
> >
> > Clinton Begin wrote:
> > > Hi Michal,
> > >
> > >
> > >>is it planned to add support for nested javabeans properties, also
> > >>collections?
> > >
> > >
> > > iBATIS supports both of these already.  I don't understand enough
> > > about what you're asking to know how to help you.  Can you provide
> > > some code examples?
> > >
> > > Clinton
> > >
> >
> >
> >
> 
>

Re: nested javabeans properties

Posted by Michał Małecki <mi...@poczta.onet.pl>.
Hello Brandon,
here is my detailed query:
<select id="selectEvents" parameterClass="ListOfConditions"
resultClass="LoggingBean"><![CDATA[
select le_level as level, le_location as location, le_logger as logger,
le_message as message,
le_ndc as ndc, le_thread as thread, le_throwable as throwable, le_timestamp
as timeStampAsDate
from log_events
where
]]>
<iterate conjunction="OR" property="list" open="(" close=")">
<![CDATA[
(#list[].level# = -1 OR #list[].level# $list[].levelOperator$ le_level)
AND (#list[].logger# = '' OR le_logger LIKE #list[].logger#)
AND (#list[].timestampSeconds# = -1 OR #list[].timestampSeconds#
$list[].timestampOperator$ (extract(epoch from le_timestamp)::integer))
$list[].attributesSubQuery$
]]> </iterate>
as you see, at the end there is $list[].attributesSubQuery$, which is
subqueries generated in Java, like this:
for (Iterator it = attributes.iterator(); it.hasNext();) {
            KeyValue kv = (KeyValue) it.next();
            sb
                    .append(" AND EXISTS (select 1 from
log_event_attributes")
                    .append(" where lea_event = le_id")
                    .append(" and lea_value LIKE '")
                    .append(kv.getValue())
                    .append(
                            "' and lea_key = (select lk_id from log_keys
where lk_name='")
                    .append(kv.getKey()).append("')) ");
        }

So, is this possible to express everthing in ibatis xml, without this dirty
$list[].attributesSubQuery$?

Michał Małecki

----- Original Message ----- 
From: "Brandon Goodin" <br...@gmail.com>
To: <ib...@incubator.apache.org>
Sent: Saturday, January 01, 2005 8:41 PM
Subject: Re: nested javabeans properties


have you looked into the isPresent, isEqual, isNotEqual,etc.. tags
yet? Otherwise, you will need to be more specific. It is difficult to
help out with ambiquous scenarios in dynasql.

Brandon


On Fri, 31 Dec 2004 12:35:14 +0100, Michał Małecki
<Mi...@man.poznan.pl> wrote:
> Hello Clinton,
>
> I have class Condition {
>         int timestamp;
>         Vector attributes; //Vector of key-value class
>         int level;
>         /* constructors, getters, setters, etc*/
> }
> I would like to pass List of condition objects, and to generate
> following query
> select .....
> from log_events
> where (
>         --first Condition object
>         conditions for timestamp and level
>         multiple subqueries for each element of attributes Vector
>
> ) OR (
>         --second Condition object
>         conditions for timestamp and level
>         multiple subqueries for each element of attributes Vector
> ).....
> So I have to use first iterate element for the big condition (connected
> using OR) and nested iterate for all subqueries built using "attribute"
> Vector; How can this be done??
>
> Michał
>
> Clinton Begin wrote:
> > Hi Michal,
> >
> >
> >>is it planned to add support for nested javabeans properties, also
> >>collections?
> >
> >
> > iBATIS supports both of these already.  I don't understand enough
> > about what you're asking to know how to help you.  Can you provide
> > some code examples?
> >
> > Clinton
> >
>
>
>