powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависимости в пакетах Firebird 3
19 сообщений из 19, страница 1 из 1
Зависимости в пакетах Firebird 3
    #39075457
shaposh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То что из таблицы можно дропнуть поле, к которому обращается хранимая процедура в пакете как-то непривычно... Оно так и задумано или это "детская болезнь" которая будет вылечена?
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39075481
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shaposhОно так и задумано или это "детская болезнь" которая будет вылечена?
Пакеты делал Адриано так, чтобы было как в Оракуле. Так что именно так оно и задумано.
Пакет у него инвалидируется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39075486
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shaposh,

что-то не заметил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table t2 (a int, b int);

set term ^;

create package pack
as
begin
  procedure p1;
end^


create package body pack
as
begin
  procedure p1
  as
  begin
    delete from t2 where b = 1;
  end

end^

set term ;^



Код: sql
1.
alter table t2 drop b;



This operation is not defined for system tables.
unsuccessful metadata update.
cannot delete.
COLUMN T2.B.
there are 1 dependencies.

Может покажешь воспроизводимый пример?

P.S. FB 3.0.0.32060
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39075493
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

инвалидируется он только если ты заголовок пакета поменял, а тело нет. Когда объявление процедур/функций в заголовке и шапке и теле не совпадают по параметрам. Ибо заголовок и тело пакета создаются разными статментами
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39075667
shaposh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не воспроизводится для контрольного примера... Вся проблема в том, что ситуация с невалидным пакетом все-таки была изначально какой то последовательностью действий. До того момента как не воспроизведу эту последовательность вопрос, разумеется, снят
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084109
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисинвалидируется он только если ты заголовок пакета поменял, а тело нет . Когда объявление процедур/функций в заголовке и шапке и теле не совпадают по параметрам. Вот эти две фразы немного завихряют мой бедный моцг:
1) из синенькой фразы следует, что при любом изменении заголовка пакета, даже при пересохранении того же самого заголовка через alter, тело пакета должно стать инвалидным;
2) а из красненькой фразы следует, что тело пакета будет инвалидным, если ранее объявленные ХП/функции стали расходиться в заголовке и теле по списку/типам параметров.

В общем, я поизгалялся слегка, и получилось вот что:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
set list on;

recreate table tbl_test(id int generated by default as identity, x int default 100);
commit;

set term ^; --------------------------------- [ 1:begin ]
create package pkg_test as
 begin
    procedure sp_test(a type of column tbl_test.x);
end 
^ ------------------------------------------- [ 1:end ]

create package body pkg_test as
begin
    procedure sp_test (a type of column tbl_test.x) as
        declare c int;
    begin
        select count(*) from tbl_test t where t.x = :a into c;
    end
end
^
set term ;^
commit;

select 'Before ALTER package statement, w/o any changes in it' as msg, p.rdb$package_name, p.rdb$valid_body_flag
from rdb$packages p;

set term ^; --------------------------------- [ 2:begin ]
alter package pkg_test as
 begin
    procedure sp_test(a type of column tbl_test.x);
end 
^ ------------------------------------------- [ 2:end ]
set term ;^
commit;

select 'After ALTER package statement, w/o any changes in it' as msg, p.rdb$package_name, p.rdb$valid_body_flag
from rdb$packages p;


set echo on;

drop table tbl_test;

set echo off;

show package pkg_test;

Output:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
MSG                             Before ALTER package statement, w/o any changes in it
RDB$PACKAGE_NAME                PKG_TEST                                                                                     
RDB$VALID_BODY_FLAG             1



MSG                             After ALTER package statement, w/o any changes in it
RDB$PACKAGE_NAME                PKG_TEST                                                                                     
RDB$VALID_BODY_FLAG              0 


drop table tbl_test;

set echo off;
PKG_TEST                        
Header source:
begin
    procedure sp_test(a type of column tbl_test.x);
end

Body source ( invalid ):
begin
    procedure sp_test (a type of column tbl_test.x) as
        declare c int;
    begin
        select count(*) from tbl_test t where t.x = :a into c;
    end
end


А теперь, граждане, смотрим внимательно: между парами маркеров [1:begin] ...[1:end] и [2:begin]...[2:end] - один и тот же код заголовка пакета. Я ничего в нём не менял, но его тело после этого сталп инвалидным.

В нашей доке, на стр. 186, сказано:ALTER PACKAGEОператор ALTER PACKAGE изменяет заголовок пакета. Позволяется изменять количество
и состав процедур и функций, их входных и выходных параметров. При этом исходный код
тела пакета сохраняется. Состояние соответствия тела пакета его заголовку отображается в
столбце RDB$PACKAGES.RDB$VALID_BODY_FLAG

Увы, но про смену rdb$valid_body_flag с 1 на 0 даже при "холостой" перекомпиляции заголовка я не вижу ничего.

