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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5d97d3a15ed [fix](nereids)Fix dlog1, trim, extract_url_parameter and 
parse_url FE constant calculate bug. (#49074)
5d97d3a15ed is described below

commit 5d97d3a15eda37923f62675b504ddd3e653bf405
Author: James <lijib...@selectdb.com>
AuthorDate: Tue Mar 18 21:52:54 2025 +0800

    [fix](nereids)Fix dlog1, trim, extract_url_parameter and parse_url FE 
constant calculate bug. (#49074)
    
    ### What problem does this PR solve?
    
    1. dlog1 should use Math.log
    2. trim/ltrim/rtrim shouldn't use regex
    3. extract_url_parameter shouldn't fetch ref part.
    4. parse_url need to return NULL instream of literal 'null' when we
    couldn't get the requested part.
---
 .../doris/catalog/BuiltinScalarFunctions.java      |   4 +-
 .../functions/executable/NumericArithmetic.java    |  11 -
 .../functions/executable/StringArithmetic.java     |  67 ++-
 .../trees/expressions/functions/scalar/Dlog1.java  |  68 ---
 .../expressions/visitor/ScalarFunctionVisitor.java |   5 -
 .../fold_constant_numeric_arithmatic.groovy        |  47 +-
 .../fold_constant_string_arithmatic.groovy         | 657 +++++++++++++++++++--
 7 files changed, 706 insertions(+), 153 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
index ae638bded38..466503ee47d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
@@ -163,7 +163,6 @@ import 
org.apache.doris.nereids.trees.expressions.functions.scalar.Degrees;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Dexp;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Dfloor;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.DigitalMasking;
-import org.apache.doris.nereids.trees.expressions.functions.scalar.Dlog1;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Dlog10;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Domain;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.DomainWithoutWww;
@@ -639,7 +638,6 @@ public class BuiltinScalarFunctions implements 
FunctionHelper {
             scalar(Dexp.class, "dexp"),
             scalar(Dfloor.class, "dfloor"),
             scalar(DigitalMasking.class, "digital_masking"),
-            scalar(Dlog1.class, "dlog1"),
             scalar(Dlog10.class, "dlog10"),
             scalar(Domain.class, "domain"),
             scalar(DomainWithoutWww.class, "domain_without_www"),
@@ -773,7 +771,7 @@ public class BuiltinScalarFunctions implements 
FunctionHelper {
             scalar(Length.class, "length"),
             scalar(Crc32.class, "crc32"),
             scalar(Like.class, "like"),
-            scalar(Ln.class, "ln"),
+            scalar(Ln.class, "ln", "dlog1"),
             scalar(Locate.class, "locate"),
             scalar(Log.class, "log"),
             scalar(Log10.class, "log10"),
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
index 50faecf694d..57eda59ee7d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/NumericArithmetic.java
@@ -1064,17 +1064,6 @@ public class NumericArithmetic {
         return checkOutputBoundary(new DoubleLiteral(exp));
     }
 
-    /**
-     * dlog1
-     */
-    @ExecFunction(name = "dlog1")
-    public static Expression dlog1(DoubleLiteral first) {
-        if (inputOutOfBound(first, 0.0d, Double.MAX_VALUE, false, true)) {
-            return new NullLiteral(DoubleType.INSTANCE);
-        }
-        return checkOutputBoundary(new 
DoubleLiteral(Math.log1p(first.getValue())));
-    }
-
     /**
      * dlog10
      */
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
index 85dbb4b273f..06cee19345e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
@@ -144,13 +144,17 @@ public class StringArithmetic {
         if (left) {
             do {
                 result = afterReplace;
-                afterReplace = result.replaceFirst("^" + second, "");
+                if (result.startsWith(second)) {
+                    afterReplace = result.substring(second.length());
+                }
             } while (!afterReplace.equals(result));
         }
         if (right) {
             do {
                 result = afterReplace;
-                afterReplace = result.replaceFirst(second + "$", "");
+                if (result.endsWith(second)) {
+                    afterReplace = result.substring(0, result.length() - 
second.length());
+                }
             } while (!afterReplace.equals(result));
         }
         return result;
@@ -840,39 +844,71 @@ public class StringArithmetic {
         StringBuilder sb = new StringBuilder();
         switch (second.getValue().toUpperCase()) {
             case "PROTOCOL":
-                sb.append(uri.getScheme()); // e.g., http, https
+                String scheme = uri.getScheme();
+                if (scheme == null) {
+                    return new NullLiteral(first.getDataType());
+                }
+                sb.append(scheme); // e.g., http, https
                 break;
             case "HOST":
-                sb.append(uri.getHost());  // e.g., www.example.com
+                String host = uri.getHost();
+                if (host == null) {
+                    return new NullLiteral(first.getDataType());
+                }
+                sb.append(host);  // e.g., www.example.com
                 break;
             case "PATH":
-                sb.append(uri.getPath());  // e.g., /page
+                String path = uri.getPath();
+                if (path == null) {
+                    return new NullLiteral(first.getDataType());
+                }
+                sb.append(path);  // e.g., /page
                 break;
             case "REF":
                 try {
-                    sb.append(uri.toURL().getRef());  // e.g., /page
+                    String ref = uri.toURL().getRef();
+                    if (ref == null) {
+                        return new NullLiteral(first.getDataType());
+                    }
+                    sb.append(ref);  // e.g., /page
                 } catch (MalformedURLException e) {
                     throw new RuntimeException(e);
                 }
                 break;
             case "AUTHORITY":
-                sb.append(uri.getAuthority());  // e.g., 
param1=value1&param2=value2
+                String authority = uri.getAuthority();
+                if (authority == null) {
+                    return new NullLiteral(first.getDataType());
+                }
+                sb.append(authority);  // e.g., param1=value1&param2=value2
                 break;
             case "FILE":
                 try {
-                    sb.append(uri.toURL().getFile());  // e.g., 
param1=value1&param2=value2
+                    String file = uri.toURL().getFile();
+                    if (file == null) {
+                        return new NullLiteral(first.getDataType());
+                    }
+                    sb.append(file);  // e.g., param1=value1&param2=value2
                 } catch (MalformedURLException e) {
                     throw new RuntimeException(e);
                 }
                 break;
             case "QUERY":
-                sb.append(uri.getQuery());  // e.g., 
param1=value1&param2=value2
+                String query = uri.getQuery();
+                if (query == null) {
+                    return new NullLiteral(first.getDataType());
+                }
+                sb.append(query);  // e.g., param1=value1&param2=value2
                 break;
             case "PORT":
                 sb.append(uri.getPort());
                 break;
             case "USERINFO":
-                sb.append(uri.getUserInfo());  // e.g., user:pass
+                String userInfo = uri.getUserInfo();
+                if (userInfo == null) {
+                    return new NullLiteral(first.getDataType());
+                }
+                sb.append(userInfo);  // e.g., user:pass
                 break;
             default:
                 throw new RuntimeException("Valid URL parts are 'PROTOCOL', 
'HOST', "
@@ -940,10 +976,15 @@ public class StringArithmetic {
         if (first.getValue() == null || first.getValue().indexOf('?') == -1) {
             return castStringLikeLiteral(first, "");
         }
+        URI uri;
+        try {
+            uri = new URI(first.getValue());
+        } catch (URISyntaxException e) {
+            throw new RuntimeException(e);
+        }
 
-        String[] urlParts = first.getValue().split("\\?", -1);
-        if (urlParts.length > 1) {
-            String query = urlParts[1];
+        String query = uri.getQuery();
+        if (query != null) {
             String[] pairs = query.split("&", -1);
 
             for (String pair : pairs) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Dlog1.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Dlog1.java
deleted file mode 100644
index 399c7dc58de..00000000000
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Dlog1.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.doris.nereids.trees.expressions.functions.scalar;
-
-import org.apache.doris.catalog.FunctionSignature;
-import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
-import 
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
-import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
-import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
-import org.apache.doris.nereids.types.DoubleType;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-import java.util.List;
-
-/**
- * ScalarFunction 'dlog1'. This class is generated by GenerateFunction.
- */
-public class Dlog1 extends ScalarFunction
-        implements UnaryExpression, ExplicitlyCastableSignature, 
AlwaysNullable {
-
-    public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
-            
FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE)
-    );
-
-    /**
-     * constructor with 1 argument.
-     */
-    public Dlog1(Expression arg) {
-        super("dlog1", arg);
-    }
-
-    /**
-     * withChildren.
-     */
-    @Override
-    public Dlog1 withChildren(List<Expression> children) {
-        Preconditions.checkArgument(children.size() == 1);
-        return new Dlog1(children.get(0));
-    }
-
-    @Override
-    public List<FunctionSignature> getSignatures() {
-        return SIGNATURES;
-    }
-
-    @Override
-    public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
-        return visitor.visitDlog1(this, context);
-    }
-}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
index 9c194434199..d763087d163 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
@@ -170,7 +170,6 @@ import 
org.apache.doris.nereids.trees.expressions.functions.scalar.Degrees;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Dexp;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Dfloor;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.DigitalMasking;
-import org.apache.doris.nereids.trees.expressions.functions.scalar.Dlog1;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Dlog10;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Domain;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.DomainWithoutWww;
@@ -1138,10 +1137,6 @@ public interface ScalarFunctionVisitor<R, C> {
         return visitScalarFunction(dfloor, context);
     }
 
-    default R visitDlog1(Dlog1 dlog1, C context) {
-        return visitScalarFunction(dlog1, context);
-    }
-
     default R visitDlog10(Dlog10 dlog10, C context) {
         return visitScalarFunction(dlog10, context);
     }
diff --git 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_numeric_arithmatic.groovy
 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_numeric_arithmatic.groovy
index f95e28e049a..bc1cb91ca9d 100644
--- 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_numeric_arithmatic.groovy
+++ 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_numeric_arithmatic.groovy
@@ -24,12 +24,12 @@ suite("fold_constant_numeric_arithmatic") {
     sql "set enable_fold_constant_by_be=false"
 
     //Abs function cases
-    testFoldConst("SELECT ABS(1)") 
-    testFoldConst("SELECT ABS(0)") 
-    testFoldConst("SELECT ABS(-1)") 
-    testFoldConst("SELECT ABS(1.5)") 
-    testFoldConst("SELECT ABS(-1.5)") 
-    testFoldConst("SELECT ABS(1E308)") 
+    testFoldConst("SELECT ABS(1)")
+    testFoldConst("SELECT ABS(0)")
+    testFoldConst("SELECT ABS(-1)")
+    testFoldConst("SELECT ABS(1.5)")
+    testFoldConst("SELECT ABS(-1.5)")
+    testFoldConst("SELECT ABS(1E308)")
     testFoldConst("SELECT ABS(-1E308)")
     testFoldConst("SELECT ABS(NULL)") // NULL handling
     testFoldConst("SELECT ABS('')") // Empty string handling
@@ -69,9 +69,9 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT ATAN(1) AS atan_case_1") //atan(1) = π/4
     testFoldConst("SELECT ATAN(0) AS atan_case_2") //atan(0) = 0
     testFoldConst("SELECT ATAN(-1) AS atan_case_3") //atan(-1)
-    testFoldConst("SELECT ATAN(1.5)") 
-    testFoldConst("SELECT ATAN(-1.5)") 
-    testFoldConst("SELECT ATAN(1E308)") 
+    testFoldConst("SELECT ATAN(1.5)")
+    testFoldConst("SELECT ATAN(-1.5)")
+    testFoldConst("SELECT ATAN(1E308)")
     testFoldConst("SELECT ATAN(-1E308)")
     testFoldConst("SELECT ATAN(NULL)") // NULL handling
     testFoldConst("SELECT ATAN(PI())") // PI input
@@ -84,9 +84,9 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT ATAN2(0, 1) AS atan2_case_2") //atan2(0, 1) = 0
     testFoldConst("SELECT ATAN2(1, 0) AS atan2_case_3") //atan2(1, 0) = π/2
     testFoldConst("SELECT ATAN2(0, 0) AS atan2_case_exception") //undefined 
(returns NULL or error)
-    testFoldConst("SELECT ATAN2(1.5, 1.5)") 
-    testFoldConst("SELECT ATAN2(-1.5, 1.5)") 
-    testFoldConst("SELECT ATAN2(1E308, 1E308)") 
+    testFoldConst("SELECT ATAN2(1.5, 1.5)")
+    testFoldConst("SELECT ATAN2(-1.5, 1.5)")
+    testFoldConst("SELECT ATAN2(1E308, 1E308)")
     testFoldConst("SELECT ATAN2(-1E308, 1E308)")
     testFoldConst("SELECT ATAN2(NULL, 1)") // NULL y
     testFoldConst("SELECT ATAN2(1, NULL)") // NULL x
@@ -98,7 +98,7 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT BIN(16) AS bin_case_2") //bin(16) = 10000
     testFoldConst("SELECT BIN(255) AS bin_case_3") //bin(255)
     testFoldConst("SELECT BIN(-1) AS bin_case_exception") //returns NULL or 
error in some databases
-    testFoldConst("SELECT BIN(1E308)") 
+    testFoldConst("SELECT BIN(1E308)")
     testFoldConst("SELECT BIN(-1E308)")
     testFoldConst("SELECT BIN(0)") // Zero case
     testFoldConst("SELECT BIN(NULL)") // NULL handling
@@ -112,7 +112,7 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT BIT_COUNT(16) AS bitcount_case_2") //bitcount(16) = 1
     testFoldConst("SELECT BIT_COUNT(255) AS bitcount_case_3") //bitcount(255) 
= 8
     testFoldConst("SELECT BIT_COUNT(-1) AS bitcount_case_exception")
-    testFoldConst("SELECT BIT_COUNT(1E308)") 
+    testFoldConst("SELECT BIT_COUNT(1E308)")
     testFoldConst("SELECT BIT_COUNT(-1E308)")
     testFoldConst("SELECT BIT_COUNT(0)") // Zero case
     testFoldConst("SELECT BIT_COUNT(NULL)") // NULL handling
@@ -138,7 +138,7 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT CEIL(-3.4) AS ceil_case_2")
     testFoldConst("SELECT CEIL(5.0) AS ceil_case_3")
     testFoldConst("SELECT CEIL(1E308) AS ceil_case_overflow")
-    testFoldConst("SELECT CEIL(1E308)") 
+    testFoldConst("SELECT CEIL(1E308)")
     testFoldConst("SELECT CEIL(-1E308)")
     testFoldConst("SELECT CEIL(NULL)") // NULL handling
     testFoldConst("SELECT CEIL(0)") // Zero case
@@ -157,7 +157,7 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT COALESCE(NULL, NULL, 7) AS coalesce_case_2")
     testFoldConst("SELECT COALESCE(3, 5) AS coalesce_case_3")
     testFoldConst("SELECT COALESCE(NULL, NULL) AS coalesce_case_4")
-    testFoldConst("SELECT COALESCE(1E308)") 
+    testFoldConst("SELECT COALESCE(1E308)")
     testFoldConst("SELECT COALESCE(-1E308)")
     testFoldConst("SELECT COALESCE(NULL, NULL, NULL)") // All NULL
     testFoldConst("SELECT COALESCE('', NULL, 'test')") // Empty string
@@ -316,6 +316,21 @@ suite("fold_constant_numeric_arithmatic") {
     testFoldConst("SELECT LN(0.1)") // Small decimal
     testFoldConst("SELECT LN(100)") // Larger number
 
+//dlog1 function cases
+    testFoldConst("SELECT dlog1(1)")
+    testFoldConst("SELECT dlog1(2.71828)")
+    testFoldConst("SELECT dlog1(10)")
+    testFoldConst("SELECT dlog1(1e10)")
+    testFoldConst("SELECT dlog1(0.1)")
+    testFoldConst("SELECT dlog1(0.001)")
+    testFoldConst("SELECT dlog1(1e-10)")
+    testFoldConst("SELECT dlog1(1e308)")
+    testFoldConst("SELECT dlog1(1e-308)")
+    testFoldConst("SELECT dlog1(0)")
+    testFoldConst("SELECT dlog1(-1)")
+    testFoldConst("SELECT dlog1(-10)")
+    testFoldConst("SELECT dlog1(NULL)")
+
 //Log function cases
     testFoldConst("SELECT log(100, 10), log(8, 2), log(1000, 10)")
     testFoldConst("SELECT LOG(NULL, 10)") // NULL number
diff --git 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
index e2dc9bf279b..626d8e87fab 100644
--- 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
+++ 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
@@ -19,7 +19,7 @@ suite("fold_constant_string_arithmatic") {
     sql "set enable_nereids_planner=true"
     sql "set enable_fallback_to_original_planner=false"
     sql "set enable_fold_constant_by_be=false"
-    
+
     // append_trailing_char_if_absent
     testFoldConst("select append_trailing_char_if_absent('', '!')")
     testFoldConst("select append_trailing_char_if_absent(12345, '!')")
@@ -50,7 +50,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select append_trailing_char_if_absent('こんにちは', '!')")
     testFoldConst("select append_trailing_char_if_absent('\n\t', '\n')")
     testFoldConst("select append_trailing_char_if_absent('こんにちは', 'ちは')")
-    
+
     // ascii
     testFoldConst("select ascii('!')")
     testFoldConst("select ascii('1')")
@@ -61,26 +61,26 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select ascii('안こ')")
     testFoldConst("select ascii('')")
     testFoldConst("select ascii('中')")
-    
+
     // bin
     testFoldConst("select bin(5)")
     testFoldConst("select bin(-5)")
     testFoldConst("select bin(9223372036854775807)")
     testFoldConst("select bin(9223372036854775808)")
     testFoldConst("select bin(-9223372036854775809)")
-    
+
     // bit_length
     testFoldConst("select bit_length('abc')")
     testFoldConst("select bit_length(cast('abc' as string))")
     testFoldConst("select bit_length('こんにちは世界')")
     testFoldConst("select bit_length('안녕하세요 세계!')")
     testFoldConst("select bit_length('')")
-    
+
     // char
     testFoldConst("select char(65)")
     testFoldConst("select char(-1)")
     testFoldConst("select char(65535)")
-    
+
     // character_length
     testFoldConst("select character_length(cast('Hello World' as string))")
     testFoldConst("select character_length('Hello World')")
@@ -105,7 +105,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select concat('你好', ' ', '世界')")
     testFoldConst("select concat('', '你好', ' ', '世界')")
     testFoldConst("select concat('你好', ' ', '世界', '')")
-    
+
     // concat_ws
     testFoldConst("select concat_ws('-', '2024', '09', '02')")
     testFoldConst("select concat_ws('', '2024', '09', '02')")
@@ -119,7 +119,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select concat_ws('or', 'd', NULL,'is')")
     testFoldConst("select concat_ws(' ', '你好', '世界')")
     testFoldConst("select concat_ws(' ', [])")
-    
+
     // elt
     testFoldConst("select elt(0, cast('hello' as string), cast('doris' as 
string))")
     testFoldConst("select elt(0, 'hello', 'doris')")
@@ -154,7 +154,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select field('=', '+', '=', '=', 'こ')")
     testFoldConst("select field('==', '+', '=', '==', 'こ')")
     testFoldConst("select field('=', '+', '==', '==', 'こ')")
-    
+
     // find_in_set
     testFoldConst("select find_in_set('a', null)")
     testFoldConst("select find_in_set('b', 'a,b,c')")
@@ -179,7 +179,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("SELECT find_in_set('','哈哈哈AAA')")
     testFoldConst("SELECT find_in_set(',','a,')")
     testFoldConst("SELECT find_in_set(',','哈哈哈AAA')")
-    
+
     // hex
     testFoldConst("select hex('@')")
     testFoldConst("select hex('1')")
@@ -199,12 +199,12 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select hex(cast('@' as string))")
     testFoldConst("select hex(cast('hello,doris' as string))")
     testFoldConst("select hex('hello,doris')")
-    
+
     // ifnull
     testFoldConst("select ifnull(null,3)")
     testFoldConst("select ifnull(3,null)")
     testFoldConst("select ifnull(null,null)")
-    
+
     // initcap
     testFoldConst("select initcap('AbC123abc abc.abc,?|abc')")
     testFoldConst("select initcap(cast('AbC123abc abc.abc,?|abc' as string))")
@@ -352,7 +352,6 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select initcap('⏩ fast')")
     testFoldConst("select initcap('<d83d><dd11>key')")
 
-
     // instr
     testFoldConst("select instr('上海天津北京杭州', '北京')")
     testFoldConst("select instr('abc', 'b')")
@@ -367,13 +366,13 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select instr(null, 'a')")
     testFoldConst("select instr(NULL, cast('a' as string))")
     testFoldConst("select instr('', 'World')")
-    
+
     // lcase
     testFoldConst("select lcase('AbC123')")
     testFoldConst("select lcase(cast('AbC123' as string))")
     testFoldConst("select lcase('上海天津北京杭州')")
     testFoldConst("select lcase('こんにちは')")
-    
+
     // left
     testFoldConst("select left(CAST('good morning' AS STRING), 120)")
     testFoldConst("select left(CAST('good morning' AS STRING), -5)")
@@ -396,7 +395,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select left('上海天津北京杭州', 5)")
     testFoldConst("select left('上海天津北京杭州', -5)")
     testFoldConst("select left('上海天津北京杭州', 0)")
-    
+
     // length
     testFoldConst("select length('你')")
     testFoldConst("select length('abc')")
@@ -426,13 +425,13 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select locate('北京', '上海天津北京杭州', -4)")
     testFoldConst("select locate('北京', '上海天津北京杭州', -5)")
     testFoldConst("select locate('2', '   123  ', 1)")
-    
+
     // lower
     testFoldConst("select lower('AbC123')")
     testFoldConst("select lower(cast('AbC123' as string))")
     testFoldConst("select lower(cast('Hello World' as string))")
     testFoldConst("select lower('Hello World')")
-    
+
     // lpad
     testFoldConst("select lpad(cast('hi' as string), 1, cast('xy' as string))")
     testFoldConst("select lpad(cast('hi' as string), 5, cast('xy' as string))")
@@ -444,7 +443,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select lpad(' ', 1, 'xy')")
     testFoldConst("select lpad(cast('北京' as string), 1, cast('杭州' as string))")
     testFoldConst("select lpad(cast('北京' as string), 5, cast('杭州' as string))")
-    
+
     // ltrim
     testFoldConst("select ltrim(' 11111', 11)")
     testFoldConst("select ltrim('11111 ', 11)")
@@ -457,7 +456,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select ltrim('Hello')")
     testFoldConst("select ltrim('  Hello World  ')")
     testFoldConst("select ltrim('  上海天津北京杭州  ')")
-    
+
     // md5
     testFoldConst("select md5(cast('Hello World' as string))")
     testFoldConst("select md5('Hello World')")
@@ -478,7 +477,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select money_format(-1123.456)")
     testFoldConst("select money_format(-17014116)")
     testFoldConst("select money_format(-truncate(1000,10))")
-    
+
     // not_null_or_empty
     testFoldConst("select not_null_or_empty('')")
     testFoldConst("select not_null_or_empty('a')")
@@ -489,7 +488,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select not_null_or_empty(NULL)")
     testFoldConst("select not_null_or_empty('\b')")
     testFoldConst("select not_null_or_empty(' \b')")
-    
+
     // null_or_empty
     testFoldConst("select null_or_empty('')")
     testFoldConst("select null_or_empty('a')")
@@ -499,7 +498,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select null_or_empty(NULL)")
     testFoldConst("select null_or_empty('\b')")
     testFoldConst("select null_or_empty(' \b')")
-    
+
     // overlay
     testFoldConst("select overlay('abcdef', 3, 2, '123')")
     testFoldConst("select overlay('abcdef', 10, 20, '123')")
@@ -512,8 +511,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select overlay('עברית', 1, 1, '😀')")
     testFoldConst("select overlay('a😀bc', 2, 1, 'x')")
     testFoldConst("select overlay('日本語', 2, 2, 'xyz')")
- 
-    
+
     // parse_url
     testFoldConst("select 
parse_url(cast('http://www.example.com/path?query=abc' as string), cast('HOST' 
as string))")
     testFoldConst("select parse_url('http://www.example.com/path?query=abc', 
'HOST')")
@@ -521,6 +519,122 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select parse_url('http://www.example.com/path?query=こんにちは', 
'QUERY')")
     testFoldConst("select 
parse_url(\"http://www.example.com/path?query=a\b\'\", 'QUERY')")
     testFoldConst("select 
parse_url(\"http://www.example.com/path.query=a\b\'\", 'QUERY')")
+    testFoldConst("select PARSE_URL('http://example.com', 'PROTOCOL')")
+    testFoldConst("select PARSE_URL('http://example.com', 'protocol')")
+    testFoldConst("select PARSE_URL('http://example.com', 'Protocol')")
+    testFoldConst("select PARSE_URL('http://example.com', 'HOST')")
+    testFoldConst("select PARSE_URL('http://example.com', 'host')")
+    testFoldConst("select PARSE_URL('http://example.com', 'Host')")
+    testFoldConst("select PARSE_URL('http://example.com', 'PATH')")
+    testFoldConst("select PARSE_URL('http://example.com/path/to/resource', 
'path')")
+    testFoldConst("select PARSE_URL('http://example.com/path/to/resource', 
'Path')")
+    testFoldConst("select PARSE_URL('http://example.com/path/to/resource', 
'PATH')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource?query=string', 'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource?query=string', 'query')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource?query=string', 'Query')")
+    testFoldConst("select PARSE_URL('http://user:p...@example.com', 
'AUTHORITY')")
+    testFoldConst("select PARSE_URL('http://user:p...@example.com', 
'authority')")
+    testFoldConst("select PARSE_URL('http://user:p...@example.com', 
'Authority')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'FILE')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'file')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'File')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'USERINFO')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'userinfo')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'UserInfo')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com:8080/path/to/resource', 'PORT')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com:8080/path/to/resource', 'port')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com:8080/path/to/resource', 'Port')")
+    testFoldConst("select PARSE_URL('invalid-url', 'PROTOCOL')")
+    testFoldConst("select PARSE_URL('invalid-url', 'HOST')")
+    testFoldConst("select PARSE_URL('invalid-url', 'PATH')")
+    testFoldConst("select PARSE_URL('', 'PROTOCOL')")
+    testFoldConst("select PARSE_URL(null, 'PROTOCOL')")
+    testFoldConst("select PARSE_URL('https://example.com', 'PROTOCOL')")
+    testFoldConst("select PARSE_URL('ftp://example.com', 'PROTOCOL')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path?query=1#fragment', 'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'AUTHORITY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'FILE')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com/path/to/resource', 'USERINFO')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@example.com:8080/path/to/resource', 'PORT')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource?query=string&another=param', 
'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource?query=string&another=param', 
'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource?query=string&another=param', 
'QUERY')")
+    testFoldConst("select PARSE_URL('http://user:p...@www.baidu.com', 
'USERINFO')")
+    testFoldConst("select PARSE_URL('http://user:p...@www.baidu.com', 
'userinfo')")
+    testFoldConst("select PARSE_URL('http://user:p...@www.baidu.com', 
'UserInfo')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource', 'PATH')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource', 'path')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource', 'Path')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource?query=string', 
'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource?query=string', 
'query')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource?query=string', 
'Query')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com:8080/path/to/resource', 'PORT')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com:8080/path/to/resource', 'port')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com:8080/path/to/resource', 'Port')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'PATH')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'path')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'Path')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'query')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'Query')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'AUTHORITY')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'authority')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'Authority')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'FILE')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'file')")
+    testFoldConst("select 
PARSE_URL('http://example.com/path/to/resource#fragment', 'File')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource?query=string&another=param#fragment',
 'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource?query=string&another=param#fragment',
 'query')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.baidu.com/path/to/resource?query=string&another=param#fragment',
 'Query')")
