ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marco Speranza <marco.speranz...@gmail.com>
Subject Re: Mapper parsing problem
Date Fri, 05 Feb 2010 15:45:58 GMT
Hi Clinton,

I totally agree with you when you speak about format  but let me
explain better: there are customers QA that impose strict coding rules
- XML files included - and one of them checks if a codeline is
contained in 'n' chars.
Even if nobody agree, in this scenario the QA
could not accept iBatis SQL map files, and that could be a very big
mess in my project.

I'm sure I'm not the only developer in this situation, so having
iBatis excluded by QAs because of file format could be a very big
shame :(

Finally I didn't understand if there are some technical motivation of
your decision, if iBatis supports the line break on the parameter
structure, users can choose they preferred formatting style.

Thanks a lot



2010/2/4 Clinton Begin <clinton.begin@gmail.com>

> PS:  And yes, I will correct the documentation.  That was done because I
> don't think it fit on one line.
>
> It should be extremely rare to use the attributes at all, and when you do,
> it will be one or two at most...
>
> For example, the following are likely mappings, in order of likelyhood:
>
> *#{some_column}
> *-- 90% of the time, this should be all you need.
>
> *#{some_column, jdbcType=NUMERIC}
> *-- This is for nullable columns, and even then, only where you expect to
> pass null.
>
> *#{some_column, javaType=String, jdbcType=CLOB}
> *-- perhaps to force a clob mapping with a simple JDBC driver that doesn't
> do this behind getString().
>
> *#{some_column, typeHandler=MyTypeHandler}
> *-- custom type handler (no need to specify types at this point, all
> they're used for is to look up the type handler).
>
> *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}
> *-- This is the worst possible case I can think of... a nullable column
> with a custom type handler that is mapped on a per-statement basis (a
> globally defined typehandler wouldn't even need this).
>
> Furthermore, I can't see why you would ever format your SQL statements in
> such a way that would require a line break in the middle.
>
> For any WHERE clause or SET clause you'll have (in the worst possible
> case):
>
> SET
>   foo = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
> WHERE
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>
> Is this more readable?
>
> SET
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
> WHERE
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>
> What about at scale?
>
> SET
>   foo = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   foo = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   foo = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   foo = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   foo = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
> WHERE
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>   bar = *#{some_column, jdbcType=NUMERIC, typeHandler=MyTypeHandler}  *
>
> SET
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
>   foo = *#{some_column,
>             jdbcType=NUMERIC,
>             typeHandler=MyTypeHandler}  *
> WHERE
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>   bar = *#{some_column,
>              jdbcType=NUMERIC,
>              typeHandler=MyTypeHandler}  *
>
> I'm totally not sold on this solution, or if there's even a problem.
>
> As I've said already, I support the re-introduction of parameter elements
> that will work something like the "parameterDef" approach above (but I agree
> that it could just be called "parameter").
>
> Clinton
>
>
> On Thu, Feb 4, 2010 at 12:00 PM, Clinton Begin <clinton.begin@gmail.com>wrote:
>
>> >> because an XML file should not be "formatting-sensitive".
>>
>> That's not true at all.  The XML tags shouldn't be formatting sensitive,
>> but the content can be.  That's our format, that's our requirement.
>>
>> That said, I'm open to improving the error.  But I personally will not
>> support line breaks in the parameter structure.
>>
>> Clinton
>>
>>
>> On Thu, Feb 4, 2010 at 9:03 AM, Marco Speranza <
>> marco.speranza79@gmail.com> wrote:
>>
>>> Hi Clinton,
>>>
>>> So if the #{} syntax will never be removed we have to fix the little
>>> line-break problem, because an XML file should not be
>>> "formatting-sensitive".
>>> Moreover yesterday night I made a simple test-case that reproduces the
>>> example wrote in the iBatis manual (page 26), and the parser raises a
>>> BuilderException (Improper inline parameter map format.  Should be:
>>> #{propName,attr1=val1,attr2=val2}).
>>> So if your intention is maintaining this syntax, and you're open to fix
>>> this problem, I can submit through Jira the patch needed I mentioned mails
>>> ago in the same thread.
>>> What do you think?
>>>
>>>
>>>
>>>
>>> 2010/2/4 Clinton Begin <clinton.begin@gmail.com>
>>>
>>> These are all great thoughts.  As I said, one of them is likely to be
>>>> implemented in the future.  It's just been deprioritized for now.
>>>>
>>>> Clinton
>>>>
>>>>
>>>> On Thu, Feb 4, 2010 at 8:42 AM, Simone Tripodi <
>>>> simone.tripodi@gmail.com> wrote:
>>>>
>>>>> Yep, I forgot the same syntax is used in annotations :)
>>>>> BTW, it was just a 2 cents idea, not a real proposal.
>>>>> Cheers,
>>>>> Simo
>>>>>
>>>>> http://people.apache.org/~simonetripodi/<http://people.apache.org/%7Esimonetripodi/>
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Feb 4, 2010 at 4:22 PM, Clinton Begin <clinton.begin@gmail.com>
>>>>> wrote:
>>>>> > The syntax will never be removed, first because it's the preferred
>>>>> way of
>>>>> > the majority, and second, because we need a parameter syntax that
is
>>>>> > compatible with other configuration options, like annotations or
>>>>> JSON, etc.
>>>>> >
>>>>> > Clinton
>>>>> >
>>>>> > On Thu, Feb 4, 2010 at 12:44 AM, Simone Tripodi <
>>>>> simone.tripodi@gmail.com>
>>>>> > wrote:
>>>>> >>
>>>>> >> Hi all guys,
>>>>> >> sorry but I explained my "2 cents idea" in the wrong way :P
>>>>> >> Indeed, in my dreams, I'd completely _remove_ the #{} syntax,
IMHO
>>>>> it
>>>>> >> should be simpler reading a 100% pure XML SQL map like:
>>>>> >>
>>>>> >> update ORDER_ENTRY.CONTACT
>>>>> >> set
>>>>> >>  DEPT_ID = <parameter name="deptId" javaType="String"
>>>>> jdbcType="VARCHAR"
>>>>> >> />
>>>>> >>  STATE_ID = <parameter name="stateId" javaType="String"
>>>>> jdbcType="VARCHAR"
>>>>> >> />
>>>>> >>  TIME_ZONE_ID = <parameter name="timeZoneId" javaType="String"
>>>>> >> jdbcType="VARCHAR" />
>>>>> >>
>>>>> >> instead of
>>>>> >>
>>>>> >> update ORDER_ENTRY.CONTACT
>>>>> >> set
>>>>> >>  DEPT_ID = #{deptId, javaType=String, jdbcType=VARCHAR},
>>>>> >>  STATE_ID = #{stateId, javaType=String, jdbcType=VARCHAR},
>>>>> >>  TIME_ZONE_ID = #{timeZoneId, javaType=String, jdbcType=VARCHAR}
>>>>> >>
>>>>> >> even if, of course, for a simpler case like:
>>>>> >>
>>>>> >> insert into
>>>>> >>    users (
>>>>> >>        id,
>>>>> >>        username,
>>>>> >>        password)
>>>>> >> values (
>>>>> >>        <parameter name="id"/>,
>>>>> >>        <parameter name="username"/>,
>>>>> >>        <parameter name="password"/>
>>>>> >> )
>>>>> >>
>>>>> >> is much more verbose than:
>>>>> >>
>>>>> >> insert into
>>>>> >>    users (
>>>>> >>        id,
>>>>> >>        username,
>>>>> >>        password)
>>>>> >> values (
>>>>> >>        #{id},
>>>>> >>        #{username},
>>>>> >>        #{password}
>>>>> >> )
>>>>> >>
>>>>> >> Thoughts?
>>>>> >> All the best,
>>>>> >> Simo
>>>>> >>
>>>>> >> http://people.apache.org/~simonetripodi/<http://people.apache.org/%7Esimonetripodi/>
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> On Thu, Feb 4, 2010 at 2:20 AM, Daryl Stultz <daryl@6degrees.com>
>>>>> wrote:
>>>>> >> >
>>>>> >> > On Wed, Feb 3, 2010 at 7:38 PM, Guy Rouillier <
>>>>> guyr-ml1@burntmail.com>
>>>>> >> > wrote:
>>>>> >> >>
>>>>> >> >> On 2/3/2010 3:54 PM, Daryl Stultz wrote:
>>>>> >> >
>>>>> >> >
>>>>> >> >>>
>>>>> >> >>> I like this idea, though to keep things consistent,
I would just
>>>>> use
>>>>> >> >>> "parameter" instead of "parameterDef".
>>>>> >> >
>>>>> >> > Right, I just made up parameterDef to indicate is was for
defining
>>>>> the
>>>>> >> > parameter rather than using it. I'm pretty new to iBATIS,
so I
>>>>> haven't
>>>>> >> > used
>>>>> >> > <parameter> yet and didn't want to suggest an orthogonal
usage of
>>>>> it.
>>>>> >> > --
>>>>> >> > Daryl Stultz
>>>>> >> > _____________________________________
>>>>> >> > 6 Degrees Software and Consulting, Inc.
>>>>> >> > http://www.6degrees.com
>>>>> >> > mailto:daryl@6degrees.com
>>>>> >> >
>>>>> >>
>>>>> >>
>>>>> ---------------------------------------------------------------------
>>>>> >> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>>>>> >> For additional commands, e-mail: user-java-help@ibatis.apache.org
>>>>> >>
>>>>> >
>>>>> >
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>>>>> For additional commands, e-mail: user-java-help@ibatis.apache.org
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Marco Speranza <marco.speranza79@gmail.com>
>>>
>>
>>
>


-- 
Marco Speranza <marco.speranza79@gmail.com>

Mime
View raw message