Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
Есть таблица с вычисляемым полем.
CREATE TABLE my_table (
    DURATION             INTEGER,
    DATE_TIME_FROM       TIMESTAMP,
    DATE_TIME_TO         COMPUTED BY (NULLIF(dt_inc_minute("DATE_TIME_FROM", "DURATION"), dt_inc_minute(CAST(NULL AS TIMESTAMP), "DURATION")))
);
dt_inc_minute это UDF функция.

Выполняю INSERT
INSERT INTO my_table (
  DURATION, DATE_TIME_FROM
) VALUES (
  10, '2020-06-09 12:00:00'
)
получаю ошибку Invalid BLR offset dt_inc_minute.

Самой dll в папке UDF нет.

А вопрос следующий: зачем эта UDF ищется при вставке записи? Вроде же она должна вызываться только при SELECT?


С уважением, Vasilisk
9 июн 20, 19:01    [22148263]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61460
_Vasilisk_> А вопрос следующий: зачем эта UDF ищется при вставке записи?
_Vasilisk_> Вроде же она должна вызываться только при SELECT?

Вызываться - да. А "препарироваться" запрос должен и при вставке.

P.S. Собсно, непонятно, как таблица создалась - UDF после её
создания из папки "исчезла" что ли?

Posted via ActualForum NNTP Server 1.5

10 июн 20, 15:45    [22148838]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
Гаджимурадов Рустам
А "препарироваться" запрос должен и при вставке.
Так к полю DATE_TIME_TO в запросе никакого обращения нет
Гаджимурадов Рустам
P.S. Собсно, непонятно, как таблица создалась - UDF после её создания из папки "исчезла" что ли?
Забыли положить при развертывании, а Restore FB Embedded никаких ошибок не вернул
10 июн 20, 16:29    [22148868]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
hvlad
Member

Откуда:
Сообщений: 10955
_Vasilisk_
Restore FB Embedded никаких ошибок не вернул
И варнингов не было ?
10 июн 20, 16:55    [22148879]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
hvlad
И варнингов не было ?
Нет. Вот лог рестора
+
[17:23:49] gbak:restoring table MY_TABLE 
[17:23:49] gbak: restoring column DATE_TIME_FROM
[17:23:49] gbak: restoring column DATE_TIME_TO
[17:23:49] gbak: restoring column DURATION
[17:23:49] gbak:committing metadata for table MY_TABLE
...........
[17:23:49] gbak:restoring function DT_INC_MINUTE
[17:23:49] gbak: restoring argument for function DT_INC_MINUTE
[17:23:49] gbak: restoring argument for function DT_INC_MINUTE
[17:23:49] gbak: restoring argument for function DT_INC_MINUTE
..................
[17:23:50] gbak: restoring privilege for user SYSDBA
[17:23:50] gbak:creating indexes
[17:23:50] gbak:committing metadata
[17:23:50] gbak:fixing views dbkey length
[17:23:50] gbak:updating ownership of packages, procedures and tables
[17:23:50] gbak:adding missing privileges
[17:23:50] gbak:adjusting system generators
[17:23:51] gbak:finishing, closing, and going home
[17:23:51] gbak:adjusting the ONLINE and FORCED WRITES flags
[17:23:51]
IBE: Restore completed. Current time: 17:23:51. Elapsed time: 00:00:01
информация о сервере
+
Server Version Info
---------------------------------------------------------------------------
Server Version: WI-V3.0.5.33220 Firebird 3.0
Server Implementation: Firebird/Windows/Intel/i386
Service Version: 2


Configuration Info
---------------------------------------------------------------------------
Base File: E:\Embedded\
Lock File: C:\ProgramData\firebird\
Message File: E:\Embedded\
Security Database: security.db



Database Info
---------------------------------------------------------------------------
Number of connections: 1
Number of databases: 1
Databases: D:\DB\TEMP.FB

База не содержит никаких данных. Все таблицы пустые
10 июн 20, 17:43    [22148923]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61460
_Vasilisk_> Так к полю DATE_TIME_TO в запросе никакого обращения нет

Это не имеет значения, AFAIU.

> Restore FB Embedded никаких ошибок не вернул

Проверь на полном сервере, ради интереса.

Posted via ActualForum NNTP Server 1.5

10 июн 20, 18:22    [22148951]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
Гаджимурадов Рустам
Проверь на полном сервере, ради интереса.
Все полностью аналогично. Никаких хинтов и ворнингов
11 июн 20, 14:32    [22149386]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61460
Это странно. Если просто выполнить DDL c несуществующей UDF тоже тишина?

Posted via ActualForum NNTP Server 1.5

11 июн 20, 15:35    [22149430]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
Гаджимурадов Рустам
Если просто выполнить DDL c несуществующей UDF тоже тишина?
Ага.
11 июн 20, 16:00    [22149441]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61460
_Vasilisk_> Ага.