+    testFoldConst("select PARSE_URL('http://user:p...@www.baidu.com?a=b', 
'USERINFO')")
+    testFoldConst("select 
PARSE_URL('https://www.example.com/path/to/file?query=string#fragment', 
'protocol')")
+    testFoldConst("select 
PARSE_URL('ftp://username:password@hostname:21/path/to/file', 'Host')")
+    testFoldConst("select 
PARSE_URL('http://example.com:8080/path?query=string#frag', 'path')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'ref')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'AUTHORITY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'file')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'USERINFO')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path?query=string#frag', 'port')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'QUERY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Protocol')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'host')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Path')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Ref')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Authority')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'File')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Userinfo')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Port')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path?query=string#frag', 'Query')")
+    testFoldConst("select PARSE_URL('', 'HOST')")
+    testFoldConst("select PARSE_URL(null, 'HOST')")
+    testFoldConst("select PARSE_URL('not a url', 'HOST')")
+    testFoldConst("select PARSE_URL('http://www.test.com', 'HOST')")
+    testFoldConst("select PARSE_URL('https://www.test.com', 'protocol')")
+    testFoldConst("select 
PARSE_URL('ftp://username:password@hostname/path/to/file', 'userinfo')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file', 'port')")
+    testFoldConst("select 
PARSE_URL('http://www.test.com/path/to/file?query=string', 'query')")
+    testFoldConst("select 
PARSE_URL('http://www.test.com/path/to/file#fragment', 'ref')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com/path/to/file', 'authority')")
+    testFoldConst("select PARSE_URL('http://www.test.com/path/to/file', 
'file')")
+    testFoldConst("select PARSE_URL('http://www.test.com/', 'path')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'protocol')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'host')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'path')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'ref')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'authority')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'file')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'userinfo')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'port')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'query')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'PROTOcol')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'HOST')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'PATH')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'REF')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'AUTHORITY')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'FILE')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'USERINFO')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'PORT')")
+    testFoldConst("select 
PARSE_URL('http://user:p...@www.test.com:8080/path/to/file?query=string#fragment',
 'QUERY')")
 
     // repeat
     testFoldConst("select repeat('a', 0)")
@@ -538,7 +652,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select repeat('', 3)")
     testFoldConst("select repeat(' ', 3)")
     testFoldConst("select repeat('前进',4)")
-    
+
     // replace
     testFoldConst("select replace(cast('Hello World' as string), '', 
cast('Everyone' as string))")
     testFoldConst("select replace(cast('Hello World' as string), cast('World' 
as string), '')")
@@ -551,12 +665,12 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select replace('https://doris.apache.org:9090', ':9090', 
'')")
     testFoldConst("select replace('https://doris.apache.org:9090', '', 
'new_str')")
     testFoldConst("select replace('https://doris.apache.org:9090', './*', 
'new_str')")
-    
+
     // reverse
     testFoldConst("select reverse('Hello')")
     testFoldConst("select reverse('')")
     testFoldConst("select reverse('こんにちは')")
-    
+
     // right
     testFoldConst("select right(CAST('good morning' AS STRING), NULL)")
     testFoldConst("select right(cast('Hello' as string), 10)")
@@ -575,13 +689,13 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select right('Hello World', 5)")
     testFoldConst("select right('Hello World', 0)")
     testFoldConst("select right(NULL, 1)")
-    
+
     // rpad
     testFoldConst("select rpad(cast('hi' as string), 1, cast('xy' as string))")
     testFoldConst("select rpad(cast('hi' as string), 5, cast('xy' as string))")
     testFoldConst("select rpad('hi', 1, 'xy')")
     testFoldConst("select rpad('hi', 5, 'xy')")
-    
+
     // rtrim
     testFoldConst("select rtrim(' 11111', 11)")
     testFoldConst("select rtrim('11111 ', 11)")
@@ -591,7 +705,70 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select rtrim(cast('  Hello World  ' as string))")
     testFoldConst("select rtrim('Hello')")
     testFoldConst("select rtrim('  Hello World  ')")
-    
+    testFoldConst("select rtrim('abc ')")
+    testFoldConst("select rtrim('abc,,,', ',')")
+    testFoldConst("select rtrim('Aaabc', 'A')")
+    testFoldConst("select rtrim('Aaabc', 'c')")
+    testFoldConst("select rtrim('abc;;;', ';')")
+    testFoldConst("select rtrim('abc, ', ' ,')")
+    testFoldConst("select rtrim(null)")
+    testFoldConst("select rtrim('abc', null)")
+    testFoldConst("select rtrim(null, null)")
+    testFoldConst("select rtrim('abcxyz', 'xyz')")
+    testFoldConst("select rtrim('abcxyxzy', 'xyz')")
+    testFoldConst("select rtrim('')")
+    testFoldConst("select rtrim('', 'a')")
+    testFoldConst("select rtrim(123)")
+    testFoldConst("select rtrim(0)")
+    testFoldConst("select rtrim(true)")
+    testFoldConst("select rtrim('aaaa', 'a')")
+    testFoldConst("select rtrim(' ', ' ')")
+    testFoldConst("select rtrim(substring('abcxx', 1, 4), 'x')")
+    testFoldConst("select rtrim(concat('abc', ' '), ' ')")
+    testFoldConst("select rtrim('中文中', '中')")
+    testFoldConst("select rtrim('中文 ', ' ')")
+    testFoldConst("select rtrim('abc<d83d><dc3c>', '<d83d><dc3c>')")
+    testFoldConst("select rtrim('abc!!!', '!')")
+    testFoldConst("select rtrim('abc123', '123')")
+    testFoldConst("select rtrim('abxyd', 'xy')")
+    testFoldConst("select rtrim('abcabc', 'abc')")
+    testFoldConst("select rtrim(' abc ')")
+    testFoldConst("select rtrim('a bc ', 'c')")
+    testFoldConst("select rtrim('a bc ', ' c')")
+    testFoldConst("select rtrim('abcabab', 'ab')")
+    testFoldConst("select rtrim('abc', 'x')")
+    testFoldConst("select rtrim('abc', 'c')")
+    testFoldConst("select rtrim('a1!B2@c3#', '3#')")
+    testFoldConst("select rtrim(' test ')")
+    testFoldConst("select rtrim('xyzzyxxyz', 'xyz')")
+    testFoldConst("select rtrim('123456123', '123')")
+    testFoldConst("select rtrim('abc,.,', '.,')")
+    testFoldConst("select rtrim('abc[][]', '[]')")
+    testFoldConst("select rtrim('aAaaA', 'A')")
+    testFoldConst("select rtrim('abc', '')")
+    testFoldConst("select rtrim('abc', 'bc')")
+    testFoldConst("select rtrim('abcxyx', 'xy')")
+    testFoldConst("select rtrim('abbaexampleabba', 'ab')")
+    testFoldConst("select rtrim('aBcAb', 'Ab')")
+    testFoldConst("select rtrim('12123412', '12')")
+    testFoldConst("select rtrim('abc', 'abc')")
+    testFoldConst("select rtrim('aaaa', 'a')")
+    testFoldConst("select rtrim('a', 'a')")
+    testFoldConst("select rtrim('aaaa', 'aa')")
+    testFoldConst("select rtrim(';;abc;;', ';')")
+    testFoldConst("select rtrim(' test ')")
+    testFoldConst("select rtrim('xyzzyxxyz', 'xyz')")
+    testFoldConst("select rtrim('123456123', '123')")
+    testFoldConst("select rtrim('.,abc,.,', '.,')")
+    testFoldConst("select rtrim('[][abc][]', '[]')")
+    testFoldConst("select rtrim('<d83d><dc3c>abc<d83d><dc3c>', 
'<d83d><dc3c>')")
+    testFoldConst("select rtrim('aAaaA', 'a')")
+    testFoldConst("SELECT RTRIM('こんにちは!😊😊', '😊')")
+    testFoldConst("SELECT RTRIM('안녕하세요.ㅎㅎ', 'ㅎ')")
+    testFoldConst("SELECT RTRIM('¡Hola!😎😎', '😎')")
+    testFoldConst("SELECT RTRIM('Bonjour.ée', 'é')")
+    testFoldConst("SELECT RTRIM('こんにちは! Hello! 😀😀 你好呀~呀', '呀😀')")
+
     // space
     testFoldConst("select space(-5)")
     testFoldConst("select space(5)")
@@ -636,7 +813,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("SELECT 
split_by_string('a..b\$\$c||d((e))f[[g{{h^^i??j**k++l\\\\m','**')")
     testFoldConst("SELECT 
split_by_string('a..b\$\$c||d((e))f[[g{{h^^i??j**k++l\\\\m','++')")
     testFoldConst("SELECT 
split_by_string('a..b\$\$c||d((e))f[[g{{h^^i??j**k++l\\\\m','\\\\')")
-    
+
     // split_part
     testFoldConst("select split_part('a,b,c', '', -2)")
     testFoldConst("select split_part('a,b,c', '', -1)")
@@ -746,7 +923,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select starts_with(' hello world','world')")
     testFoldConst("select starts_with('上海天津北京杭州','上海')")
     testFoldConst("select starts_with('上海天津北京杭州','北京')")
-    
+
     // strcmp
     testFoldConst("select strcmp('a', 'abc')")
     testFoldConst("select strcmp('abc', 'abc')")
@@ -760,7 +937,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select strcmp(cast('abc' as string), cast('abd' as 
string))")
     testFoldConst("select strcmp(cast('abc' as string), NULL)")
     testFoldConst("select strcmp(CAST('abcd' AS STRING), CAST('abc' AS 
STRING))")
-    
+
     // strleft
     testFoldConst("select strleft('good morning', 120)")
     testFoldConst("select strleft('good morning', -5)")
@@ -770,7 +947,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select strleft(' Hello World', 5)")
     testFoldConst("select strleft('Hello World ', 50)")
     testFoldConst("select strleft(NULL, 1)")
-    
+
     // strright
     testFoldConst("select strright('good morning', NULL)")
     testFoldConst("select strright('Hello doris', 120)")
@@ -780,7 +957,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select strright(' Hello World', 5)")
     testFoldConst("select strright('Hello World  ', 5)")
     testFoldConst("select strright(NULL, 1)")
-    
+
     // sub_replace
     testFoldConst("select sub_replace(CAST('doris' AS STRING), CAST('***' AS 
STRING), 1, 2)")
     testFoldConst("select sub_replace(CAST('doris' AS STRING), CAST('***' AS 
STRING), 1, 2)")
@@ -793,7 +970,7 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select sub_replace(CAST('doris' AS STRING), CAST('***' AS 
STRING), -1, 2)")
     testFoldConst("select sub_replace('上海天津北京杭州', '天津', 3, 4)")
     testFoldConst("select sub_replace('上海天津北京杭州', '天津', 30, 4)")
-    
+
     // substr
     testFoldConst("select substr('a',0,1)")
     testFoldConst("select substr('a',-1,1)")
@@ -947,4 +1124,410 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select 
url_encode('http://www.apache.org/licenses/LICENSE-2.0')")
     testFoldConst("select url_encode(' 
http://www.apache.org/licenses/LICENSE-2.0 ')")
 
+    // extract_url_parameter
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', null)")
+    testFoldConst("select extract_url_parameter(null, 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'a&b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'D')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'f')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'F')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'g')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'G')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'g')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'G')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'h')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'H')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'i')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'I')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'i')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'I')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'j')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'J')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'k')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'K')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'k')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'K')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'l')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'L')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'm')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'M')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
null)")
+    testFoldConst("select extract_url_parameter('http://www.example.com?a=b', 
'a')")
+    testFoldConst("select extract_url_parameter('http://www.example.com?A=B', 
'a')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?param=value&another=example', 
'param')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?PARAM=value&ANOTHER=example', 
'param')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com/path/to/file?query=string', 
'query')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com/path/to/file?QUERY=string', 
'Query')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com/path?query=string#frag', 
'query')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com/path?QUERY=string#frag', 
'Query')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key=value', 'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?KEY=value', 'Key')")
+    testFoldConst("select extract_url_parameter('http://www.test.com/', 
'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key1=value1&key2=value2', 'key1')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?KEY1=value1&KEY2=value2', 'Key1')")
+    testFoldConst("select extract_url_parameter('', 'key')")
+    testFoldConst("select extract_url_parameter(null, 'key')")
+    testFoldConst("select extract_url_parameter('not a url', 'key')")
+    testFoldConst("select extract_url_parameter('http://www.test.com/?key=', 
'key')")
+    testFoldConst("select extract_url_parameter('http://www.test.com/?key', 
'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key=value&key=value2', 'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?KEY=value&KEY=value2', 'Key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key1=value1&key2=value2&key3=value3',
 'key2')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?KEY1=value1&KEY2=value2&KEY3=value3',
 'Key2')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?param1=value1&param2=value2',
 'param1')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?PARAM1=value1&PARAM2=value2',
 'Param1')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?param=value&another=example',
 'param')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?PARAM=value&ANOTHER=example',
 'Param')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?query=string#fragment',
 'query')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?QUERY=string#fragment',
 'Query')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?param1=value1&param2=value2#fragment',
 'param2')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?PARAM1=value1&PARAM2=value2#fragment',
 'Param2')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?query=string#frag',
 'query')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?QUERY=string#frag',
 'Query')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key=value&key=value2', 'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?KEY=value&KEY=value2', 'Key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key=value&another=value2', 
