This is an automated email from the ASF dual-hosted git repository.
dataroaring 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 6ddff3dec12 [improve](ipv6) Enhance ipv6 type to accept uint128
strings in netwo… (#48802)
6ddff3dec12 is described below
commit 6ddff3dec124c3148bfb73e5fd175795e0e10a06
Author: amory <[email protected]>
AuthorDate: Mon Mar 10 11:30:30 2025 +0800
[improve](ipv6) Enhance ipv6 type to accept uint128 strings in netwo…
(#48802)
…rk byte order (#47126)
### What problem does this PR solve?
Enhance ipv6 type to accept uint128 strings in network byte order.
according to function : ipv6_from_uint128_string_or_null(string) For
load we can load the uint128 number like
```338288524927261089657673092949903306134``` using function
ipv6_from_uint128_string_or_null
or just using function in select sql
```
mysql> select
ipv6_from_uint128_string_or_null('340282366920938463463374607431768211455');
+-----------------------------------------------------------------------------+
|
ipv6_from_uint128_string_or_null('340282366920938463463374607431768211455')
|
+-----------------------------------------------------------------------------+
| ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff |
+-----------------------------------------------------------------------------+
1 row in set (0.06 sec)
```、
---
be/src/vec/functions/function_ip.cpp | 3 +
be/src/vec/functions/function_ip.h | 44 +++++++++
be/src/vec/runtime/ipv6_value.h | 11 +++
.../doris/catalog/BuiltinScalarFunctions.java | 2 +
.../scalar/Ipv6FromUInt128StringOrNull.java | 70 ++++++++++++++
.../expressions/visitor/ScalarFunctionVisitor.java | 5 +
gensrc/script/doris_builtins_functions.py | 2 +
.../data/datatype_p0/ip/test_data/ipv6_uint128.csv | 105 +++++++++++++++++++++
.../data/datatype_p0/ip/test_ip_basic.out | Bin 9441 -> 15062 bytes
.../suites/datatype_p0/ip/test_ip_basic.groovy | 50 ++++++++++
10 files changed, 292 insertions(+)
diff --git a/be/src/vec/functions/function_ip.cpp
b/be/src/vec/functions/function_ip.cpp
index 30b31901624..3b5782865fb 100644
--- a/be/src/vec/functions/function_ip.cpp
+++ b/be/src/vec/functions/function_ip.cpp
@@ -66,5 +66,8 @@ void register_function_ip(SimpleFunctionFactory& factory) {
/// Cut IPv6 part
factory.register_function<FunctionCutIPv6>();
+
+ // Covert to IPv6 from uint128-string
+ factory.register_function<FunctionIPv6FromUInt128StringOrNull>();
}
} // namespace doris::vectorized
\ No newline at end of file
diff --git a/be/src/vec/functions/function_ip.h
b/be/src/vec/functions/function_ip.h
index a212c4130ca..00b43955372 100644
--- a/be/src/vec/functions/function_ip.h
+++ b/be/src/vec/functions/function_ip.h
@@ -1405,4 +1405,48 @@ private:
}
};
+class FunctionIPv6FromUInt128StringOrNull : public IFunction {
+public:
+ static constexpr auto name = "ipv6_from_uint128_string_or_null";
+ static FunctionPtr create() { return
std::make_shared<FunctionIPv6FromUInt128StringOrNull>(); }
+
+ String get_name() const override { return name; }
+
+ size_t get_number_of_arguments() const override { return 1; }
+
+ DataTypePtr get_return_type_impl(const DataTypes& arguments) const
override {
+ return
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeIPv6>());
+ }
+
+ Status execute_impl(FunctionContext* context, Block& block, const
ColumnNumbers& arguments,
+ size_t result, size_t input_rows_count) const override
{
+ const auto& ipv6_column_with_type_and_name =
block.get_by_position(arguments[0]);
+ const auto& [ipv6_column, ipv6_const] =
+ unpack_if_const(ipv6_column_with_type_and_name.column);
+ const auto* ipv6_addr_column = assert_cast<const
ColumnString*>(ipv6_column.get());
+ // result is nullable column
+ auto col_res =
ColumnNullable::create(ColumnIPv6::create(input_rows_count, 0),
+
ColumnUInt8::create(input_rows_count, 1));
+ auto& col_res_data =
assert_cast<ColumnIPv6*>(&col_res->get_nested_column())->get_data();
+ auto& res_null_map_data = col_res->get_null_map_data();
+
+ for (size_t i = 0; i < input_rows_count; ++i) {
+ IPv6 ipv6 = 0;
+ auto ipv6_idx = index_check_const(i, ipv6_const);
+ StringRef uint128_string = ipv6_addr_column->get_data_at(ipv6_idx);
+ if (!IPv6Value::from_uint128_string(ipv6, uint128_string.data,
uint128_string.size)) {
+ VLOG_DEBUG << "Invalid uin128 IPv6 value '" <<
uint128_string.to_string_view()
+ << "'";
+ // we should set null to the result not throw exception for
load senior
+ } else {
+ col_res_data[i] = ipv6;
+ res_null_map_data[i] = 0;
+ }
+ }
+
+ block.replace_by_position(result, std::move(col_res));
+ return Status::OK();
+ }
+};
+
} // namespace doris::vectorized
diff --git a/be/src/vec/runtime/ipv6_value.h b/be/src/vec/runtime/ipv6_value.h
index 5a26af25243..d4ea45576c3 100644
--- a/be/src/vec/runtime/ipv6_value.h
+++ b/be/src/vec/runtime/ipv6_value.h
@@ -42,6 +42,17 @@ public:
bool from_string(const std::string& ipv6_str) { return from_string(_value,
ipv6_str); }
+ static bool from_uint128_string(IPv6& value, const char* ipv6_str, size_t
len) {
+ value = 0;
+ for (size_t i = 0; i < len; ++i) {
+ if (ipv6_str[i] < '0' || ipv6_str[i] > '9') {
+ return false; // illegal character for uint128
+ }
+ value = value * 10 + (ipv6_str[i] - '0');
+ }
+ return true;
+ }
+
static bool from_string(IPv6& value, const char* ipv6_str, size_t len) {
if (len == 0) {
return false;
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 e2646a0b8c3..0b13af6b68d 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
@@ -222,6 +222,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4StringToN
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4StringToNumOrNull;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4ToIpv6;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6CIDRToRange;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6FromUInt128StringOrNull;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6NumToString;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6StringToNum;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6StringToNumOrDefault;
@@ -693,6 +694,7 @@ public class BuiltinScalarFunctions implements
FunctionHelper {
scalar(IsIpAddressInRange.class, "is_ip_address_in_range"),
scalar(Ipv4CIDRToRange.class, "ipv4_cidr_to_range"),
scalar(Ipv6CIDRToRange.class, "ipv6_cidr_to_range"),
+ scalar(Ipv6FromUInt128StringOrNull.class,
"ipv6_from_uint128_string_or_null"),
scalar(JsonArray.class, "json_array"),
scalar(JsonObject.class, "json_object"),
scalar(JsonQuote.class, "json_quote"),
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ipv6FromUInt128StringOrNull.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ipv6FromUInt128StringOrNull.java
new file mode 100644
index 00000000000..6c37549d68d
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ipv6FromUInt128StringOrNull.java
@@ -0,0 +1,70 @@
+// 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.IPv6Type;
+import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.types.VarcharType;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * scalar function ipv6_from_uint128_string_or_null
+ * args just accept varchar as uint128 string
+ * return ipv6 or null
+ * sql : select
ipv6_from_uint128_string_or_null('340282366920938463463374607431768211455');
+ */
+public class Ipv6FromUInt128StringOrNull extends ScalarFunction
+ implements UnaryExpression, ExplicitlyCastableSignature,
AlwaysNullable {
+
+ public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(IPv6Type.INSTANCE).args(VarcharType.SYSTEM_DEFAULT),
+
FunctionSignature.ret(IPv6Type.INSTANCE).args(StringType.INSTANCE));
+
+ public Ipv6FromUInt128StringOrNull(Expression arg0) {
+ super("ipv6_from_uint128_string_or_null", arg0);
+ }
+
+ @Override
+ public Ipv6FromUInt128StringOrNull withChildren(List<Expression> children)
{
+ Preconditions.checkArgument(children.size() == 1,
+ "ipv6_from_uint128_string_or_null accept 1 args, but got %s
(%s)",
+ children.size(),
+ children);
+ return new Ipv6FromUInt128StringOrNull(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitIpv6FromUInt128StringOrNull(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 b740bb3a125..b74c80e5775 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
@@ -225,6 +225,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4StringToN
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4StringToNumOrNull;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4ToIpv6;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6CIDRToRange;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6FromUInt128StringOrNull;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6NumToString;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6StringToNum;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv6StringToNumOrDefault;
@@ -1334,6 +1335,10 @@ public interface ScalarFunctionVisitor<R, C> {
return visitScalarFunction(ipv6StringToNumOrNull, context);
}
+ default R visitIpv6FromUInt128StringOrNull(Ipv6FromUInt128StringOrNull
ipv6FromUInt128StringOrNull, C context) {
+ return visitScalarFunction(ipv6FromUInt128StringOrNull, context);
+ }
+
default R visitIsIpv4Compat(IsIpv4Compat isIpv4Compat, C context) {
return visitScalarFunction(isIpv4Compat, context);
}
diff --git a/gensrc/script/doris_builtins_functions.py
b/gensrc/script/doris_builtins_functions.py
index 6d27d4cbe97..0cd74f99550 100644
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -2142,6 +2142,8 @@ visible_functions = {
[['to_ipv6_or_null'], 'IPV6', ['STRING'], 'ALWAYS_NULLABLE'],
[['ipv4_to_ipv6'], 'IPV6', ['IPV4'], 'DEPEND_ON_ARGUMENT'],
[['cut_ipv6'], 'STRING', ['IPV6', 'TINYINT', 'TINYINT'],
'DEPEND_ON_ARGUMENT'],
+ [['ipv6_from_uint128_string_or_null'], 'IPV6', ['VARCHAR'],
'ALWAYS_NULLABLE'],
+ [['ipv6_from_uint128_string_or_null'], 'IPV6', ['STRING'],
'ALWAYS_NULLABLE']
],
"NonNullalbe": [
diff --git a/regression-test/data/datatype_p0/ip/test_data/ipv6_uint128.csv
b/regression-test/data/datatype_p0/ip/test_data/ipv6_uint128.csv
new file mode 100644
index 00000000000..1ae0cc42e1f
--- /dev/null
+++ b/regression-test/data/datatype_p0/ip/test_data/ipv6_uint128.csv
@@ -0,0 +1,105 @@
+1,42540766411282592856903984951653826560,2001:db8::
+2,42540766411282592856903984951653826561,2001:db8::1
+3,42540766411282592856903984951653826562,2001:db8::2
+4,42540766411282592856903984951653826563,2001:db8::3
+5,42540766411282592856903984951653826564,2001:db8::4
+6,42540766411282592856903984951653826565,2001:db8::5
+7,42540766411282592856903984951653826566,2001:db8::6
+8,42540766411282592856903984951653826567,2001:db8::7
+9,42540766411282592856903984951653826568,2001:db8::8
+10,42540766411282592856903984951653826569,2001:db8::9
+11,42540766411282592856903984951653826570,2001:db8::a
+12,42540766411282592856903984951653826571,2001:db8::b
+13,42540766411282592856903984951653826572,2001:db8::c
+14,42540766411282592856903984951653826573,2001:db8::d
+15,42540766411282592856903984951653826574,2001:db8::e
+16,42540766411282592856903984951653826575,2001:db8::f
+17,42540766411282592856903984951653826576,2001:db8::10
+18,42540766411282592856903984951653826577,2001:db8::11
+19,42540766411282592856903984951653826578,2001:db8::12
+20,42540766411282592856903984951653826579,2001:db8::13
+21,42540766411282592856903984951653826580,2001:db8::14
+22,42540766411282592856903984951653826581,2001:db8::15
+23,42540766411282592856903984951653826582,2001:db8::16
+24,42540766411282592856903984951653826583,2001:db8::17
+25,42540766411282592856903984951653826584,2001:db8::18
+26,42540766411282592856903984951653826585,2001:db8::19
+27,42540766411282592856903984951653826586,2001:db8::1a
+28,42540766411282592856903984951653826587,2001:db8::1b
+29,42540766411282592856903984951653826588,2001:db8::1c
+30,42540766411282592856903984951653826589,2001:db8::1d
+31,42540766411282592856903984951653826590,2001:db8::1e
+32,42540766411282592856903984951653826591,2001:db8::1f
+33,42540766411282592856903984951653826592,2001:db8::20
+34,42540766411282592856903984951653826593,2001:db8::21
+35,42540766411282592856903984951653826594,2001:db8::22
+36,42540766411282592856903984951653826595,2001:db8::23
+37,42540766411282592856903984951653826596,2001:db8::24
+38,42540766411282592856903984951653826597,2001:db8::25
+39,42540766411282592856903984951653826598,2001:db8::26
+40,42540766411282592856903984951653826599,2001:db8::27
+41,42540766411282592856903984951653826600,2001:db8::28
+42,42540766411282592856903984951653826601,2001:db8::29
+43,42540766411282592856903984951653826602,2001:db8::2a
+44,42540766411282592856903984951653826603,2001:db8::2b
+45,42540766411282592856903984951653826604,2001:db8::2c
+46,42540766411282592856903984951653826605,2001:db8::2d
+47,42540766411282592856903984951653826606,2001:db8::2e
+48,42540766411282592856903984951653826607,2001:db8::2f
+49,42540766411282592856903984951653826608,2001:db8::30
+50,42540766411282592856903984951653826609,2001:db8::31
+51,42540766411282592856903984951653826610,2001:db8::32
+52,42540766411282592856903984951653826611,2001:db8::33
+53,42540766411282592856903984951653826612,2001:db8::34
+54,42540766411282592856903984951653826613,2001:db8::35
+55,42540766411282592856903984951653826614,2001:db8::36
+56,42540766411282592856903984951653826615,2001:db8::37
+57,42540766411282592856903984951653826616,2001:db8::38
+58,42540766411282592856903984951653826617,2001:db8::39
+59,42540766411282592856903984951653826618,2001:db8::3a
+60,42540766411282592856903984951653826619,2001:db8::3b
+61,42540766411282592856903984951653826620,2001:db8::3c
+62,42540766411282592856903984951653826621,2001:db8::3d
+63,42540766411282592856903984951653826622,2001:db8::3e
+64,42540766411282592856903984951653826623,2001:db8::3f
+65,42540766411282592856903984951653826624,2001:db8::40
+66,42540766411282592856903984951653826625,2001:db8::41
+67,42540766411282592856903984951653826626,2001:db8::42
+68,42540766411282592856903984951653826627,2001:db8::43
+69,42540766411282592856903984951653826628,2001:db8::44
+70,42540766411282592856903984951653826629,2001:db8::45
+71,42540766411282592856903984951653826630,2001:db8::46
+72,42540766411282592856903984951653826631,2001:db8::47
+73,42540766411282592856903984951653826632,2001:db8::48
+74,42540766411282592856903984951653826633,2001:db8::49
+75,42540766411282592856903984951653826634,2001:db8::4a
+76,42540766411282592856903984951653826635,2001:db8::4b
+77,42540766411282592856903984951653826636,2001:db8::4c
+78,42540766411282592856903984951653826637,2001:db8::4d
+79,42540766411282592856903984951653826638,2001:db8::4e
+80,42540766411282592856903984951653826639,2001:db8::4f
+81,42540766411282592856903984951653826640,2001:db8::50
+82,42540766411282592856903984951653826641,2001:db8::51
+83,42540766411282592856903984951653826642,2001:db8::52
+84,42540766411282592856903984951653826643,2001:db8::53
+85,42540766411282592856903984951653826644,2001:db8::54
+86,42540766411282592856903984951653826645,2001:db8::55
+87,42540766411282592856903984951653826646,2001:db8::56
+88,42540766411282592856903984951653826647,2001:db8::57
+89,42540766411282592856903984951653826648,2001:db8::58
+90,42540766411282592856903984951653826649,2001:db8::59
+91,42540766411282592856903984951653826650,2001:db8::5a
+92,42540766411282592856903984951653826651,2001:db8::5b
+93,42540766411282592856903984951653826652,2001:db8::5c
+94,42540766411282592856903984951653826653,2001:db8::5d
+95,42540766411282592856903984951653826654,2001:db8::5e
+96,42540766411282592856903984951653826655,2001:db8::5f
+97,42540766411282592856903984951653826656,2001:db8::60
+98,42540766411282592856903984951653826657,2001:db8::61
+99,42540766411282592856903984951653826658,2001:db8::62
+100,42540766411282592856903984951653826659,2001:db8::63
+101,1,::1
+102,0,::
+103,338963523518870617245727861364146307073,ff02::1
+104,338963523518870617245727861364146307074,ff02::2
+105,42540766411282592856903984951653826560,2001:db8::
\ No newline at end of file
diff --git a/regression-test/data/datatype_p0/ip/test_ip_basic.out
b/regression-test/data/datatype_p0/ip/test_ip_basic.out
index e1b85abe00c..6a822b7cde6 100644
Binary files a/regression-test/data/datatype_p0/ip/test_ip_basic.out and
b/regression-test/data/datatype_p0/ip/test_ip_basic.out differ
diff --git a/regression-test/suites/datatype_p0/ip/test_ip_basic.groovy
b/regression-test/suites/datatype_p0/ip/test_ip_basic.groovy
index 5a4ab2ca94a..caf6ab02870 100644
--- a/regression-test/suites/datatype_p0/ip/test_ip_basic.groovy
+++ b/regression-test/suites/datatype_p0/ip/test_ip_basic.groovy
@@ -186,4 +186,54 @@ suite("test_ip_basic") {
qt_sql """ alter table table_ip_default_like add column col25 ipv6 NULL
DEFAULT "::" """
qt_sql """ alter table table_ip_default_like add column col26 ipv4 NULL
DEFAULT "127.0.0.1" """
qt_sql """ select * from table_ip_default_like order by col0 """
+
+ // test ipv6 with uint128 presentation
+ sql """ DROP TABLE IF EXISTS table_ipv6_uint128 """
+ sql """ CREATE TABLE IF NOT EXISTS `table_ipv6_uint128` (`col0` bigint NOT
NULL, `ipv6_uint128` ipv6 NOT NULL, `ipv6` ipv6 NOT NULL) ENGINE=OLAP UNIQUE
KEY(`col0`) DISTRIBUTED BY HASH(`col0`) BUCKETS 4 PROPERTIES
("replication_allocation" = "tag.location.default: 1") """
+ // streamload
+ streamLoad {
+ db 'regression_test_datatype_p0_ip'
+ table 'table_ipv6_uint128'
+ set 'column_separator', ','
+ set 'columns', 'col0, tmp, ipv6,
ipv6_uint128=ipv6_from_uint128_string_or_null(tmp)'
+ file 'test_data/ipv6_uint128.csv'
+ time 10000 // limit inflight 10s
+ // stream load action will check result, include Success status, and
NumberTotalRows == NumberLoadedRows
+ check { res, exception, startTime, endTime ->
+ if (exception != null) {
+ throw exception
+ }
+ log.info("Stream load result: ${res}".toString())
+ def json = parseJson(res)
+ assertEquals("success", json.Status.toLowerCase())
+ assertEquals(json.NumberTotalRows, json.NumberLoadedRows)
+ assertTrue(json.LoadBytes > 0)
+ }
+ }
+ qt_sql_ipv6 """ select * from table_ipv6_uint128 order by col0 """
+ // test cast
+ sql """ DROP TABLE IF EXISTS table_ipv6_uint128_string """
+ sql """ CREATE TABLE IF NOT EXISTS `table_ipv6_uint128_string` (`col0`
bigint NOT NULL, `ipv6_uint128` string NOT NULL, `ipv6` ipv6 NOT NULL)
ENGINE=OLAP UNIQUE KEY(`col0`) DISTRIBUTED BY HASH(`col0`) BUCKETS 4 PROPERTIES
("replication_allocation" = "tag.location.default: 1") """
+ // streamload
+ streamLoad {
+ db 'regression_test_datatype_p0_ip'
+ table 'table_ipv6_uint128_string'
+ set 'column_separator', ','
+ file 'test_data/ipv6_uint128.csv'
+ time 10000 // limit inflight 10s
+ // stream load action will check result, include Success status,
and NumberTotalRows == NumberLoadedRows
+ check { res, exception, startTime, endTime ->
+ if (exception != null) {
+ throw exception
+ }
+ log.info("Stream load result: ${res}".toString())
+ def json = parseJson(res)
+ assertEquals("success", json.Status.toLowerCase())
+ assertEquals(json.NumberTotalRows, json.NumberLoadedRows)
+ assertTrue(json.LoadBytes > 0)
+ }
+ }
+
+ // then cast ipv6_uint128 to ipv6
+ qt_sql_ipv6_string """ select
ipv6_from_uint128_string_or_null(ipv6_uint128) as ipv6_uint128, ipv6 from
table_ipv6_uint128_string order by col0 """
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]