This is an automated email from the ASF dual-hosted git repository.

snuyanzin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new dadd8d63e41 [FLINK-39866][table] Remove dead KEYVALUE code from 
SqlFunctionUtils and StringCallGen
dadd8d63e41 is described below

commit dadd8d63e416be1d2db9c25c6497189b902c7dcd
Author: Ramin Gharib <[email protected]>
AuthorDate: Tue Jun 23 11:31:34 2026 +0200

    [FLINK-39866][table] Remove dead KEYVALUE code from SqlFunctionUtils and 
StringCallGen
---
 .../planner/codegen/calls/StringCallGen.scala      |  10 --
 .../table/data/binary/BinaryStringDataUtil.java    | 115 ------------------
 .../table/runtime/functions/SqlFunctionUtils.java  |  56 ---------
 .../flink/table/data/BinaryStringDataTest.java     | 132 ---------------------
 4 files changed, 313 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/StringCallGen.scala
 
b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/StringCallGen.scala
index 33e335f0549..f9bc149e831 100644
--- 
a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/StringCallGen.scala
+++ 
b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/StringCallGen.scala
@@ -560,16 +560,6 @@ object StringCallGen {
     }
   }
 
-  def generateKeyValue(
-      ctx: CodeGeneratorContext,
-      operands: Seq[GeneratedExpression],
-      returnType: LogicalType): GeneratedExpression = {
-    val className = classOf[SqlFunctionUtils].getCanonicalName
-    generateCallIfArgsNullable(ctx, returnType, operands) {
-      terms => s"$className.keyValue(${terms.mkString(",")})"
-    }
-  }
-
   def generateHashCode(
       ctx: CodeGeneratorContext,
       operands: Seq[GeneratedExpression],
diff --git 
a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/binary/BinaryStringDataUtil.java
 
b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/binary/BinaryStringDataUtil.java
index 496d0dad508..53c25f9a46a 100644
--- 
a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/binary/BinaryStringDataUtil.java
+++ 
b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/data/binary/BinaryStringDataUtil.java
@@ -618,121 +618,6 @@ public class BinaryStringDataUtil {
         return DateTimeUtils.parseTimestampData(input.toString(), precision, 
timeZone);
     }
 
-    /**
-     * Parse target string as key-value string and return the value matches 
key name. If accept any
-     * null arguments, return null. example: keyvalue('k1=v1;k2=v2', ';', '=', 
'k2') = 'v2'
-     * keyvalue('k1:v1,k2:v2', ',', ':', 'k3') = NULL
-     *
-     * @param split1 separator between key-value tuple.
-     * @param split2 separator between key and value.
-     * @param keyName name of the key whose value you want return.
-     * @return target value.
-     */
-    public static BinaryStringData keyValue(
-            BinaryStringData str, byte split1, byte split2, BinaryStringData 
keyName) {
-        str.ensureMaterialized();
-        if (keyName == null || keyName.getSizeInBytes() == 0) {
-            return null;
-        }
-        if (str.inFirstSegment() && keyName.inFirstSegment()) {
-            // position in byte
-            int byteIdx = 0;
-            // position of last split1
-            int lastSplit1Idx = -1;
-            while (byteIdx < str.getSizeInBytes()) {
-                // If find next split1 in str, process current kv
-                if (str.getSegments()[0].get(str.getOffset() + byteIdx) == 
split1) {
-                    int currentKeyIdx = lastSplit1Idx + 1;
-                    // If key of current kv is keyName, return the value 
directly
-                    BinaryStringData value =
-                            findValueOfKey(str, split2, keyName, 
currentKeyIdx, byteIdx);
-                    if (value != null) {
-                        return value;
-                    }
-                    lastSplit1Idx = byteIdx;
-                }
-                byteIdx++;
-            }
-            // process the string which is not ends with split1
-            int currentKeyIdx = lastSplit1Idx + 1;
-            return findValueOfKey(str, split2, keyName, currentKeyIdx, 
str.getSizeInBytes());
-        } else {
-            return keyValueSlow(str, split1, split2, keyName);
-        }
-    }
-
-    private static BinaryStringData findValueOfKey(
-            BinaryStringData str, byte split, BinaryStringData keyName, int 
start, int end) {
-        int keyNameLen = keyName.getSizeInBytes();
-        for (int idx = start; idx < end; idx++) {
-            if (str.getSegments()[0].get(str.getOffset() + idx) == split) {
-                if (idx == start + keyNameLen
-                        && str.getSegments()[0].equalTo(
-                                keyName.getSegments()[0],
-                                str.getOffset() + start,
-                                keyName.getOffset(),
-                                keyNameLen)) {
-                    int valueIdx = idx + 1;
-                    int valueLen = end - valueIdx;
-                    byte[] bytes = new byte[valueLen];
-                    str.getSegments()[0].get(str.getOffset() + valueIdx, 
bytes, 0, valueLen);
-                    return fromBytes(bytes, 0, valueLen);
-                } else {
-                    return null;
-                }
-            }
-        }
-        return null;
-    }
-
-    private static BinaryStringData keyValueSlow(
-            BinaryStringData str, byte split1, byte split2, BinaryStringData 
keyName) {
-        // position in byte
-        int byteIdx = 0;
-        // position of last split1
-        int lastSplit1Idx = -1;
-        while (byteIdx < str.getSizeInBytes()) {
-            // If find next split1 in str, process current kv
-            if (str.byteAt(byteIdx) == split1) {
-                int currentKeyIdx = lastSplit1Idx + 1;
-                BinaryStringData value =
-                        findValueOfKeySlow(str, split2, keyName, 
currentKeyIdx, byteIdx);
-                if (value != null) {
-                    return value;
-                }
-                lastSplit1Idx = byteIdx;
-            }
-            byteIdx++;
-        }
-        int currentKeyIdx = lastSplit1Idx + 1;
-        return findValueOfKeySlow(str, split2, keyName, currentKeyIdx, 
str.getSizeInBytes());
-    }
-
-    private static BinaryStringData findValueOfKeySlow(
-            BinaryStringData str, byte split, BinaryStringData keyName, int 
start, int end) {
-        int keyNameLen = keyName.getSizeInBytes();
-        for (int idx = start; idx < end; idx++) {
-            if (str.byteAt(idx) == split) {
-                if (idx == start + keyNameLen
-                        && SegmentsUtil.equals(
-                                str.getSegments(),
-                                str.getOffset() + start,
-                                keyName.getSegments(),
-                                keyName.getOffset(),
-                                keyNameLen)) {
-                    int valueIdx = idx + 1;
-                    byte[] bytes =
-                            SegmentsUtil.copyToBytes(
-                                    str.getSegments(), str.getOffset() + 
valueIdx, end - valueIdx);
-                    return fromBytes(bytes);
-                } else {
-                    return null;
-                }
-            }
-        }
-        return null;
-    }
-
     public static BinaryStringData substringSQL(BinaryStringData str, int pos) 
{
         return substringSQL(str, pos, Integer.MAX_VALUE);
     }
diff --git 
a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlFunctionUtils.java
 
b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlFunctionUtils.java
index 58dfbaf10b0..7dd55b73a47 100644
--- 
a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlFunctionUtils.java
+++ 
b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlFunctionUtils.java
@@ -486,62 +486,6 @@ public class SqlFunctionUtils {
         }
     }
 
