Кажется, действительно, что нет поддержки firebird для INT128.
Что вы можете сделать, это представить 128 битов как два 64-битных поля, верхние 64 бита в одном поле (IP_upper
) и младшие 64 бита в другом (IP_Lower
).
Все операции сравнения должны сравнивать оба поля. Если верхнее поле меньше / больше или оно равно, а затем проверьте нижнее поле:
SELECT * FROM T_Country_IP_Range
WHERE
(
block_from_upper < @in_IP_upper
OR
(block_from_upper = @in_IP_upper AND block_from_lower <= @in_IP_lower)
)
AND
(
block_to_upper > @in_IP_upper
OR
(block_to_upper = @in_IP_upper AND block_to_lower >= @in_IP_lower)
)
Вроде неловко, без сомнения