lincoln-lil commented on code in PR #25217:
URL: https://github.com/apache/flink/pull/25217#discussion_r1723494445
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/utils/UpsertKeyUtil.java:
##########
@@ -42,8 +43,17 @@ public class UpsertKeyUtil {
*/
@Nonnull
public static int[] getSmallestKey(@Nullable Set<ImmutableBitSet>
upsertKeys) {
+ return smallestKey(upsertKeys).orElse(new int[0]);
+ }
+
+ /**
+ * Returns the smallest key of given upsert keys wrapped with a java
{@link Optional}. Different
+ * from {@link #getSmallestKey(Set)}, it'll return result with an empty
{@link Optional} if the
+ * input set is null or empty.
+ */
+ public static Optional<int[]> smallestKey(@Nullable Set<ImmutableBitSet>
upsertKeys) {
Review Comment:
Yes, after some hesitation I ended up adding this new method that returns
`Optional` because of two reasons:
1. the original method returns `int[]` declared as nonnull, but how `int[0]`
is serialized and deserialized on execnode may be implementation related, and
then where the operator is finally called still needs to jointly determine `! =
null && .length > 0` to prevent npe, and `Optional#empty` can definitively use
`isPresent` to check null, and execnode explicitly uses nullable upsertKey to
ignore null values.
2. I'd like to avoid some of the ambiguity caused by `int[0]`, although it's
not exactly the same as the recently fixed FLINK-36000, `Optional#empty` vs
`int[0]` issue.
WDYT?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]