'another')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?KEY=value&ANOTHER=value2', 
'Another')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?query=string&query=string2',
 'query')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?QUERY=string&QUERY=string2',
 'Query')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?param=value&another=example&another=example2',
 'another')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?PARAM=value&ANOTHER=example&ANOTHER=example2',
 'Another')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?param=value&another=example&another=example2&param=value2',
 'param')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?PARAM=value&ANOTHER=example&ANOTHER=example2&PARAM=value2',
 'Param')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?param=value&another=example&another=example2&param=value2',
 'missing')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/file?PARAM=value&ANOTHER=example&ANOTHER=example2&PARAM=value2',
 'Missing')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'a')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'A')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'Aa')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b&c=d', 
'c')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b&c=d', 
'C')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b&c=D', 
'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b&c=D', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'a')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'A')")
+    testFoldConst("select extract_url_parameter('', 'a')")
+    testFoldConst("select extract_url_parameter(null, 'a')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'a')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'A')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b', 
'a')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b', 
'A')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b&c=d', 
'c')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b&c=d', 
'C')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b&c=D', 
'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b', 
'b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b', 
'B')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d', 
'b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d', 
'B')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=D', 
'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'b')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'B')")
+    testFoldConst("select extract_url_parameter('', 'b')")
+    testFoldConst("select extract_url_parameter(null, 'b')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'b')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/?a=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/?a=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d&e=f',
 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d&e=f',
 'E')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d&e=f', 
