Jackie-Jiang commented on code in PR #12392: URL: https://github.com/apache/pinot/pull/12392#discussion_r1566565835
########## pinot-common/src/main/java/org/apache/pinot/common/function/scalar/StringFunctions.java: ########## @@ -581,6 +586,107 @@ public static String[] split(String input, String delimiter, int limit) { return StringUtils.splitByWholeSeparator(input, delimiter, limit); } + /** + * @param input an input string for prefix strings generations. + * @param maxlength the max length of the prefix strings for the string. + * @return generate an array of prefix strings of the string that are shorter than the specified length. + */ + @ScalarFunction + public static String[] prefixes(String input, int maxlength) { + ObjectList<String> prefixList = new ObjectArrayList<>(); Review Comment: `ObjectArrayList` is not really buying us anything here. Given we know the number of prefixes upfront, we can directly allocate the array ########## pinot-common/src/main/java/org/apache/pinot/common/function/scalar/StringFunctions.java: ########## @@ -18,6 +18,10 @@ */ package org.apache.pinot.common.function.scalar; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; Review Comment: No need to use fastutil here. We can use the java default ones ########## pinot-common/src/main/java/org/apache/pinot/common/function/scalar/StringFunctions.java: ########## @@ -570,6 +572,107 @@ public static String[] split(String input, String delimiter, int limit) { return StringUtils.splitByWholeSeparator(input, delimiter, limit); } + /** + * @param input an input string for prefix strings generations. + * @param maxlength the max length of the prefix strings for the string. + * @return generate an array of prefix strings of the string that are shorter than the specified length. + */ + @ScalarFunction + public static String[] uniquePrefixes(String input, int maxlength) { + ObjectSet<String> prefixSet = new ObjectLinkedOpenHashSet<>(); + for (int prefixLength = 1; prefixLength <= maxlength && prefixLength <= input.length(); prefixLength++) { + prefixSet.add(input.substring(0, prefixLength)); + } + return prefixSet.toArray(new String[0]); + } + + /** + * @param input an input string for prefix strings generations. + * @param maxlength the max length of the prefix strings for the string. + * @param prefix the prefix to be prepended to prefix strings generated. e.g. '^' for regex matching + * @return generate an array of prefix matchers of the string that are shorter than the specified length. + */ + @ScalarFunction + public static String[] uniquePrefixesWithPrefix(String input, int maxlength, String prefix) { + if (prefix == null) { Review Comment: This is not addressed ^^ Take a look at `ScalarFunction.class`. You need to annotate it as `nullableParameters` -- 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: commits-unsubscr...@pinot.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org