[ http://issues.apache.org/jira/browse/IBATIS-95?page=history ]
     
Brandon Goodin resolved IBATIS-95:
----------------------------------

      Assign To: Brandon Goodin
     Resolution: Fixed
    Fix Version: 2.1.0

Added new removeFirstPrepend functionality. I made sure that all is completely 
backwards compatible. 
I also added open and close attributes to all dynamic tags for dealing with 
nested bracketing. This is to avoid users from putting certain characters like 
"(" and ")" into the body of the dynamic tags and receiving bad sql because the 
tag sees content in it's body. 
The <dynamic> tag does NOT have the option to removeFirstPrepend. It will 
automatically remove the first prepend if it contains a prepend attribute. If 
it does not contain a prepend attribute then the first prepend is used. This 
was for backwards compatibility. 
All other dynamic tags have the removeFirstPrepend attribute. The default 
behavior is to NOT removeFirstPrepend. You must explicitly set 
removeFirstPrepend="true" for it to remove the first prepend.

--- on a technical level ---

- I added a LinkedList to the SqlContext. 
- I also added an inner class named RemoveFirstPrependMarker to the SqlContext. 
- - The RemoveFirstPrependMarker object is used to track the state of nested 
prepend removal in the LinkedList.
- I added a test method in the DynamicTest class called 
testComplexDynamicQuery. 
- I also added a mapped statement to the query called 
complexDynamicQueryByExample which makes heavy use of the new 
removeFirstPrepend, open and close attributes.

> Removal of extra OR/AND with parantheses ( ) with dynamic prepend!
> ------------------------------------------------------------------
>
>          Key: IBATIS-95
>          URL: http://issues.apache.org/jira/browse/IBATIS-95
>      Project: iBatis for Java
>         Type: Improvement
>   Components: SQL Maps
>  Environment: Not a issue.
>     Reporter: Erlend Bj�rge
>     Assignee: Brandon Goodin
>      Fix For: 2.1.0

>
> Hi there!
> I have run into the same kind of problem as Brandon Goodin replied on:
> http://www.mail-archive.com/[email protected]/msg01403.html
> The problem is not just related to complex queries, but dealing with Dynamic 
> prepend
> and parantheses, you will end up with a extra OR/AND you don't need in you 
> query. 
> Simple as that.
> If you would have made the where clause by yourself, the simple solution is
> after you are finished with your  (OR .... OR ... OR) clause, just remove the 
> first OR/AND after ( and then your clause is correct. This is a simple 
> solution,
> shouldn't it be possible with be possible with SQLMap tags too ??
> What about a new tag like ? (Hope this come out with correct linefeed :-)
> where clause bla bla ....
> <isParameterPresent>
>     AND (
>     <removeFirstPrependValue> 
>         <isNotNull prepend="OR".....> 
>         <isNotNull prepend="OR" ...> 
>         <isNotNull prepend="OR" ...> 
>     </removeFirstPrependValue>
>     )
> <isParameterPresent>
> Or similar function in the other tags like this as an extra parameter:
> where clause bla bla ....
> <isParameterPresent>
>     AND (
>   
>     <isNotNull prepend="OR" property="id"   removeFirstPrepend="true"> 
>     <isNotNull prepend="OR" property="name" removeFirstPrepend="true">
>     ) 
> <isParameterPresent>
> ??? Isn't that a nice new feature that will remove this kind of problem ?
> ---
> Thanks!
> Best regards,
> Erlend Bj�rge

-- 
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

Reply via email to