'e')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d&e=f', 
'E')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'a')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'A')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'α')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'β')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'中文')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'日本語')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'한국어')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'русский')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'עברית')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'😀')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b', 
'a😀b')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b&c=d', 
'c')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b&c=d', 
'C')")
+    testFoldConst("select extract_url_parameter('http://example.com?a=b&c=D', 
'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com?a=b&c=D', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'a')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'A')")
+    testFoldConst("select extract_url_parameter('', 'a')")
+    testFoldConst("select extract_url_parameter(null, 'a')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'a')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'A')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b', 
'a')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b', 
'A')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b&c=d', 
'c')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b&c=d', 
'C')")
+    testFoldConst("select extract_url_parameter('http://example.com/?a=b&c=D', 
'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b', 
'b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b', 
'B')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d', 
'b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d', 
'B')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=D', 
'd')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=D', 'd')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'b')")
+    testFoldConst("select extract_url_parameter('invalid-url', 'B')")
+    testFoldConst("select extract_url_parameter('', 'b')")
+    testFoldConst("select extract_url_parameter(null, 'b')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'b')")
+    testFoldConst("select extract_url_parameter('http://example.com', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/?a=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/?a=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d&e=f',
 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@example.com/path/to/resource?a=b&c=d&e=f',
 'E')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d&e=f', 
