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

lihaopeng pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 4506457730c [fix](ip) fix ip nullable param without check (#44700) 
(#46250)
4506457730c is described below

commit 4506457730c5d055e6af597be6507521ccf7eac4
Author: amory <wangqian...@selectdb.com>
AuthorDate: Fri Jan 3 10:48:43 2025 +0800

    [fix](ip) fix ip nullable param without check (#44700) (#46250)
    
    if we use ipv6_cidr_to_range function with nullable func which with
    invalid ipv6 will make be core
    ```
    mysql> select id, ipv6_cidr_to_range(nullable(''), 32) from 
fn_test_ip_nullable order by id;
    ```
    
    ### What problem does this PR solve?
    
    
    Related PR: #44700
---
 be/src/vec/functions/function_ip.h                 |  65 +++----
 .../nereids_function_p0/scalar_function/IP.out     | 204 +++++++++++++++++++++
 .../nereids_function_p0/scalar_function/IP.groovy  |  23 ++-
 .../test_ipv6_cidr_to_range_function.groovy        |  12 +-
 4 files changed, 253 insertions(+), 51 deletions(-)

diff --git a/be/src/vec/functions/function_ip.h 
b/be/src/vec/functions/function_ip.h
index 0f22fbda043..a212c4130ca 100644
--- a/be/src/vec/functions/function_ip.h
+++ b/be/src/vec/functions/function_ip.h
@@ -955,6 +955,11 @@ public:
     }
 };
 
+/**
+ * this function accepts two arguments: an IPv6 address and a CIDR mask
+ *  IPv6 address can be either ipv6 type or string type as ipv6 string address
+ *  FE: PropagateNullable is used to handle nullable columns
+ */
 class FunctionIPv6CIDRToRange : public IFunction {
 public:
     static constexpr auto name = "ipv6_cidr_to_range";
@@ -986,12 +991,14 @@ public:
 
         if (addr_type.is_ipv6()) {
             const auto* ipv6_addr_column = assert_cast<const 
ColumnIPv6*>(addr_column.get());
-            col_res = execute_impl<ColumnIPv6>(*ipv6_addr_column, *cidr_col, 
input_rows_count,
-                                               add_col_const, col_const);
+            col_res = execute_impl(*ipv6_addr_column, *cidr_col, 
input_rows_count, add_col_const,
+                                   col_const);
         } else if (addr_type.is_string()) {
-            const auto* str_addr_column = assert_cast<const 
ColumnString*>(addr_column.get());
-            col_res = execute_impl<ColumnString>(*str_addr_column, *cidr_col, 
input_rows_count,
-                                                 add_col_const, col_const);
+            ColumnPtr col_ipv6 =
+                    
convert_to_ipv6<IPConvertExceptionMode::Throw>(addr_column, nullptr);
+            const auto* ipv6_addr_column = assert_cast<const 
ColumnIPv6*>(col_ipv6.get());
+            col_res = execute_impl(*ipv6_addr_column, *cidr_col, 
input_rows_count, add_col_const,
+                                   col_const);
         } else {
             return Status::RuntimeError(
                     "Illegal column {} of argument of function {}, Expected 
IPv6 or String",
@@ -1002,8 +1009,7 @@ public:
         return Status::OK();
     }
 
-    template <typename FromColumn>
-    static ColumnPtr execute_impl(const FromColumn& from_column, const 
ColumnInt16& cidr_column,
+    static ColumnPtr execute_impl(const ColumnIPv6& from_column, const 
ColumnInt16& cidr_column,
                                   size_t input_rows_count, bool is_addr_const 
= false,
                                   bool is_cidr_const = false) {
         auto col_res_lower_range = ColumnIPv6::create(input_rows_count, 0);
@@ -1020,18 +1026,9 @@ public:
                     throw Exception(ErrorCode::INVALID_ARGUMENT, "Illegal cidr 
value '{}'",
                                     std::to_string(cidr));
                 }
-                if constexpr (std::is_same_v<FromColumn, ColumnString>) {
-                    // 16 bytes ipv6 string is stored in big-endian byte order
-                    // so transfer to little-endian firstly
-                    auto* src_data = 
const_cast<char*>(from_column.get_data_at(0).data);
-                    std::reverse(src_data, src_data + IPV6_BINARY_LENGTH);
-                    apply_cidr_mask(src_data, 
reinterpret_cast<char*>(&vec_res_lower_range[i]),
-                                    
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
-                } else {
-                    apply_cidr_mask(from_column.get_data_at(0).data,
-                                    
reinterpret_cast<char*>(&vec_res_lower_range[i]),
-                                    
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
-                }
+                apply_cidr_mask(from_column.get_data_at(0).data,
+                                
reinterpret_cast<char*>(&vec_res_lower_range[i]),
+                                
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
             }
         } else if (is_cidr_const) {
             auto cidr = cidr_column.get_int(0);
@@ -1040,18 +1037,9 @@ public:
                                 std::to_string(cidr));
             }
             for (size_t i = 0; i < input_rows_count; ++i) {
-                if constexpr (std::is_same_v<FromColumn, ColumnString>) {
-                    // 16 bytes ipv6 string is stored in big-endian byte order
-                    // so transfer to little-endian firstly
-                    auto* src_data = 
const_cast<char*>(from_column.get_data_at(i).data);
-                    std::reverse(src_data, src_data + IPV6_BINARY_LENGTH);
-                    apply_cidr_mask(src_data, 
reinterpret_cast<char*>(&vec_res_lower_range[i]),
-                                    
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
-                } else {
-                    apply_cidr_mask(from_column.get_data_at(i).data,
-                                    
reinterpret_cast<char*>(&vec_res_lower_range[i]),
-                                    
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
-                }
+                apply_cidr_mask(from_column.get_data_at(i).data,
+                                
reinterpret_cast<char*>(&vec_res_lower_range[i]),
+                                
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
             }
         } else {
             for (size_t i = 0; i < input_rows_count; ++i) {
@@ -1060,18 +1048,9 @@ public:
                     throw Exception(ErrorCode::INVALID_ARGUMENT, "Illegal cidr 
value '{}'",
                                     std::to_string(cidr));
                 }
-                if constexpr (std::is_same_v<FromColumn, ColumnString>) {
-                    // 16 bytes ipv6 string is stored in big-endian byte order
-                    // so transfer to little-endian firstly
-                    auto* src_data = 
const_cast<char*>(from_column.get_data_at(i).data);
-                    std::reverse(src_data, src_data + IPV6_BINARY_LENGTH);
-                    apply_cidr_mask(src_data, 
reinterpret_cast<char*>(&vec_res_lower_range[i]),
-                                    
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
-                } else {
-                    apply_cidr_mask(from_column.get_data_at(i).data,
-                                    
reinterpret_cast<char*>(&vec_res_lower_range[i]),
-                                    
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
-                }
+                apply_cidr_mask(from_column.get_data_at(i).data,
+                                
reinterpret_cast<char*>(&vec_res_lower_range[i]),
+                                
reinterpret_cast<char*>(&vec_res_upper_range[i]), cidr);
             }
         }
         return ColumnStruct::create(
diff --git a/regression-test/data/nereids_function_p0/scalar_function/IP.out 
b/regression-test/data/nereids_function_p0/scalar_function/IP.out
index 5b44453ceb6..af146b66223 100644
--- a/regression-test/data/nereids_function_p0/scalar_function/IP.out
+++ b/regression-test/data/nereids_function_p0/scalar_function/IP.out
@@ -410,6 +410,108 @@
 99     {"min":"224.0.0.0", "max":"224.0.255.255"}
 100    {"min":"224.0.0.0", "max":"224.0.255.255"}
 
+-- !sql_cidr_ipv6_nullable_ --
+1      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+2      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+3      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+4      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+5      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+6      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+7      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+8      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+9      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+10     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+11     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+12     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+13     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+14     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+15     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+16     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+17     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+18     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+19     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+20     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+21     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+22     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+23     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+24     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+25     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+26     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+27     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+28     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+29     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+30     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+31     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+32     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+33     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+34     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+35     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+36     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+37     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+38     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+39     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+40     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+41     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+42     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+43     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+44     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+45     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+46     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+47     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+48     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+49     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+50     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+51     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+52     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+53     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+54     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+55     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+56     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+57     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+58     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+59     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+60     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+61     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+62     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+63     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+64     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+65     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+66     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+67     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+68     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+69     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+70     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+71     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+72     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+73     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+74     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+75     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+76     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+77     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+78     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+79     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+80     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+81     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+82     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+83     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+84     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+85     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+86     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+87     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+88     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+89     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+90     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+91     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+92     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+93     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+94     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+95     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+96     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+97     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+98     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+99     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+100    {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+
 -- !sql_num2string_ipv6 --
 1      ::1
 2      fc00::
@@ -6121,6 +6223,108 @@
 99     {"min":"224.0.0.0", "max":"224.0.255.255"}
 100    {"min":"224.0.0.0", "max":"224.0.255.255"}
 
+-- !sql_not_null_cidr_ipv6_nullable_ --
+1      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+2      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+3      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+4      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+5      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+6      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+7      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+8      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+9      {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+10     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+11     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+12     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+13     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+14     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+15     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+16     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+17     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+18     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+19     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+20     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+21     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+22     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+23     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+24     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+25     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+26     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+27     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+28     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+29     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+30     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+31     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+32     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+33     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+34     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+35     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+36     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+37     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+38     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+39     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+40     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+41     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+42     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+43     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+44     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+45     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+46     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+47     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+48     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+49     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+50     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+51     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+52     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+53     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+54     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+55     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+56     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+57     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+58     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+59     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+60     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+61     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+62     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+63     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+64     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+65     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+66     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+67     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+68     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+69     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+70     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+71     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+72     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+73     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+74     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+75     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+76     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+77     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+78     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+79     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+80     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+81     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+82     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+83     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+84     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+85     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+86     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+87     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+88     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+89     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+90     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+91     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+92     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+93     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+94     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+95     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+96     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+97     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+98     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+99     {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+100    {"min":"::", "max":"::ffff:ffff:ffff:ffff:ffff:ffff"}
+
 -- !sql_not_null_ipv6_string_to_num --
 1      00000000000000000000000000000001
 2      FC000000000000000000000000000000
diff --git 
a/regression-test/suites/nereids_function_p0/scalar_function/IP.groovy 
b/regression-test/suites/nereids_function_p0/scalar_function/IP.groovy
index 9cbdccbe788..a1c1d00caa2 100644
--- a/regression-test/suites/nereids_function_p0/scalar_function/IP.groovy
+++ b/regression-test/suites/nereids_function_p0/scalar_function/IP.groovy
@@ -30,7 +30,16 @@ suite("nereids_scalar_fn_IP") {
     qt_sql_cidr_ipv6_all """ select id, ipv6_cidr_to_range(ip6, 16) from 
fn_test_ip_nullable order by id; """
     qt_sql_cidr_ipv4_all """ select id, ipv4_cidr_to_range(ip4, 16) from 
fn_test_ip_nullable order by id; """
 
-
+    // test nullable param
+    qt_sql_cidr_ipv6_nullable_ "select id, ipv6_cidr_to_range(to_ipv6('::'), 
32) from fn_test_ip_nullable order by id;"        
+    test {
+       sql "select id, ipv6_cidr_to_range(nullable(''), 32) from 
fn_test_ip_nullable order by id" 
+       exception "Invalid IPv6 value"
+    }
+    test {
+        sql "select id, ipv6_cidr_to_range(nullable('abc'), 32) from 
fn_test_ip_not_nullable order by id"
+        exception "Invalid IPv6 value"
+    }
     // test IPV4_STRING_TO_NUM/IPV6_STRING_TO_NUM (we have null value in ip4 
and ip6 column in fn_test_ip_nullable table)
     test {
         sql 'select id, ipv6_string_to_num(ip6) from fn_test_ip_nullable order 
by id'
@@ -153,7 +162,17 @@ suite("nereids_scalar_fn_IP") {
     qt_sql_not_null_cidr_ipv6_all """ select id, ipv6_cidr_to_range(ip6, 16) 
from fn_test_ip_not_nullable order by id; """
     qt_sql_not_null_cidr_ipv4_all """ select id, ipv4_cidr_to_range(ip4, 16) 
from fn_test_ip_not_nullable order by id; """
 
+    // test nullable param
+    qt_sql_not_null_cidr_ipv6_nullable_ "select id, 
ipv6_cidr_to_range(to_ipv6('::'), 32) from fn_test_ip_nullable order by id;"
+    test {
+        sql "select id, ipv6_cidr_to_range(nullable(''), 32) from 
fn_test_ip_not_nullable order by id"
+        exception "Invalid IPv6 value"
+    }
 
+    test {
+        sql "select id, ipv6_cidr_to_range(nullable('abc'), 32) from 
fn_test_ip_not_nullable order by id"
+        exception "Invalid IPv6 value"
+    }
     // test IPV4_STRING_TO_NUM/IPV6_STRING_TO_NUM
     qt_sql_not_null_ipv6_string_to_num 'select id, 
hex(ipv6_string_to_num(ip6)) from fn_test_ip_not_nullable order by id'
 
@@ -269,4 +288,4 @@ suite("nereids_scalar_fn_IP") {
     qt_sql_not_null_to_ipv4_or_null "select id, to_ipv4_or_null(ip6) from 
fn_test_ip_not_nullable order by id"
     qt_sql_not_null_to_ipv4_or_null_str "select id, to_ipv4_or_null(ip6_str) 
from fn_test_ip_not_nullable order by id"
 
-}
\ No newline at end of file
+}
diff --git 
a/regression-test/suites/query_p0/sql_functions/ip_functions/test_ipv6_cidr_to_range_function.groovy
 
b/regression-test/suites/query_p0/sql_functions/ip_functions/test_ipv6_cidr_to_range_function.groovy
index 41432c986fe..0a8ba107013 100644
--- 
a/regression-test/suites/query_p0/sql_functions/ip_functions/test_ipv6_cidr_to_range_function.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/ip_functions/test_ipv6_cidr_to_range_function.groovy
@@ -91,13 +91,13 @@ suite("test_ipv6_cidr_to_range_function") {
         (9, 'ffff:0000:0000:0000:0000:0000:0000:0000', NULL)
         """
 
-    qt_sql "select id, 
struct_element(ipv6_cidr_to_range(ipv6_string_to_num_or_null(addr), cidr), 
'min') as min_range, 
struct_element(ipv6_cidr_to_range(ipv6_string_to_num_or_null(addr), cidr), 
'max') as max_range from test_str_cidr_to_range_function order by id"
+    qt_sql "select id, 
struct_element(ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num_or_null(addr)),
 cidr), 'min') as min_range, 
struct_element(ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num_or_null(addr)),
 cidr), 'max') as max_range from test_str_cidr_to_range_function order by id"
 
     sql """ DROP TABLE IF EXISTS test_str_cidr_to_range_function """
 
-    qt_sql "select 
ipv6_cidr_to_range(ipv6_string_to_num('2001:0db8:0000:85a3:0000:0000:ac1f:8001'),
 0)"
-    qt_sql "select 
ipv6_cidr_to_range(ipv6_string_to_num('2001:0db8:0000:85a3:0000:0000:ac1f:8001'),
 128)"
-    qt_sql "select 
ipv6_cidr_to_range(ipv6_string_to_num('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'),
 64)"
-    qt_sql "select 
ipv6_cidr_to_range(ipv6_string_to_num('0000:0000:0000:0000:0000:0000:0000:0000'),
 8)"
-    qt_sql "select 
ipv6_cidr_to_range(ipv6_string_to_num('ffff:0000:0000:0000:0000:0000:0000:0000'),
 4)"
+    qt_sql "select 
ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num('2001:0db8:0000:85a3:0000:0000:ac1f:8001')),
 0)"
+    qt_sql "select 
ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num('2001:0db8:0000:85a3:0000:0000:ac1f:8001')),
 128)"
+    qt_sql "select 
ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')),
 64)"
+    qt_sql "select 
ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num('0000:0000:0000:0000:0000:0000:0000:0000')),
 8)"
+    qt_sql "select 
ipv6_cidr_to_range(ipv6_num_to_string(ipv6_string_to_num('ffff:0000:0000:0000:0000:0000:0000:0000')),
 4)"
 }


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

Reply via email to