[ 
https://issues.apache.org/jira/browse/FLINK-11242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16731759#comment-16731759
 ] 

sunjincheng commented on FLINK-11242:
-------------------------------------

Hi [~dian.fu] Thanks for the comment, we using calcite parsing the flink SQL, 
and calcite have the NULL type(SqlTypeName.NULL),  So in SQL `col isNull` not 
equal to `col = null` 。But In flink we have no NULL type, we only have NULL 
value with specific data type, e.g: Null(STRING). IMO. The problem is how do we 
convert `col isNull` and ` col === Null(type)` to the correct RexNode.  Form 
the view of user, they never know NULL type, in the filter expression, they may 
want check col is null by using ` col === Null(type)` .  

When the user uses `col === Null(Type)`, flink does not report an error. In 
fact, the current implementation where ( `col === Null(Type)`) will always get 
the empty data, which is not what the user expects.

I am not sure if my point certain,  but from the point of user view, `col === 
Null(Type)` equal to `col.isNull` will meet the user's expectations.

What do you think? [~dian.fu]  [~tiwalter] [~fhue...@gmail.com]  Welcome any 
feedback ...

> The predicate `'o_c_id === Null(Types.STRING)` not work in TableAPI
> -------------------------------------------------------------------
>
>                 Key: FLINK-11242
>                 URL: https://issues.apache.org/jira/browse/FLINK-11242
>             Project: Flink
>          Issue Type: Bug
>          Components: Table API & SQL
>    Affects Versions: 1.8.0
>            Reporter: sunjincheng
>            Assignee: Dian Fu
>            Priority: Major
>
> Schema:
> {code:java}
> Table(c_id:String,  o_c_id:String){code}
> Data: 
> {code:java}
> c_001,c_001
> c_002,c_002
> c_003,null{code}
> TableAPI:
> {code:java}
> val result = tab
>   .select('c_id, 'o_c_id)
>   .where('o_c_id === Null(Types.STRING)){code}
> Result:
> We expect  `c_003, null`, but got empty.
> BTW, we can got the correct result by follows TableAPI:
> {code:java}
> val result = tab
>   .select('c_id, 'o_c_id)
>   .where('o_c_id isNull){code}
>  
> I think is better for we let `.where('o_c_id === Null(Types.STRING))` work 
> well. What do you think?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to