'e')")
+    testFoldConst("select 
extract_url_parameter('http://example.com:8080/path/to/resource?a=b&c=d&e=f', 
'E')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=😀b', '😀b')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=😀b', '😀B')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=αβγ', 'αβγ')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=αβγ', 'ΑΒΓ')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=中文', '中文')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=中文', '中文')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=日本語', '日本語')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=日本語', '日本語')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=한국어', '한국어')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=한국어', '한국어')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=русский', 
'русский')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=русский', 
'русский')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=עברית', 'עברית')")
+    testFoldConst("select 
extract_url_parameter('http://example.com/path/to/resource?a=עברית', 'עברית')")
+    testFoldConst("select extract_url_parameter('http://www.example.com?a=b', 
'a')")
+    testFoldConst("select extract_url_parameter('http://www.example.com?A=B', 
'a')")
+    testFoldConst("select extract_url_parameter('http://www.example.com?α=β', 
'α')")
+    testFoldConst("select extract_url_parameter('http://www.example.com?你=好', 
'你')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?こ=んにちは', 'こ')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?안녕=하세요', '안녕')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?привет=мир', 'привет')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?שָׁלוֹם=עֲלֵיכֶם', 'שָׁלוֹם')")
+    testFoldConst("select extract_url_parameter('http://www.example.com?😊=👍', 
'😊')")
+    testFoldConst("select 
extract_url_parameter('http://www.example.com?%20key=value', '%20key')")
+    testFoldConst("select extract_url_parameter('http://www.test.com/', 
'key')")
+    testFoldConst("select extract_url_parameter('', 'key')")
+    testFoldConst("select extract_url_parameter(null, 'key')")
+    testFoldConst("select extract_url_parameter('not a url', 'key')")
+    testFoldConst("select extract_url_parameter('http://www.test.com/?key=', 
'key')")
+    testFoldConst("select extract_url_parameter('http://www.test.com/?key', 
'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key=value&key=value2', 'key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?α=β&α=γ', 'α')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?你=好&你=世界', '你')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?こ=んにちは&こ=さようなら', 'こ')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?안녕=하세요&안녕=감사합니다', '안녕')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?привет=мир&привет=мир2', 'привет')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?שָׁלוֹם=עֲלֵיכֶם&שָׁלוֹם=שלום', 
'שָׁלוֹם')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?😊=👍&😊=😊', '😊')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?%20key=value&%20key=value2', 
'%20key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?key1=value1&key2=value2', 'key1')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?α=value1&β=value2', 'α')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?你=value1&好=value2', '你')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?こ=value1&んにちは=value2', 'こ')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?안녕=value1&하세요=value2', '안녕')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?привет=value1&мир=value2', 
'привет')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?שָׁלוֹם=value1&עֲלֵיכֶם=value2', 
'שָׁלוֹם')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?😊=value1&👍=value2', '😊')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/?%20key=value1&key=value2', 
'%20key')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?param=value&another=example',
 'param')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?PARAM=value&ANOTHER=example',
 'Param')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?α=value&β=example', 
