mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Set max CIDR for IPV6 cidr function
This commit is contained in:
parent
2469ec1af3
commit
7063ab3c38
@ -1548,13 +1548,15 @@ public:
|
|||||||
ColumnString::Chars & vec_res_upper_range = col_res_upper_range->getChars();
|
ColumnString::Chars & vec_res_upper_range = col_res_upper_range->getChars();
|
||||||
vec_res_upper_range.resize(input_rows_count * IPV6_BINARY_LENGTH);
|
vec_res_upper_range.resize(input_rows_count * IPV6_BINARY_LENGTH);
|
||||||
|
|
||||||
|
const UInt8 max_cidr_mask = IPV6_BINARY_LENGTH * 8;
|
||||||
|
|
||||||
for (size_t offset = 0; offset < input_rows_count; ++offset)
|
for (size_t offset = 0; offset < input_rows_count; ++offset)
|
||||||
{
|
{
|
||||||
const size_t offset_ipv6 = offset * IPV6_BINARY_LENGTH;
|
const size_t offset_ipv6 = offset * IPV6_BINARY_LENGTH;
|
||||||
UInt8 cidr = col_const_cidr_in
|
UInt8 cidr = col_const_cidr_in
|
||||||
? col_const_cidr_in->getValue<UInt8>()
|
? col_const_cidr_in->getValue<UInt8>()
|
||||||
: col_cidr_in->getData()[offset];
|
: col_cidr_in->getData()[offset];
|
||||||
|
cidr = std::min(cidr, max_cidr_mask);
|
||||||
applyCIDRMask(&vec_in[offset_ipv6], &vec_res_lower_range[offset_ipv6], &vec_res_upper_range[offset_ipv6], cidr);
|
applyCIDRMask(&vec_in[offset_ipv6], &vec_res_lower_range[offset_ipv6], &vec_res_upper_range[offset_ipv6], cidr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,3 +15,4 @@ ffff:: 4 ('f000::','ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
|||||||
('ffff:ffff:ffff:ffff::','ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
('ffff:ffff:ffff:ffff::','ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
||||||
('::','ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
('::','ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
||||||
('f000::','ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
('f000::','ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
|
||||||
|
1
|
||||||
|
@ -22,3 +22,4 @@ SELECT IPv6CIDRToRange(IPv6StringToNum('2001:0db8:0000:85a3:0000:0000:ac1f:8001'
|
|||||||
SELECT IPv6CIDRToRange(IPv6StringToNum('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'), 64);
|
SELECT IPv6CIDRToRange(IPv6StringToNum('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'), 64);
|
||||||
SELECT IPv6CIDRToRange(IPv6StringToNum('0000:0000:0000:0000:0000:0000:0000:0000'), 8);
|
SELECT IPv6CIDRToRange(IPv6StringToNum('0000:0000:0000:0000:0000:0000:0000:0000'), 8);
|
||||||
SELECT IPv6CIDRToRange(IPv6StringToNum('ffff:0000:0000:0000:0000:0000:0000:0000'), 4);
|
SELECT IPv6CIDRToRange(IPv6StringToNum('ffff:0000:0000:0000:0000:0000:0000:0000'), 4);
|
||||||
|
SELECT IPv6CIDRToRange(IPv6StringToNum('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 128) = IPv6CIDRToRange(IPv6StringToNum('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 200) ;
|
||||||
|
Loading…
Reference in New Issue
Block a user