Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 18 19 20 21 22 23 24 [25] 26 27   вперед  Ctrl
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1376
Дорин ответил. Суть ответа - пилите поддержку фич FB 4 самостоятельно.
16 июн 20, 10:09    [22151398]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
CyberMax,

В трёшке из новых типов был только BOOLEAN.
Для поддержки фич четвёрки пилить придётся намного больше:


  • NUMERIC(19-38, x) и DECIMAL(19-38, x) (INT128)
  • DECFLOAT(16) и DECFLOAT(34)
  • {TIME | TIMESTAMP} WITH TIME ZONE
  • таймауты соединения и запросов
  • уровень изоляции READ COMMITTED READ CONSISTENCY (isc_tpb_read_consistency)
  • Batch API
  • поддержка идентификаторов 63 символов (не уверен что это возможно с использованием старого API)
  • можно ещё пул коннектов с поддержкой ALTER SESSION RESET

самое простое здесь 4 и 5 пункт.
16 июн 20, 10:42    [22151416]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
CyberMax
Коллеги, кто-то уже допиливал FIB+ для FB 4? Сходу наткнулся на необходимость поддержки INT128.
В Delphi\FPC есть свой int128 ? Т.е. как именно ты хочешь его поддерживать ?
16 июн 20, 11:00    [22151431]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1376
hvlad
В Delphi\FPC есть свой int128 ? Т.е. как именно ты хочешь его поддерживать ?

Если честно, не знаю. Я попробовал поработать с нашей базой, отресторенной под четверкой, и FIB+ начал валиться с сообщениями, что он не знает, что такое INT128. Где такое появляется - буду разбираться.
P.S. Для меня все это пока что такой немного светлый темный лес.
16 июн 20, 11:05    [22151435]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
hvlad,

я думаю он говорит про NUMERIC и DECIMAL большой точности.
16 июн 20, 11:05    [22151436]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
CyberMax
Я попробовал поработать с нашей базой, отресторенной под четверкой, и FIB+ начал валиться с сообщениями, что он не знает, что такое INT128
Гм, в таком случае - откуда там новые типы данных ?

CyberMax
Где такое появляется - буду разбираться
Да, и нам покажи, может бага где. Или фича, которую описать надо :)
16 июн 20, 11:08    [22151440]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
CyberMax,

он сам по себе нигде не появится, если только как результат выражений над BIGINT или NUMERIC(18, x)

В качестве лекарства можешь попробовать

SET BIND OF NUMERIC(38) TO LEGACY
16 июн 20, 11:12    [22151443]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1376
hvlad
Гм, в таком случае - откуда там новые типы данных ?

Действительно.

hvlad
Да, и нам покажи, может бага где. Или фича, которую описать надо :)

Разобрался. Есть поле NUMERIC(18,2). Если делать группировку и по этому полю SUM, то FB делает из него NUMERIC(38,2).
"AMOUNT NUMERIC(38,2)",

А вот такое получается для поля "SUM(1 - BATCH.LOADED) AS NOT_LOADED", где LOADED - SMALLINT:
"NOT_LOADED NUMERIC(38,0)".

Сообщение было отредактировано: 16 июн 20, 11:12
16 июн 20, 11:13    [22151445]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3066
hvlad
Гм, в таком случае - откуда там новые типы данных ?


Ну как... Например:
select cast(1 as numeric(18,2)) * cast(1 as numeric(18,2)) from rdb$database


выдаст NUMERIC(38, 4).
16 июн 20, 11:14    [22151446]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
CyberMax,

понятно. В принципе - ожидаемо, наверное :)

Смотри в сторону DataTypeCompatibility в firebird.conf, или, менее глобально - SET BIND,
как написал Денис выше. Его можно выполнить сразу после коннекта, или в триггере ON CONNECT.
16 июн 20, 11:17    [22151448]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
А ещё нужно помнить про CURENT_TIME[STAMP], которые теперь имеют time zone и
которые ещё до апгрейда рекомендуется заменить на LOCALTIME[STAMP].
16 июн 20, 11:18    [22151450]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1376
Симонов Денис
он сам по себе нигде не появится, если только как результат выражений над BIGINT или NUMERIC(18, x)

Ты прав.

Симонов Денис
В качестве лекарства можешь попробовать

SET BIND OF NUMERIC(38) TO LEGACY

Помогло частично.
SELECT
    COUNT(*) AS QUANTITY,
    SUM(AMOUNT_INCOME - AMOUNT_OUTCOME) AS AMOUNT,
    SUM(AMOUNT_FINE) AS AMOUNT_FINE,
    SUM(AMOUNT_TOTAL) AS AMOUNT_TOTAL,
    SUM(1 - BATCH.LOADED) AS NOT_LOADED,
    SUM(1 - BATCH.VERIFIED_BOOKKEEPER) AS VERIFIED_BOOKKEEPER,
    SUM(IS_CORRECT_RECEIPT) AS IS_CORRECTED

Получается вот так:
"QUANTITY BIGINT",
"AMOUNT NUMERIC(38,2)",
"AMOUNT_FINE NUMERIC(18,2)",
"AMOUNT_TOTAL NUMERIC(38,2)",
"NOT_LOADED NUMERIC(38,0)",
"VERIFIED_BOOKKEEPER NUMERIC(38,0)",
"IS_CORRECTED BIGINT"