'α')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?你=value&好=example', 
'你')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?こ=value&んにちは=example',
 'こ')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?안녕=value&하세요=example',
 '안녕')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?привет=value&мир=example',
 'привет')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?שָׁלוֹם=value&עֲלֵיכֶם=example',
 'שָׁלוֹם')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?😊=value&👍=example', 
'😊')")
+    testFoldConst("select 
extract_url_parameter('http://www.test.com/path/to/resource?%20key=value&query=string',
 '%20key')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?query=string#frag',
 'query')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?QUERY=string#frag',
 'Query')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?α=value#frag',
 'α')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?你=value#frag',
 '你')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?こ=value#frag',
 'こ')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?안녕=value#frag',
 '안녕')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?привет=value#frag',
 'привет')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?שָׁלוֹם=value#frag',
 'שָׁלוֹם')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.test.com:8080/path/to/file?😊=value#frag',
 '😊')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'A')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'B')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', null)")
+    testFoldConst("select extract_url_parameter(null, 'a')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b', 'a&b')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'D')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'f')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'F')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'g')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', 'G')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'g')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'G')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'h')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'H')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'i')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', 'I')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'i')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'I')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'j')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'J')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'k')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'K')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
'')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j', 
null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'k')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'K')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'l')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'L')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'm')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'M')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
'')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?a=b&c=d&e=f&g=h&i=j&k=l', 
null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b', '🌍')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b', '🌎')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?α=b', 'α')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?α=b', 'Α')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?中文=b', '中文')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?日本語=b', '日本語')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?한글=b', '한글')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?русский=b', 'русский')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?עברית=b', 'עברית')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', '🌍')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', 'c')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', 'C')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', 'd')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', 'D')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', 'e')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', 'E')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', 'f')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', 'F')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', 'g')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', 'G')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', 'g')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', 'G')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', 'h')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', 'H')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', 'i')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', 'I')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', '')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h', null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'i')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'I')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'j')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'J')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'k')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'K')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
'')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j', 
null)")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'k')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'K')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'l')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'L')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'm')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'M')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
'')")
+    testFoldConst("select 
extract_url_parameter('http://user:p...@www.baidu.com?🌍=b&c=d&e=f&g=h&i=j&k=l', 
null)")
+
 }
+


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org


Reply via email to