[ https://issues.apache.org/jira/browse/FLINK-14539?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16960843#comment-16960843 ]
Jark Wu edited comment on FLINK-14539 at 10/28/19 8:01 AM: ----------------------------------------------------------- Hi [~KevinZwx], I think RexBiVisitor is fine. Some thoughts from my side, I think what we need is something like {{SqlOperator#getMonotonicity}}, by using RexBiVisitor, maybe we need something: {code:java} class UniquenessPreserveVisitor implements RexBiVisitor<Boolean, UniquenessCallContext> {...} {code} Where the UniquenessCallContext contains {{isArgumentUnqiuenessPreserved(int idx)}}, {{int getArgumentCount()}}. Maybe we can make {{UniquenessCallContext}} extends {{CallContext}}. was (Author: jark): Hi [~KevinZwx], I think RexBiVisitor is fine. Some thoughts from my side, I think what we need is something like {{SqlOperator#getMonotonicity}}, by using RexBiVisitor, maybe we need something: {{class UniquenessPreserveVisitor implements RexBiVisitor<Boolean, UniquenessCallContext> {...} }} Where the UniquenessCallContext contains {{isArgumentUnqiuenessPreserved(int idx)}}, {{int getArgumentCount()}}. Maybe we can make {{UniquenessCallContext}} extends {{CallContext}}. > Unique key metadata should be ketp when using concat or concat_ws in some > cases > ------------------------------------------------------------------------------- > > Key: FLINK-14539 > URL: https://issues.apache.org/jira/browse/FLINK-14539 > Project: Flink > Issue Type: Bug > Components: Table SQL / Planner > Affects Versions: 1.9.0, 1.9.1 > Reporter: Kevin Zhang > Priority: Major > > Currently unique key metadata of a project relnode are only kept in the > following three situations: > # project the child unique keys while not changing them > # cast the child unique key when ignoring nulls and the original type of the > field and cast type are the same > # rename the child unique keys > Besides these situations, concat and concat_ws should also keep the metadata > if they won't break the uniqueness of the child unique keys, i.e. each > operands is in one of the above situations, and the operands include all the > child unique keys. > Say the f0 and f1 are the unique key fields of the child node, the following > sqls should keep the unique key metadata > {code:sql} > select concat(f0, f1) > -- the type of f0 and f1 are both varchar originally and ignore nulls > select concat(cast(f0 as varchar), f1) > select cast(concat(f0, f1) as varchar) > {code} > while the following sqls should discard the unique key metadata > {code:sql} > -- the type of f0 and f1 are both varchar originally > select concat(cast(f0 as bigint), f1) > select cast(concat(f0, f1) as bigint) > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)