То есть BIND сработал только для простого SUM().
Для AMOUNT_TOTAL не сработало, т.к. это вычисляемый NUMERIC(18, 2).
16 июн 20, 11:21    [22151453]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
CyberMax,

ну тут формально ошибок нет. Либо пилить компоненты доступа для поддержки чисел с большой точностью, либо воспользоваться хаком для обратной совместимости описанном выше
16 июн 20, 11:21    [22151454]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1376
hvlad
А ещё нужно помнить про CURENT_TIME[STAMP], которые теперь имеют time zone и
которые ещё до апгрейда рекомендуется заменить на LOCALTIME[STAMP].

Да, про это в курсе.
16 июн 20, 11:22    [22151455]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1376
Симонов Денис
ну тут формально ошибок нет. Либо пилить компоненты доступа для поддержки чисел с большой точностью, либо воспользоваться хаком для обратной совместимости описанном выше

Не соглашусь. Лично для меня NUMERIC(18.2) - это с охрененным запасом (NUMERIC(9,2) не подходит изз-за десятков миллионов) , а тут NUMERIC(38) насильно вручают. Мое мнение - оставить размерность, как она была. Кому надо - поменяет на NUMERIC(38).
16 июн 20, 11:26    [22151462]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
CyberMax,

SUM не знает сколько у тебя записей таблице, поэтому расширяет тип до максимально возможного. В случае SMALLINT тут наверное перебор. А вот суммы INTEGER вполне могут преодолеть вместимость BIGINT


CyberMax
Для AMOUNT_TOTAL не сработало, т.к. это вычисляемый NUMERIC(18, 2).


ИХМО это бага. Надо бы доработать.


А вот это точно работает

DataTypeCompatibility = 3.0
16 июн 20, 11:42    [22151488]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Довольно странное поведение.


SQL> set sqlda_display on;

SQL> select cast(1 as numeric(19, 2)) as n from rdb$database;

INPUT message field count: 0

OUTPUT message field count: 1
01: sqltype: 32752 NUMERIC(38) scale: -2 subtype: 1 len: 16
: name: CAST alias: N
: table: owner:

N
=============================================
1.00

SQL> SET BIND OF NUMERIC(38) TO LEGACY;
SQL> select cast(1 as numeric(19, 2)) as n from rdb$database;

INPUT message field count: 0

OUTPUT message field count: 1
01: sqltype: 580 INT64 scale: -2 subtype: 1 len: 8
: name: CAST alias: N
: table: owner:

N
=====================
1.00

SQL> select cast(1 as numeric(18, 2)) * cast(1 as numeric(18, 2)) as n from rdb$database;

INPUT message field count: 0

OUTPUT message field count: 1
01: sqltype: 32752 NUMERIC(38) scale: -4 subtype: 0 len: 16
: name: MULTIPLY alias: N
: table: owner:

N
=============================================
1.0000

В трекер идти?

Сообщение было отредактировано: 16 июн 20, 11:49
16 июн 20, 11:50    [22151498]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
CyberMax
То есть BIND сработал только для простого SUM().
Для AMOUNT_TOTAL не сработало
Не нравится мне это, будем выяснять детали.
16 июн 20, 11:52    [22151503]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
Симонов Денис
В трекер идти?
Пока погоди, я Алексу вопрос задал - подождём немного.
16 июн 20, 11:53    [22151506]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

Симонов Денис
Довольно странное поведение.

Это на свежем снапшоте или какой-нибудь дремучей альфе?

Posted via ActualForum NNTP Server 1.5

16 июн 20, 12:44    [22151530]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Dimitry Sibiryakov,

позавчерашний снапшот. В альфе синтаксис BIND был совсем другой
16 июн 20, 12:51    [22151537]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
Симонов Денис
Dimitry Sibiryakov,

позавчерашний снапшот. В альфе синтаксис BIND был совсем другой


Похоже я приврал, не заметил что снапшоты не обновлялись с 2020-06-01. Опять что-то поломалось.

Ладно скачаю сборки с Appveyor
17 июн 20, 09:49    [22152164]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

Симонов Денис
не заметил что снапшоты не обновлялись с 2020-06-01.

Не, это-то нормально. Просто там был некоторый промежуток времени когда приведение типов
делалось на уровне данных. Потом Алекс перенёс это на уровень описания метаданных. Там
(теоретически) мог быть случай, когда перемножение приведённых данных опять выводило их за
рамки.

Posted via ActualForum NNTP Server 1.5

17 июн 20, 12:19    [22152259]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
hvlad
Member

Откуда:
Сообщений: 10955
hvlad
Симонов Денис
В трекер идти?
Пока погоди, я Алексу вопрос задал - подождём немного.
http://tracker.firebirdsql.org/browse/CORE-6337
завтрашний снапшот хорошо бы проверить
19 июн 20, 16:08    [22153782]     Ответить | Цитировать Сообщить модератору
 Re: А что проект Devrace(FIBPlus) уже умер??  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10574
hvlad,

хорошо
19 июн 20, 16:32    [22153806]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 18 19 20 21 22 23 24 [25] 26 27   вперед  Ctrl
Все форумы / Firebird, InterBase Ответить