]
Steven Hawkins edited comment on TEIID-3598 at 7/31/15 2:10 PM:
----------------------------------------------------------------
Just to see if I follow the commit, you have:
{code}
case when col = "" then col when func(col) = "" then null else
func(col) end
{code}
If that's the case, then we aren't properly distinguishing between empty string
and null. Ideally you would like to just have:
{code}
case when col is null then null else func(col) end
{code}
Is that possible?
was (Author: shawkins):
Just to see if I follow the commit, you have:
{code}
if (col == "") {
return col;
} else if (func(col) == "") {
return null;
} else {
return func(col);
}
{code}
If that's the case, then we aren't properly distinguishing between empty string
and null. Ideally you would like to just have:
{code}
if (col is null) {
return null;
} else {
return func(col);
}
{code}
Is that possible?
MongoDB string functions - different handling of NULL values
------------------------------------------------------------
Key: TEIID-3598
URL:
https://issues.jboss.org/browse/TEIID-3598
Project: Teiid
Issue Type: Bug
Components: Misc. Connectors
Affects Versions: 8.7.1.6_2
Reporter: Jan Stastny
Assignee: Ramesh Reddy
Labels: Alpha3
Fix For: 8.12
Teiid doesn't handle NULL values right in given functions when working with mongodb.
* SUBSTRING(<column resolving to NULL>,2)
** query:
{code:sql}
SELECT INTKEY, STRINGNUM, SUBSTRING(STRINGNUM, 2) FROM BQT1.SmallA ORDER BY INTKEY
{code}
** source query:
{code:plain}
{"$project": {{ "c_0" : "$INTKEY" , "c_1" :
"$STRINGNUM" , "c_2" : { "$substr" : [
"$STRINGNUM" , { "$subtract" : [ 2 , 1]} , 4000]}}}}
{code}
** problem:
For row with NULL value in given column returns sth like:
{code:plain}{ "_id" : ObjectId("534bf17516997a2a41000002"),
"c_0" : 1, "c_1" : null, "c_2" : "" }
{code}which results in "" as result for SUBSTRING(NULL, 2) which should return
NULL instead
* UCASE, LCASE (UPPER, LOWER)
** query:
{code:sql}
SELECT intkey, stringnum, LOWER(stringnum) AS LOWER FROM BQT1.SmallA ORDER BY intkey
{code}
** source query:
{code:plain}
{"$project": {{ "c_0" : "$INTKEY" , "c_1" :
"$STRINGNUM" , "c_2" : { "$toLower" : [
"$STRINGNUM"]}}}}
{code}
** problem:
For row with NULL value in given column returns sth like:
{code:plain}
{ "_id" : ObjectId("534bf17516997a2a41000002"), "c_0" : 1,
"c_1" : null, "c_2" : "" }
{code} which results in "" as result for LCASE(NULL) which should return NULL
instead