Это баг, сделай пример и заноси в трекер, плиз.
Перед этим нужно проверить воспроизводится
ли это на последней версии релиза и нет ли в
трекере такого тикета.

Posted via ActualForum NNTP Server 1.5

12 июн 20, 20:31    [22149978]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
Гаджимурадов Рустам
заноси в трекер,
http://tracker.firebirdsql.org/browse/CORE-6333
15 июн 20, 16:35    [22151125]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
Гаджимурадов Рустам
Это баг,
Это не баг, это фича
defining a function should be allowed even when the library does not exist.
15 июн 20, 18:11    [22151191]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61460
Логично. Но ворнинг всё равно должен быть, наверное.

Posted via ActualForum NNTP Server 1.5

16 июн 20, 11:30    [22151472]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
hvlad
Member

Откуда:
Сообщений: 10955
Гаджимурадов Рустам
Логично. Но ворнинг всё равно должен быть, наверное.
+1
16 июн 20, 11:56    [22151507]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28878
Гаджимурадов Рустам,

народ, давайте ddl оставим в покое. Мало ли чего я декларирую. В рантайме, при вызове udf ошибка есть?
Есть, это хорошо и нормально.

Кроме того, вопрос-то исходный был вообще не тот - почему при udf в computed by идет ругань на insert, если dll нет.
По идее, при insert никакого вычисления computed by столбцов быть не должно, если только к ним нет обращения в каком-нибудь триггере на insert.

p.s. _Vasilisk_, убери, пожалуйста, двойные кавычки у столбцов из текста computed by. Они (кавычки) тут не нужны совершенно.
16 июн 20, 11:56    [22151508]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
hvlad
Member

Откуда:
Сообщений: 10955
kdv
Кроме того, вопрос-то исходный был вообще не тот - почему при udf в computed by идет ругань на insert, если dll нет.
По идее, при insert никакого вычисления computed by столбцов быть не должно, если только к ним нет обращения в каком-нибудь триггере на insert.
Потому что метаданные грузятся (и проверяются) для всех полей таблицы.
Никто не будет рассчитывать на то, что какой-то поле в таблице настолько не нужно, что его можно загрузить потом.
16 июн 20, 11:59    [22151509]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61460
kdv> народ, давайте ddl оставим в покое. Мало ли чего я декларирую.

Декларация - одно дело, работа с задекларированным - другое.
Тут можно порассуждать на тему "если dll нет, то и выдавать
ошибку/ворнинг только при первом вызове (а не обращении)",
но лично я в этих рассуждениях особого смысла не вижу.

Впрочем, я не знаю, что там пишут на сей счёт в стандартах.

Posted via ActualForum NNTP Server 1.5

16 июн 20, 13:18    [22151553]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
kdv
. Мало ли чего я декларирую
Обычно стараются сообщить об ошибке как можно раньше. Иначе мы пойдем по пути JavaScript, где чтобы узнать работает ли строка или нет - нужно ее выполнить.

В MySQL с этой логикой пошли еще дальше. Там нет понятия зависимости. Т.е. валидная ли таблица/столбец на которые есть ссылка из процедуры, можно узнать только непосредственно при выполнении этой процедуры. И если в Оракле вся процедура хотя бы получает состояние INVALID, то в MySQL полная тишина. Поддерживать/рефракторить такой код то еще удовольствие
16 июн 20, 16:46    [22151783]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28878
_Vasilisk_,

ну вот не надо. В принципе, я согласен, что можно было бы генерить error при declare external function, если такой dll нет. Ну или warning. Вопрос в последствиях. warning - одобряю, error - нет. Потому что иначе нельзя будет подменить udf, или вообще будет проблематично ее кокнуть.
17 июн 20, 01:40    [22152099]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
hvlad
Member

Откуда:
Сообщений: 10955
kdv
warning - одобряю, error - нет.
Ну так об этом и речь. Плюс о ресторе.
17 июн 20, 09:24    [22152149]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Dimitry Sibiryakov
Member

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

kdv
или вообще будет проблематично ее кокнуть.

Вот как раз при "кокнуть" проверка точно не нужна от слова "совсем".

Posted via ActualForum NNTP Server 1.5

17 июн 20, 12:15    [22152257]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
kdv
Потому что иначе нельзя будет подменить udf,
Так ее и сейчас проблематично подменить (как и UDR). Пока не прибьешь все процессы, которые к ней обращались
kdv
. Вопрос в последствиях.
При декларации новой UDR, в случае ее отсутствия, я получаю error при коммите транзакции, вызвавшей CREATE PROCEDURE. Почему нельзя эту же логику распространить и на UDF?

Но нельзя
Alexander Peshkov
I see no reason changing engine behavior for deprecated in FB4 UDFs.
17 июн 20, 13:05    [22152298]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка UDF при вставке  [new]
Симонов Денис
Member

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

UDR регистрируются в системе по другому. Там процесс очень сильно отличается
17 июн 20, 13:11    [22152304]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить