Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 2.5, computed column, integer division, default types / 20 сообщений из 20, страница 1 из 1
23.03.2016, 16:18
    #39198914
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Код: plsql
1.
2.
3.
4.
create table nums (a int, b generated always as (3*a));
commit;
alter table nums add z computed by (a/4 + 7);
commit;



... и так далее.

fieldtypeformulaA INTEGER B BIGINT (3*a)S BIGINT (-a + 7)U INTEGER (a)M INTEGER (-a)N INTEGER (+a)I BIGINT (a+1)O BIGINT (a+0)Q BIGINT (a*1)P BIGINT (a*0)DBIGINT(a/4)Z BIGINT (a/4 + 7)

OK, O,Q,P - вырожденные "особые случаи", бог с ними.

Но зачем расширять тип в случаях целочисленного деления - D и Z ?
...
Рейтинг: 0 / 0
23.03.2016, 18:05
    #39198990
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Arioch,

если тебе надо что-то конкретное, лучше пиши напрямую
Код: sql
1.
alter table nums add z integer computed by (a/4 + 7);
...
Рейтинг: 0 / 0
23.03.2016, 18:15
    #39198998
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
kdv,

1. для этого в системных таблицах FB тоже не хватает информации

http://www.sql.ru/forum/1205742/skript-tablic-s-polem-vychislimogo-polya-s-yavnym-tipom

собственно это всё как раз на волне обсуждения БД в СКВ

2. тем не менее, вопрос остается - зачем расширять значения и делать лишнюю нагрузку на память/процессор там, где расширение заведомо ненужно
...
Рейтинг: 0 / 0
23.03.2016, 18:51
    #39199033
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
AriochНо зачем расширять тип в случаях целочисленного деления - D и Z ?
могу лишь сказать, что этот вопрос относится к вычисляемым полям лишь косвенно. Потому что у фб есть правила для "выходных типов" вычисляемых выражений.
И для результата int/что-то будет bigint.
Код: sql
1.
select cast(22 as int)/3 from rdb$database
...
Рейтинг: 0 / 0
23.03.2016, 19:34
    #39199063
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
kdv,

это понятно, что косвенно.

но ведь не будет же FB целочисленной деление делать через плавающую запятую?
22/3 через 22/3.0 ?

а тогда - не может число увеличиться по модулю при делении

а тогда - нет никакого смысла увеличивать диапазаон при чистом делении
а также во многих случаях целочисленного div+add(sub)
...
Рейтинг: 0 / 0
23.03.2016, 19:56
    #39199076
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Arioch,

10/(1/100) ку?
...
Рейтинг: 0 / 0
23.03.2016, 20:07
    #39199083
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Arioch,

Это я про увеличение диапазона, если что. С мобилы зашел -неудобно.
...
Рейтинг: 0 / 0
23.03.2016, 20:24
    #39199091
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Код: plaintext
1.
2.
3.
4.
5.
6.
/*
* In the SQL standard, the precision and scale of the quotient of exact
* numeric dividend and divisor are implementation-defined: we have defined
* the precision as 18 (in other words, an SINT64), and the scale as the
* sum of the scales of the two operands.
*/
...
Рейтинг: 0 / 0
24.03.2016, 10:37
    #39199346
Guest 255
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
kdvArioch,

если тебе надо что-то конкретное, лучше пиши напрямую..
Код: sql
1.
alter table nums add z integer computed by (a/4 + 7);



Пользуясь случаем, предлагаю всем заинтересованным проголосовать за http://tracker.firebirdsql.org/browse/CORE-1407
Да и http://tracker.firebirdsql.org/browse/CORE-1386 на самом деле стоило бы переоткрыть как не до конца на самом деле решенный..
...
Рейтинг: 0 / 0
24.03.2016, 13:34
    #39199657
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
DarkMasterArioch,

10/(1/100) ку?

деление на ноль, и что ?
...
Рейтинг: 0 / 0
24.03.2016, 13:44
    #39199673
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
dimitr,

тем более, раз стандарт это не задает, то нет запрета и подумать о более эффективной реализации, хотя бы в плане нагрузки на ОЗУ/кэши :-)
...
Рейтинг: 0 / 0
24.03.2016, 13:50
    #39199691
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
DarkMaster,

впрочем, не всегда - а как раз в зависимости от доступности типа int64

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
--FB 2.5.5 ODS 11.2

select
  cast (3 as smallint)
   /
  cast ( -5 as smallint)
from mon$database

0  BIGINT



но

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
--FB 2.5.5 ODS 11.1

select
  cast (3 as smallint)
   /
  cast ( -5 as smallint)
from mon$database

-0.6  DOUBLE PRECISION



и тут получается ещё интереснее - в расширенный тип конвертируются не результаты действия, а аргументы...
...
Рейтинг: 0 / 0
24.03.2016, 13:57
    #39199703
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
AriochDarkMasterArioch,

10/(1/100) ку?

деление на ноль, и что ?

Ну как бы не совсем ;) 10/(1/100) = 10 / 0.01 = 1000. При граничных значениях изначально integer аргументов легко получим переполнение, если тип не расширять.
...
Рейтинг: 0 / 0
24.03.2016, 14:15
    #39199742
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
DarkMaster,

1 / 100 = 0, целочисленное деление однако
...
Рейтинг: 0 / 0
24.03.2016, 14:45
    #39199788
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
dimitr,

А, это я накосячил, признаю.
...
Рейтинг: 0 / 0
24.03.2016, 15:20
    #39199834
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
dimitr,

а это ещё как повезёт :-(


DarkMaster,

...я сначала хотел тебе написать "Здесь вам не Паскаль", но оказалось, это зависит от ODS
...
Рейтинг: 0 / 0
24.03.2016, 15:29
    #39199851
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Arioch,

Насколько помню еще и SQLDialect роль играет.
...
Рейтинг: 0 / 0
24.03.2016, 15:30
    #39199854
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Arioch...я сначала хотел тебе написать "Здесь вам не Паскаль", но оказалось, это зависит от ODSИщи дальше, ОДС тут не при чём
...
Рейтинг: 0 / 0
24.03.2016, 15:31
    #39199856
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
DarkMasterНасколько помню еще и SQLDialect роль играет
только он и играет
...
Рейтинг: 0 / 0
24.03.2016, 17:02
    #39199963
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FB 2.5, computed column, integer division, default types
Да, действительно ткнул в БД с первым диалектом.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 2.5, computed column, integer division, default types / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]