[ https://issues.apache.org/jira/browse/FLINK-31848?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17715115#comment-17715115 ]
Shuiqiang Chen edited comment on FLINK-31848 at 4/21/23 6:32 PM: ----------------------------------------------------------------- [~martijnvisser][~zju_zsx][~jark] Thanks for your reply. After running several test cases based on release-1.15 (which I previously analyzed) and the latest 1.18-SNAPSHOT branch, it seems that the left.resultTerm in the left.code has always been assigned with a boolean value and will never cause a syntax error by calling `if (!${left.resultTerm})`. Therefore I agree with [~zju_zsx] that the logic can be safely simplified. While with `if (!${left.nullTerm} && !${left.resultTerm})`, it would be a little bit more intuitive that ${left.nullTerm} indicates whether left result is UNKNOWN or not in three value logic. was (Author: csq): [~martijnvisser][~zju_zsx][~jark] Thanks for your reply. After running several test cases based on release-1.15 (which I previously analyzed) and the latest 1.18-SNAPSHOT branch, it seems that the left.resultTerm in the left.code has always been assigned with a boolean value and will never cause a syntax error by calling `if (!${left.resultTerm})`. Therefore I agree with [~zju_zsx] that the logic can be safely simplified. While with `if (!${left.nullTerm} && !${left.resultTerm})`, it would be a little bit more intuitive that ${left.nullTerm} indicates whether left result is UNKNOWN or not in three value logic. > And Operator has side effect when operands have udf > --------------------------------------------------- > > Key: FLINK-31848 > URL: https://issues.apache.org/jira/browse/FLINK-31848 > Project: Flink > Issue Type: Bug > Components: Table SQL / Planner > Affects Versions: 1.13.2 > Reporter: zju_zsx > Priority: Major > Attachments: image-2023-04-19-14-54-46-458.png > > > > {code:java} > CREATE TABLE kafka_source ( > `content` varchar, > `testid` bigint, > `extra` int > ); > CREATE TABLE console_sink ( > `content` varchar, > `testid` bigint > ) > with ( > 'connector' = 'print' > ); > insert into console_sink > select > content,testid+1 > from kafka_source where testid is not null and testid > 0 and my_udf(testid) > != 0; {code} > my_udf has a constraint that the testid should not be null, but the testid is > not null and testid > 0 does not take effect. > > Im ScalarOperatorGens.generateAnd > !image-2023-04-19-14-54-46-458.png! > if left.nullTerm is true, right code will be execute 。 > it seems that > {code:java} > if (!${left.nullTerm} && !${left.resultTerm}) {code} > can be safely replaced with > {code:java} > if (!${left.resultTerm}){code} > ? -- This message was sent by Atlassian Jira (v8.20.10#820010)