В doc\sql.extensions\README.packages.txt про возможность удаления объектов, от которых зависит заголовок, сказано так, что я НХНП, к чему относится выделенное ниже красно-жырным местоимение 'it': к телу пакета или к "тому объекту", который можно дропать, невзирая на зависимость от него этого тела ? Вот цитата:doc\sql.extensions\README.packages.txtWhen a packaged routine uses a determined database object, it's registered on Firebird system
tables that the package body depends on that object . If you want to, for example, drop that
object
, you first need to remove who depends on it. As who depends on it is a package body,
you can just drop it even if some other database object depends on this package. When the body
is dropped, the header remains, allowing you to create its body again after changing it based
on the object removal.

PS. Кажется странным, что после дропания таблицы можно глядеть спокойненько в show package и там в ЗАГОЛОВКЕ пакета выводится ссылка на неё. Почему тогда заголовок пакета тоже не маркируется как инвалидный ?
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084110
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидпро возможность удаления объектов, от которых зависит заголовоктьфу, не заголовок, а тело пакета, конечно.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084124
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидА теперь, граждане, смотрим внимательно: между парами маркеров [1:begin] ...[1:end] и [2:begin]...[2:end] - один и тот же код заголовка пакета. Я ничего в нём не менял, но его тело после этого сталп инвалидным.
...
Увы, но про смену rdb$valid_body_flag с 1 на 0 даже при "холостой" перекомпиляции заголовка я не вижу ничего.

ИМХО, это косяк реализации, такого быть не должно. Адриано судя по всему считает, что если ты сделал ALTER PACKAGE то уж точно что-то там поменял и должен тут же пересоздать тело пакета. Впрочем данный флаг ни на что не влияет, хотя мог бы использоваться в IBE для индикации инвалидных пакетов.

ТаблоидPS. Кажется странным, что после дропания таблицы можно глядеть спокойненько в show package и там в ЗАГОЛОВКЕ пакета выводится ссылка на неё. Почему тогда заголовок пакета тоже не маркируется как инвалидный ?

Ты это проверял? По идее если есть ссылка на таблицу в заголовке, то удалить её нельзя. Если это не так, то я склонен считать это багом. А вот если зависимость только в теле, то наверное допустимо.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084130
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисданный флаг ни на что не влияетКак это "не влияет" ? именно из-за этого флага (когда RDB$VALID_BODY_FLAG стал = 0) я и смог дропнуть таблицу.

Симонов ДенисТаблоидPS. Кажется странным, что после дропания таблицы можно глядеть спокойненько в show package и там в ЗАГОЛОВКЕ пакета выводится ссылка на неё. Почему тогда заголовок пакета тоже не маркируется как инвалидный ?Ты это проверял?гы... а что, по-твоему, руками текст output'a сюда вбивал ?
давай, делай уже копипаст к себе и пробуй тоже :-)
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084132
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

вторую половину не заметил. В общем по мне так это бага. Заголовок - это интерфейс. Интерфейс не в коем случае не должен ссылаться на несуществующие объекты, примерно так же как и для обычных процедур/функций. Уж не знаю какие соображение по этому поводу у Адриано.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084138
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисУж не знаю какие соображение по этому поводу у Адриано.
"Сделать как в Оракуле."
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084144
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

1. такое ощущение что проверка валидации тела сильно упрощена. Т.е. она делается при создании/пересоздании тела пакета. А при любом изменении заголовка тупо сбрасывается в 0, даже если реального изменения не было. По хорошему полная валидация должна делаться не только при изменении создании/пересоздании тела, но и при изменении заголовка.
Хотя это не так страшно.

Кстати это хороших повод взять за правило сразу после изменения заголовка тут же менять и тело.

2. То что можно удалить объект на который имеется ссылка в заголовке это баг. То что можно удалить объект на который имеется ссылка в теле инвалидного пакета, но не имеется в заголовке это нормально.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084147
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСимонов ДенисУж не знаю какие соображение по этому поводу у Адриано.
"Сделать как в Оракуле."


ну тогда уж по полной делать надо с переменными пакета.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084150
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисну тогда уж по полной делать надо с переменными пакета.
Он решил ограничиться введением инвалидных объектов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084155
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТо что можно удалить объект на который имеется ссылка в заголовке это баг.Ну, значит так тому и быть. Пущай фиксит .
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084157
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну тогда это поведение не совсем последовательное. Ибо см. мой пример 18272295
Там почему, то пакет инвалидным не становится и дропать зависимые объекты не позволяет. А стоит только сделать тело инвалидным - пожалуйста, даже если в заголовке зависимость осталась.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084159
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисну тогда это поведение не совсем последовательное.
А когда это Адриано действовал последовательно? Не его это стиль...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084162
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

Замечание по поводу изменения заголовка.
Сравнением текста предыдущего и нового заголовка это не решить. По мне так добавление комментариев, изменения форматирования и др. это не те изменения заголовка которые должны приводить к инвалидации тела пакета.
...
Рейтинг: 0 / 0
Зависимости в пакетах Firebird 3
    #39084165
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисдобавление комментариев, изменения форматирования и др. это не те изменения заголовка которые должны приводить к инвалидации тела пакета.+1
А добавь эту мысль в тикет, плз. Пусть там "кое-кто" знает, что нас тут не один, а уже несколько таких придирчивых :-)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависимости в пакетах Firebird 3
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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