Skip to content

Commit 476c599

Browse files
committed
commit suggestions
1 parent 4a0dbbe commit 476c599

File tree

1 file changed

+21
-39
lines changed

1 file changed

+21
-39
lines changed

src/Functions/isIPAddressContainedIn.cpp

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -183,26 +183,24 @@ namespace DB
183183
return IPAddressVariant(IPTrait<kind>::getElement(col_addr, n));
184184
}
185185

186+
#pragma clang diagnostic ignored "-Wshadow"
187+
#define EXEC_IMPL(col, func, ...) \
188+
if (const auto * ipv4_column = dynamic_cast<const ColumnIPv4 *>(&(col))) \
189+
return func<IPKind::IPv4>(ipv4_column, __VA_ARGS__); \
190+
else if (const auto * ipv6_column = dynamic_cast<const ColumnIPv6 *>(&(col))) \
191+
return func<IPKind::IPv6>(ipv6_column, __VA_ARGS__); \
192+
else if (const auto * string_column = dynamic_cast<const ColumnString *>(&(col))) \
193+
return func<IPKind::String>(string_column, __VA_ARGS__);
194+
186195
static std::optional<IPAddressVariant> parseConstantIP(const ColumnConst & col_addr)
187196
{
188-
if (const auto * ipv4_column = dynamic_cast<const ColumnIPv4 *>(&col_addr.getDataColumn()))
189-
return parseIP<IPKind::IPv4>(ipv4_column, 0);
190-
else if (const auto * ipv6_column = dynamic_cast<const ColumnIPv6 *>(&col_addr.getDataColumn()))
191-
return parseIP<IPKind::IPv6>(ipv6_column, 0);
192-
else if (const auto * string_column = dynamic_cast<const ColumnString *>(&col_addr.getDataColumn()))
193-
return parseIP<IPKind::String>(string_column, 0);
197+
EXEC_IMPL(col_addr.getDataColumn(), parseIP, 0)
194198
else if (col_addr.onlyNull())
195199
return std::nullopt;
196200
else if (const auto * nullable_column = dynamic_cast<const ColumnNullable *>(&col_addr.getDataColumn()))
197201
{
198-
if (const auto * inner_ipv4_column = dynamic_cast<const ColumnIPv4 *>(&nullable_column->getNestedColumn()))
199-
return parseIP<IPKind::IPv4>(inner_ipv4_column, 0);
200-
else if (const auto * inner_ipv6_column = dynamic_cast<const ColumnIPv6 *>(&nullable_column->getNestedColumn()))
201-
return parseIP<IPKind::IPv6>(inner_ipv6_column, 0);
202-
else if (const auto * inner_string_column = dynamic_cast<const ColumnString *>(&nullable_column->getNestedColumn()))
203-
return parseIP<IPKind::String>(inner_string_column, 0);
202+
EXEC_IMPL(nullable_column->getNestedColumn(), parseIP, 0) ///NO-LINT
204203
}
205-
206204
throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "The IP column type must be one of: String, IPv4, IPv6, Nullable(IPv4), Nullable(IPv6), or Nullable(String).");
207205
}
208206

@@ -215,16 +213,11 @@ namespace DB
215213
{
216214
if (const auto * col_cidr_const = checkAndGetAnyColumnConst(col_cidr))
217215
return executeImpl(*col_addr_const, *col_cidr_const, input_rows_count);
218-
else
219-
return executeImpl(*col_addr_const, *col_cidr, input_rows_count);
220-
}
221-
else
222-
{
223-
if (const auto * col_cidr_const = checkAndGetAnyColumnConst(col_cidr))
224-
return executeImpl(*col_addr, *col_cidr_const, input_rows_count);
225-
else
226-
return executeImpl(*col_addr, *col_cidr, input_rows_count);
216+
return executeImpl(*col_addr_const, *col_cidr, input_rows_count);
227217
}
218+
if (const auto * col_cidr_const = checkAndGetAnyColumnConst(col_cidr))
219+
return executeImpl(*col_addr, *col_cidr_const, input_rows_count);
220+
return executeImpl(*col_addr, *col_cidr, input_rows_count);
228221
}
229222

