Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Загрузка UDF при вставке / 23 сообщений из 23, страница 1 из 1
09.06.2020, 19:01
    #39967533
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Есть таблица с вычисляемым полем.
Код: sql
1.
2.
3.
4.
5.
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
Код: sql
1.
2.
3.
4.
5.
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
...
Рейтинг: 0 / 0
10.06.2020, 15:45
    #39967912
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
_Vasilisk_> А вопрос следующий: зачем эта UDF ищется при вставке записи?
_Vasilisk_> Вроде же она должна вызываться только при SELECT?

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

P.S. Собсно, непонятно, как таблица создалась - UDF после её
создания из папки "исчезла" что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.06.2020, 16:29
    #39967934
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам
А "препарироваться" запрос должен и при вставке.
Так к полю DATE_TIME_TO в запросе никакого обращения нет
Гаджимурадов Рустам
P.S. Собсно, непонятно, как таблица создалась - UDF после её создания из папки "исчезла" что ли?
Забыли положить при развертывании, а Restore FB Embedded никаких ошибок не вернул
...
Рейтинг: 0 / 0
10.06.2020, 16:55
    #39967944
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
_Vasilisk_
Restore FB Embedded никаких ошибок не вернул
И варнингов не было ?
...
Рейтинг: 0 / 0
10.06.2020, 17:43
    #39967977
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
hvlad
И варнингов не было ?
Нет. Вот лог рестора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
[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
информация о сервере
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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

База не содержит никаких данных. Все таблицы пустые
...
Рейтинг: 0 / 0
10.06.2020, 18:22
    #39968000
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
_Vasilisk_> Так к полю DATE_TIME_TO в запросе никакого обращения нет

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

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

Проверь на полном сервере, ради интереса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.06.2020, 14:32
    #39968260
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам
Проверь на полном сервере, ради интереса.
Все полностью аналогично. Никаких хинтов и ворнингов
...
Рейтинг: 0 / 0
11.06.2020, 15:35
    #39968296
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Это странно. Если просто выполнить DDL c несуществующей UDF тоже тишина?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.06.2020, 16:00
    #39968300
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам
Если просто выполнить DDL c несуществующей UDF тоже тишина?
Ага.
...
Рейтинг: 0 / 0
12.06.2020, 20:31
    #39968691
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
_Vasilisk_> Ага.

Это баг, сделай пример и заноси в трекер, плиз.
Перед этим нужно проверить воспроизводится
ли это на последней версии релиза и нет ли в
трекере такого тикета.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.06.2020, 16:35
    #39969446
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам
заноси в трекер,
http://tracker.firebirdsql.org/browse/CORE-6333
...
Рейтинг: 0 / 0
15.06.2020, 18:11
    #39969484
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам
Это баг,
Это не баг, это фича defining a function should be allowed even when the library does not exist.
...
Рейтинг: 0 / 0
16.06.2020, 11:30
    #39969667
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Логично. Но ворнинг всё равно должен быть, наверное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.06.2020, 11:56
    #39969690
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам
Логично. Но ворнинг всё равно должен быть, наверное.
+1
...
Рейтинг: 0 / 0
16.06.2020, 11:56
    #39969691
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
Гаджимурадов Рустам,

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

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

p.s. _Vasilisk_, убери, пожалуйста, двойные кавычки у столбцов из текста computed by. Они (кавычки) тут не нужны совершенно.
...
Рейтинг: 0 / 0
16.06.2020, 11:59
    #39969692
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
kdv
Кроме того, вопрос-то исходный был вообще не тот - почему при udf в computed by идет ругань на insert, если dll нет.
По идее, при insert никакого вычисления computed by столбцов быть не должно, если только к ним нет обращения в каком-нибудь триггере на insert.
Потому что метаданные грузятся (и проверяются) для всех полей таблицы.
Никто не будет рассчитывать на то, что какой-то поле в таблице настолько не нужно, что его можно загрузить потом.
...
Рейтинг: 0 / 0
16.06.2020, 13:18
    #39969727
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
kdv> народ, давайте ddl оставим в покое. Мало ли чего я декларирую.

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

Впрочем, я не знаю, что там пишут на сей счёт в стандартах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.06.2020, 16:46
    #39969835
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
kdv
. Мало ли чего я декларирую
Обычно стараются сообщить об ошибке как можно раньше. Иначе мы пойдем по пути JavaScript, где чтобы узнать работает ли строка или нет - нужно ее выполнить.

В MySQL с этой логикой пошли еще дальше. Там нет понятия зависимости. Т.е. валидная ли таблица/столбец на которые есть ссылка из процедуры, можно узнать только непосредственно при выполнении этой процедуры. И если в Оракле вся процедура хотя бы получает состояние INVALID, то в MySQL полная тишина. Поддерживать/рефракторить такой код то еще удовольствие
...
Рейтинг: 0 / 0
17.06.2020, 01:40
    #39970005
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
_Vasilisk_,

ну вот не надо. В принципе, я согласен, что можно было бы генерить error при declare external function, если такой dll нет. Ну или warning. Вопрос в последствиях. warning - одобряю, error - нет. Потому что иначе нельзя будет подменить udf, или вообще будет проблематично ее кокнуть.
...
Рейтинг: 0 / 0
17.06.2020, 09:24
    #39970040
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
kdv
warning - одобряю, error - нет.
Ну так об этом и речь. Плюс о ресторе.
...
Рейтинг: 0 / 0
17.06.2020, 12:15
    #39970120
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
kdvили вообще будет проблематично ее кокнуть.

Вот как раз при "кокнуть" проверка точно не нужна от слова "совсем".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.06.2020, 13:05
    #39970146
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
kdv
Потому что иначе нельзя будет подменить udf,
Так ее и сейчас проблематично подменить (как и UDR). Пока не прибьешь все процессы, которые к ней обращались
kdv
. Вопрос в последствиях.
При декларации новой UDR, в случае ее отсутствия, я получаю error при коммите транзакции, вызвавшей CREATE PROCEDURE. Почему нельзя эту же логику распространить и на UDF?

Но нельзяAlexander PeshkovI see no reason changing engine behavior for deprecated in FB4 UDFs.
...
Рейтинг: 0 / 0
17.06.2020, 13:11
    #39970150
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка UDF при вставке
_Vasilisk_,

UDR регистрируются в системе по другому. Там процесс очень сильно отличается
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Загрузка UDF при вставке / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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