Andrei wrote:
переходим (там где это возможно) со своих функций на встроенные в
сервер. столкнулись с такой проблемой. Побитовый сдвиг влево единицы
на 31 разряд кидает ошибку на сервере 2.5. Проверить можно такой
процедурой:

recreate procedure test_bin_shl
as
  declare variable a integer = 0;
  declare variable b integer = 1;
begin
  a = bin_shl(b, 31);
  a = bin_shl(b, 32);
end

Результатом сдвига является bigint. Единица, сдвинутая влево на 31 бит все еще является валидным значением bigint, но уже не влазит в переменную "a" типа int при присваивании.


--
Дмитрий Еманов

Ответить