230223
DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override
@@ -244,8 +237,8 @@ namespace DB
244237
if (!(type.isString() || type.isIPv4() || type.isIPv6()) || !isString(prefix_type))
245238
throw Exception(
246239
ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT,
247-
"The first arguments of function {} must be one of: String, IPv4, IPv6, Nullable(IPv4), Nullable(IPv6), or "
248-
"Nullable(String) and the second argument must be String. Get first type: {} and second type: {}",
240+
"The first argument of function {} must be one of: String, IPv4, IPv6, Nullable(String), Nullable(IPv4), or "
241+
"Nullable(IPv6) and the second argument must be String. Type of the first argument: {}, type of the second argument: {}",
249242
getName(),
250243
addr_type->getName(),
251244
prefix_type->getName());
@@ -320,8 +313,8 @@ namespace DB
320313

321314
template <IPKind kind>
322315
static ColumnPtr executeImpl(
323-
const ColumnNullable * nullable_column,
324316
const IPTrait<kind>::ColumnType * col_addr,
317+
const ColumnNullable * nullable_column,
325318
const IPAddressCIDR & cidr,
326319
size_t input_rows_count)
327320
{
@@ -344,22 +337,11 @@ namespace DB
344337
template <typename T>
345338
static ColumnPtr executeImpl(const IColumn & col_addr, const T & cidr, size_t input_rows_count)
346339
{
347-
if (const auto * ipv4_column = dynamic_cast<const ColumnIPv4 *>(&col_addr))
348-
return executeImpl<IPKind::IPv4>(ipv4_column, cidr, input_rows_count);
349-
else if (const auto * ipv6_column = dynamic_cast<const ColumnIPv6 *>(&col_addr))
350-
return executeImpl<IPKind::IPv6>(ipv6_column, cidr, input_rows_count);
351-
else if (const auto * string_column = dynamic_cast<const ColumnString *>(&col_addr))
352-
return executeImpl<IPKind::String>(string_column, cidr, input_rows_count);
340+
EXEC_IMPL(col_addr, executeImpl, cidr, input_rows_count)
353341
else if (const auto * nullable_column = dynamic_cast<const ColumnNullable *>(&col_addr))
354342
{
355-
if (const auto * inner_ipv4_column = dynamic_cast<const ColumnIPv4 *>(&nullable_column->getNestedColumn()))
356-
return executeImpl<IPKind::IPv4>(nullable_column, inner_ipv4_column, cidr, input_rows_count);
357-
else if (const auto * inner_ipv6_column = dynamic_cast<const ColumnIPv6 *>(&nullable_column->getNestedColumn()))
358-
return executeImpl<IPKind::IPv6>(nullable_column, inner_ipv6_column, cidr, input_rows_count);
359-
else if (const auto * inner_string_column = dynamic_cast<const ColumnString *>(&nullable_column->getNestedColumn()))
360-
return executeImpl<IPKind::String>(nullable_column, inner_string_column, cidr, input_rows_count);
343+
EXEC_IMPL(nullable_column->getNestedColumn(), executeImpl, nullable_column, cidr, input_rows_count)
361344
}
362-
363345
throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "The IP column type must be one of: String, IPv4, IPv6, Nullable(IPv4), Nullable(IPv6), or Nullable(String).");
364346
}
365347

@@ -387,8 +369,8 @@ namespace DB
387369

388370
template <IPKind kind>
389371
static ColumnPtr executeImpl(
390-
const ColumnNullable * nullable_column,
391372
const IPTrait<kind>::ColumnType * col_addr,
373+
const ColumnNullable * nullable_column,
392374
const IColumn & col_cidr,
393375
size_t input_rows_count)
394376
{

0 commit comments

Comments
 (0)