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 Sun, 14 Feb 2010 01:46:55 GMT
Hi Clinton,

great! this is a good news ;-)

tnx very much

ciao


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

> K, There were enough people interested, and it only took 10 seconds to add
> support for line breaks and tabs etc. into the inline parameters... so I
> added it.
>
> Clinton
>
>
> On Fri, Feb 5, 2010 at 8:45 AM, Marco Speranza <marco.speranza79@gmail.com
> > wrote:
>
>> 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>
>>
>
>


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

Mime
View raw message