-    /**
-     * Parse string as key-value string and return the value matches key name. 
example:
-     * keyvalue('k1=v1;k2=v2', ';', '=', 'k2') = 'v2' keyvalue('k1:v1,k2:v2', 
',', ':', 'k3') = NULL
-     *
-     * @param str target string.
-     * @param pairSeparator separator between key-value tuple.
-     * @param kvSeparator separator between key and value.
-     * @param keyName name of the key whose value you want return.
-     * @return target value.
-     */
-    public static BinaryStringData keyValue(
-            BinaryStringData str,
-            BinaryStringData pairSeparator,
-            BinaryStringData kvSeparator,
-            BinaryStringData keyName) {
-        if (str == null || str.getSizeInBytes() == 0) {
-            return null;
-        }
-        if (pairSeparator != null
-                && pairSeparator.getSizeInBytes() == 1
-                && kvSeparator != null
-                && kvSeparator.getSizeInBytes() == 1) {
-            return BinaryStringDataUtil.keyValue(
-                    str, pairSeparator.byteAt(0), kvSeparator.byteAt(0), 
keyName);
-        } else {
-            return BinaryStringData.fromString(
-                    keyValue(
-                            BinaryStringDataUtil.safeToString(str),
-                            BinaryStringDataUtil.safeToString(pairSeparator),
-                            BinaryStringDataUtil.safeToString(kvSeparator),
-                            BinaryStringDataUtil.safeToString(keyName)));
-        }
-    }
-
-    private static String keyValue(
-            String str, String pairSeparator, String kvSeparator, String 
keyName) {
-        try {
-            if (StringUtils.isEmpty(str)) {
-                return null;
-            }
-            String[] values = StringUtils.split(str, pairSeparator);
-            for (String value : values) {
-                if (!StringUtils.isEmpty(value)) {
-                    String[] kv = StringUtils.split(kvSeparator);
-                    if (kv != null && kv.length == 2 && kv[0].equals(keyName)) 
{
-                        return kv[1];
-                    }
-                }
-            }
-            return null;
-        } catch (Exception e) {
-            LOG.error("Exception when parse key-value", e);
-            return null;
-        }
-    }
-
     /**
      * Calculate the hash value of a given string.
      *
diff --git 
a/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/BinaryStringDataTest.java
 
b/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/BinaryStringDataTest.java
index 160d5f7f4ca..d6dcf64058f 100644
--- 
a/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/BinaryStringDataTest.java
+++ 
b/flink-table/flink-table-runtime/src/test/java/org/apache/flink/table/data/BinaryStringDataTest.java
@@ -44,7 +44,6 @@ import static 
org.apache.flink.table.data.binary.BinaryStringDataUtil.EMPTY_STRI
 import static org.apache.flink.table.data.binary.BinaryStringDataUtil.concat;
 import static org.apache.flink.table.data.binary.BinaryStringDataUtil.concatWs;
 import static org.apache.flink.table.data.binary.BinaryStringDataUtil.isEmpty;
-import static org.apache.flink.table.data.binary.BinaryStringDataUtil.keyValue;
 import static org.apache.flink.table.data.binary.BinaryStringDataUtil.reverse;
 import static 
org.apache.flink.table.data.binary.BinaryStringDataUtil.splitByWholeSeparatorPreserveAllTokens;
 import static 
org.apache.flink.table.data.binary.BinaryStringDataUtil.substringSQL;
@@ -627,137 +626,6 @@ class BinaryStringDataTest {
         
assertThat(StringUtf8Utils.encodeUTF8(str)).isEqualTo(str.getBytes("UTF-8"));
     }
 
-    @TestTemplate
-    void testKeyValue() {
-        assertThat(
-                        keyValue(
-                                fromString("k1:v1|k2:v2"),
-                                fromString("|").byteAt(0),
-                                fromString(":").byteAt(0),
-                                fromString("k3")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1:v1|k2:v2|"),
-                                fromString("|").byteAt(0),
-                                fromString(":").byteAt(0),
-                                fromString("k3")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("|k1:v1|k2:v2|"),
-                                fromString("|").byteAt(0),
-                                fromString(":").byteAt(0),
-                                fromString("k3")))
-                .isNull();
-        String tab = 
org.apache.commons.lang3.StringEscapeUtils.unescapeJava("\t");
-        assertThat(
-                        keyValue(
-                                fromString("k1:v1" + tab + "k2:v2"),
-                                fromString("\t").byteAt(0),
-                                fromString(":").byteAt(0),
-                                fromString("k2")))
-                .isEqualTo(fromString("v2"));
-        assertThat(
-                        keyValue(
-                                fromString("k1:v1|k2:v2"),
-                                fromString("|").byteAt(0),
-                                fromString(":").byteAt(0),
-                                null))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1=v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k2")))
-                .isEqualTo(fromString("v2"));
-        assertThat(
-                        keyValue(
-                                fromString("|k1=v1|k2=v2|"),
-                                fromString("|").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k2")))
-                .isEqualTo(fromString("v2"));
-        assertThat(
-                        keyValue(
-                                fromString("k1=v1||k2=v2"),
-                                fromString("|").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k2")))
-                .isEqualTo(fromString("v2"));
-        assertThat(
-                        keyValue(
-                                fromString("k1=v1;k2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k2")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k1")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k=1=v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k=")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1==v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k1")))
-                .isEqualTo(fromString("=v1"));
-        assertThat(
-                        keyValue(
-                                fromString("k1==v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k1=")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1=v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k1=")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1k1=v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k1")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1=v1;k2=v2"),
-                                fromString(";").byteAt(0),
-                                fromString("=").byteAt(0),
-                                fromString("k1k1k1k1k1k1k1k1k1k1")))
-                .isNull();
-        assertThat(
-                        keyValue(
-                                fromString("k1:v||k2:v2"),
-                                fromString("|").byteAt(0),
-                                fromString(":").byteAt(0),
-                                fromString("k2")))
-                .isEqualTo(fromString("v2"));
-        assertThat(
-                        keyValue(
-                                fromString("k1:v||k2:v2"),
-                                fromString("|").byteAt(0),
-                                fromString(":").byteAt(0),
-                                fromString("k2")))
-                .isEqualTo(fromString("v2"));
-    }
-
     @TestTemplate
     void testDecodeWithIllegalUtf8Bytes() throws UnsupportedEncodingException {
 

Reply via email to