I see. Yeah, like I said I am also not a fan of #bindEqual. It was a
hack back in the day to address "column = value" vs "column is null"
syntax differences. Let's investigate what it takes to make #bind work.
Andrus
On Sep 23, 2009, at 1:45 PM, Evgeny Ryabitskiy wrote:
No! #bindEqual can't help me...
I am using something like this:
INSERT INTO TABLE1 (id, NullableColumn) values (10, $MyNullValue)
And in param MyNullValue I put null, It's legal to insert null in
this column.
So I can't use #bindEqual here, the only solution to pass
(String)"null" as parametr... but I don't wan't to put everywhere in
my code such constructions:
(paramValue == null) ? "null" : paramValue
It is possible to do this check on perform query level.... Going to
make some changes to cayenne againg....
Best regards,
Evgeny Ryabitskiy.
2009/9/23 Eugene R. <[email protected]>:
No! #bindEqual can't help me...
I am using something like this:
INSERT INTO TABLE1 (id, NullableColumn) values (10, $MyNullValue)
And in param MyNullValue I put null, It's legal to insert null in
this column.
So I can't use #bindEqual here, the only solution to pass
(String)"null" as parametr... but I don't wan't to put everywhere in
my code such constructions:
(paramValue == null) ? "null" : paramValue
It is possible to do this check on perform query level.... Going to
make some changes to cayenne againg....
Best regards,
Evgeny Ryabitskiy.
2009/9/23 Andrus Adamchik <[email protected]>:
Hi Evgeny,
To address NULL's syntax issues, there are special directives
"#bindEqual
and #bindNotEqual". See "Null Values in Bindings - #bindEqual and
#bindNotEqual Directives" here:
http://cayenne.apache.org/doc/scripting-sqltemplate.html
I can't say I am a big fan of the above solution, and maybe we
should be
smarter in SQLTemplateAction about NULL's in #bind directives.
Some research
is needed here.
Andrus
On Sep 23, 2009, at 12:55 PM, Evgeny Ryabitskiy wrote:
Hello to everyone!
I have a problem with passing null params to SQLTemplate.
So.. I put null to params, then perform query and got... bad formed
SQL query...
I know it's because of how Velocity Engine do merge for templates.
I know that I can use construction like this: #bind('valueKey'
'jdbcType'
null)
But this query is generated and I don't know jdbcType :/
Also I don't want to pass (java.lang.String) "null" in parameters
or
my Java code will be huge.
Looks like there is no simple way to force cayenne inserting null
in
templates. Or I am missing something?
Maybe we can add some flag for query SQLTemplate constructor.. like
boolean "convertNulls" to allow passing nulls in params without
huge
template changes
( I mean inserting everywhere #bind('valueKey' 'jdbcType' null) ) ?
Best regards,
Evgeny Ryabitskiy.