powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Comparer - View
50 сообщений из 50, показаны все 2 страниц
Comparer - View
    #38785855
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда меняю вьюху, в дифф скрипте идет пара команд сначала дроп, потом крейт ор альтер. Зачем там дроп? попытка дропнуть вьюху приводит к тому, что еще кучу метаданных надо перетряхнуть. А если я вдруг где-то забыл селект из вьюхи закоммитить, то дропнуть вообще нельзя.
Почему не просто альтер?
...
Рейтинг: 0 / 0
Comparer - View
    #38787167
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что ALTER VIEW только в 2.5 появился.
...
Рейтинг: 0 / 0
Comparer - View
    #38787186
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

а нельзя добавить в опции компарера галку типа "use ALTER VIEW instead drop/create view" и разрешить ее для 2.5 и выше?
...
Рейтинг: 0 / 0
Comparer - View
    #38787350
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertПотому что ALTER VIEW только в 2.5 появился.слезно просимо фичу, если 2.5 то по-умолчанию не дропать бедную вьюху перед альтером. Опционально так себя или всегда не знаю как лучше, наверно тебе видней.
mvbв опции компарераИ чтобы оно работало в том числе и через ibescript.dll было бы вообще супер.
...
Рейтинг: 0 / 0
Comparer - View
    #38787946
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, ALTER VIEW во всех случаях срабатывает? Даже когда вьюха используется в процедуре, например, и в результате ALTER изменяется количество полей, возвращаемых вьюхой, или их тип?
...
Рейтинг: 0 / 0
Comparer - View
    #38788238
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА что, ALTER VIEW во всех случаях срабатывает?Я этого не утверждал. И не требую чтобы альтер срабатывал ВСЕГДА, я в курсе, что метаданные надо менять монопольно. Вопрос был про дроп, который сильно раздувает дифф скрипт.

Частое, относительно остальных изменений, это добавление полей и изменение внутренней логики вьюхи, без уменьшения выходных параметров или изменения их типов.
Уже несколько раз сталкивался, что применение штатного дифф-а приводит к перекомпиляции кучи хранимок, тогда как применение руками одного альтера вполне решает задачу и ничего не надо перетряхивать.
Убирание дроп-а приведет к усложению дифф скрипта?
...
Рейтинг: 0 / 0
Comparer - View
    #38788381
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyУбирание дроп-а приведет к усложению дифф скрипта?

Я ж не зря спрашиваю, в любом ли случае сработает ALTER VIEW? Если он срабатывает не всегда, то как я должен определять, когда ALTER VIEW использовать, а когда нужно сначала подропать все зависимости??
...
Рейтинг: 0 / 0
Comparer - View
    #38788676
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо провести изыскания, бум ставить эксперимент. Пока что альтера хватало, вьюх не так много, я их разносил руками(когда ленился уводить базы приемники в шатдаун, только выгонял юзеров из соотв. АРМа), потом обычным (подзывая экпертовскую либу) компарером.

Может как вариант, когда я начинаю компарить 2 базы у меня в источнике вполне консистентые метаданные, те хранимки, которые зависят от вьюхи и попадают в дифф сначала сделать вида begin suspend(exit);end ты это уже умеешь в других случаях, потом проальтерить вьюху, потом уже новыми телами процедуры.

Если более формально:
1. находим изменившуюся вьюху.
2. находим изменившиеся хранимки, с депенденсами от этой самой вьюхи.
3. зачищаем текст хранимок
4. альтер вьюхи
5. заливаем текст хранимок.
...
Рейтинг: 0 / 0
Comparer - View
    #38789506
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyЕсли более формально:
1. находим изменившуюся вьюху.
2. находим изменившиеся хранимки, с депенденсами от этой самой вьюхи.
3. зачищаем текст хранимок
4. альтер вьюхи
5. заливаем текст хранимок.

Ну и чем это по сути отличается от того, что есть сейчас? Вместо ALTER делается DROP и CREATE, а все остальное не меняется.
Про незакомиченный селект из вьюхи не будем: предполагается, что скрипт накатывается на базу в монопольном режиме.
...
Рейтинг: 0 / 0
Comparer - View
    #38789887
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertНу и чем это по сути отличается от того, что есть сейчас?
1. Не трогаем те хранимки, которые не менялись в источнике.
2. Нет дроп-а вьюхи.

По первому пункту разница в дифф скрипте довольно значительна по объему.

IBExpertПро незакомиченный селект из вьюхи не будем: предполагается, что скрипт накатывается на базу в монопольном режиме.Не будем.
...
Рейтинг: 0 / 0
Comparer - View
    #38790219
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky1. Не трогаем те хранимки, которые не менялись в источнике.
2. Нет дроп-а вьюхи.


1. Как это не трогаем? Трогаем все, что использует изменившуюся вьюху. Телепатера у меня нет.
2. Да без разницы уже, когда зависимостей нет.
...
Рейтинг: 0 / 0
Comparer - View
    #38790464
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertТелепатера у меня нет.Не надо телепатора, все вполне логично. Нашли вьюху, которая изменилась, потом находим все связанные с ней хранимки, которые тоже изменились (те что не менялись не трогаем). Если вьюха менялась так, что не менялись связанные хранимки, то вполне достаточно просто альтер вьюхи (это я проверил).
IBExpertДа без разницы уже, когда зависимостей нет.Истребление зависимостей зело раздувает скрипт, потом трудно понять, что же на самом деле поменялось и применяется он дольше, особенно с филиальными базами, которые сидят на не шибко широком интернет канале.
...
Рейтинг: 0 / 0
Comparer - View
    #38794697
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyНе надо телепатора, все вполне логично. Нашли вьюху, которая изменилась, потом находим все связанные с ней хранимки, которые тоже изменились (те что не менялись не трогаем). Если вьюха менялась так, что не менялись связанные хранимки, то вполне достаточно просто альтер вьюхи (это я проверил).

Это слишком муторно, заниматься этим сейчас я совершенно точно не буду.

Ivan_PisarevskyИстребление зависимостей зело раздувает скрипт, потом трудно понять, что же на самом деле поменялось и применяется он дольше, особенно с филиальными базами, которые сидят на не шибко широком интернет канале.

А что делать? Зато универсально.
...
Рейтинг: 0 / 0
Comparer - View
    #38795097
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertЭто слишком муторноМожно изложить чуть проще: альтерим изменившиеся процедуры как обычно(у кого нет депенденсов на вьюхи). Те что завязаны на изменившиеся вьюхи альтерим в 2 этапа: сначала делаем их "пустотелыми", потом алтерим вьюхи, потом уже заливаем собственно тела в процедуры.

По большому счету мне кажется дешевле тупо проальтерить все хранимки в 2 этапа.
1. зачистили все хранимки.
2. проальтерили все вьюхи.
3. влили тела хранимок.
...
Рейтинг: 0 / 0
Comparer - View
    #38795391
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyПо большому счету мне кажется дешевле тупо проальтерить все хранимки в 2 этапа.
1. зачистили все хранимки.
2. проальтерили все вьюхи.
3. влили тела хранимок.

Дык, а сейчас как? Ну, кроме того, что в пункте 2 - drop и create view?
Я так понял, что весь сыр-бор как раз из-за того, что лишние процедуры "зачищаются", которые можно было бы и не трогать при alter view.

В любом случае, что-то серьезное в компарере я сейчас делать не буду. Он не мой, там только врубаться - ящик водки надо.
Вот буду под тройку его точить, тогда может быть...
...
Рейтинг: 0 / 0
Comparer - View
    #38795617
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertЯ так понял, что весь сыр-бор как раз из-за того, что лишние процедуры "зачищаются", которые можно было бы и не трогать при alter view.Весь сыр-бор в команде дроп, которая мне кажется лишней, зачистка лишних Хп это побочный эффект дроп-а (нежелательный).

IBExpertДык, а сейчас как?Не совсем так.

IBExpertВот буду под тройку его точить, тогда может быть...Спасибо, что не отказали.
...
Рейтинг: 0 / 0
Comparer - View
    #38795737
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyВесь сыр-бор в команде дроп, которая мне кажется лишней, зачистка лишних Хп это побочный эффект дроп-а (нежелательный).


Зачистка процедур все равно останется, даже с альтером.
...
Рейтинг: 0 / 0
Comparer - View
    #38796093
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertЗачистка процедур все равно останетсяЗачищать можно только те, что менялись в источнике, а не все.

Чую пошли на третий круг.
...
Рейтинг: 0 / 0
Comparer - View
    #38796194
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyЗачищать можно только те, что менялись в источнике, а не все.

Чую пошли на третий круг.

Ага:
http://www.sql.ru/forum/1122672/comparer-view?mid=16792805#16792805
...
Рейтинг: 0 / 0
Comparer - View
    #38796210
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша, будет возможность, погляди пожалуйста, для тройки, так для тройки, я так полагаю ты понял о чем я просил.

Проблема не является фатальной/блокирующей, но некоторые хлопоты доставляет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Comparer - View
    #39564260
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно повторить свою просьбу?

заменить 2 строки в скрипте drop+create на на один оператор create or alter для вьюх?

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

Если вьюху не дропать, то все срабатывает хорошо, я даже проверил, если из этой вьюхи есть недофетченный на клиента резалтсет и то алтер срабатывает. Хотя это и нарушения правила "апдейтить метаданные только монопольно".

Если изменилась вьюха, то делаем пустышками все завязанные с ней хранимки, делаем крейт ор алтер вьюхе, потом заливает тела хранимок обратно.
...
Рейтинг: 0 / 0
Comparer - View
    #39564337
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyЕсли изменилась вьюха, то делаем пустышками все завязанные с ней хранимки, делаем крейт ор алтер вьюхе, потом заливает тела хранимок обратно.

Можно я тоже повторю свой вопрос? Чем это принципиально отличается от того, что есть сейчас?
Я разницы не вижу.
...
Рейтинг: 0 / 0
Comparer - View
    #39564370
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дроп вьюхи требует ОБЯЗАТЕЛЬНО всех выгнать из базы. Альтер не требует.
...
Рейтинг: 0 / 0
Comparer - View
    #39564383
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyДроп вьюхи требует ОБЯЗАТЕЛЬНО всех выгнать из базы. Альтер не требует.

Понятно.
Костылик в предложенном виде я делать не буду: мороки много, а выхлоп околонулевой.
Если уж делать, то нормально. Т.е., вместо дропа - ALTER с фейковым селектом из RDB$DATABASE, с тем же набором полей тех же типов. Затем нормальный ALTER. Как-то так.
...
Рейтинг: 0 / 0
Comparer - View
    #39564399
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertТ.е., вместо дропа - ALTER с фейковым селектом из RDB$DATABASE, с тем же набором полей тех же типов. Затем нормальный ALTER.До такого простого маневра я что-то не догадался. Да, так пожалуй будет лучше, он отпустит депенденсы не хуже дропа.

Готов потестить, у меня есть и хранимки делающие селект из вьюх, и вюьхи селектящие из хранимок, рекурсивных только нет.
...
Рейтинг: 0 / 0
Comparer - View
    #39564458
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyГотов потестить

Будет готово - отпишусь сюда. Но это не на полчаса работа.
...
Рейтинг: 0 / 0
Comparer - View
    #39564474
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо.
...
Рейтинг: 0 / 0
Comparer - View
    #39567568
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй в сегодняшнем билде. Пока только в эксперте, там галка новая есть "ALTER views instead of DROP/CREATE".
...
Рейтинг: 0 / 0
Comparer - View
    #39567657
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверю сегодня-завтра.
...
Рейтинг: 0 / 0
Comparer - View
    #39568376
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал, докладываю:

1. Есть нюанс, если поле наследуется прямиком от таблицы, то все ОК, тип правильный.
Если же от хранимки, или обернут какой-нибудь функцией, например простейший случай:
cast(0 as numeric (15,3))
то в заглушке стоит тип bigint.
Насколько это плохо пока не соображу, наблюдаю, может и так сойдет.

2. Пустышка процедуры, которая подпитывает вьюху создается после самой вьюхи, что плохо. Добавляю выходной параметр в хранимку, потом его добавляю во вьюху и компарю все это дело. Скрипт обламывается в итоге. По идее надо сначала изготовить все пустышки, потом уж наполнять.

Есть пример, на котором я упражнялся, но он гад 3600 строк. нужен?
...
Рейтинг: 0 / 0
Comparer - View
    #39568387
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужен пример, я тогда сделаю его с нуля, а то копаться в моих каракулях будет точно муторно.
...
Рейтинг: 0 / 0
Comparer - View
    #39568408
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тесткейз по проблеме №2, создаем объекты:

Код: sql
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
SET NAMES UTF8;

SET SQL DIALECT 3;

CONNECT ***;

SET AUTODDL ON;

/******************************************************************************/
/****                      Creating stored procedures                      ****/
/******************************************************************************/
SET TERM ^ ;

CREATE PROCEDURE SP(
  ID INTEGER)
RETURNS (
  F1 INTEGER,
  F2 BIGINT,
  F3 VARCHAR(50) /* COLLATE NONE - default */)
AS
BEGIN
  SUSPEND;
END
^


/******************************************************************************/
/****              Creating tables (without computed fields)               ****/
/******************************************************************************/
SET TERM ; ^

CREATE TABLE TBL (
    ID INTEGER,
    BG BIGINT,
    NM NUMERIC(15,2),
    VC VARCHAR(100) /* COLLATE NONE - default */);


/******************************************************************************/
/****                            Creating views                            ****/
/******************************************************************************/
CREATE VIEW V1 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3)
AS
select t.id, t.bg, t.nm, t.vc, s.f1,  s.f2, s.f3
from tbl t left join sp(t.id) s on 1=1;


/******************************************************************************/
/****                      Altering stored procedures                      ****/
/******************************************************************************/
SET TERM ^ ;

ALTER PROCEDURE SP(
  ID INTEGER)
RETURNS (
  F1 INTEGER,
  F2 BIGINT,
  F3 VARCHAR(50) /* COLLATE NONE - default */)
AS
begin
  f1 = 1;
  f2 = 100500100500;
  f3 = 'blah-blah-blah';
  suspend;
end
^


/******************************************************************************/
/****                     Granting missing privileges                      ****/
/******************************************************************************/
SET TERM ; ^

GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON V1 TO SYSDBA WITH GRANT OPTION;

GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON TBL TO SYSDBA WITH GRANT OPTION;

GRANT EXECUTE ON PROCEDURE SP TO SYSDBA WITH GRANT OPTION;

GRANT SELECT ON TBL TO VIEW V1;

GRANT EXECUTE ON PROCEDURE SP TO VIEW V1;



добавляем поле, получаем скрипты в зависимости от галки или-или

Код: sql
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
SET NAMES UTF8;

SET SQL DIALECT 3;

CONNECT ****;

SET AUTODDL ON;

/******************************************************************************/
/****                 Deactivating dependencies of objects                 ****/
/******************************************************************************/
DROP VIEW V1;


/******************************************************************************/
/****                            Creating views                            ****/
/******************************************************************************/
CREATE VIEW V1 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4)
AS
select t.id, t.bg, t.nm, t.vc, s.f1,  s.f2, s.f3, s.f4
from tbl t left join sp(t.id) s on 1=1;


/******************************************************************************/
/****            Altering stored procedures (with empty bodies)            ****/
/******************************************************************************/
SET TERM ^ ;

ALTER PROCEDURE SP(
  ID INTEGER)
RETURNS (
  F1 INTEGER,
  F2 BIGINT,
  F3 VARCHAR(50) /* COLLATE NONE - default */,
  F4 NUMERIC(15,2))
AS
BEGIN
  SUSPEND;
END
^


/******************************************************************************/
/****                      Altering stored procedures                      ****/
/******************************************************************************/
ALTER PROCEDURE SP(
  ID INTEGER)
RETURNS (
  F1 INTEGER,
  F2 BIGINT,
  F3 VARCHAR(50) /* COLLATE NONE - default */,
  F4 NUMERIC(15,2))
AS
begin
  f1 = 1;
  f2 = 100500100500;
  f3 = 'blah-blah-blah';
  f4 = -1;
  suspend;
end
^


/******************************************************************************/
/****                     Granting missing privileges                      ****/
/******************************************************************************/
SET TERM ; ^

GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON V1 TO SYSDBA WITH GRANT OPTION;

GRANT SELECT ON TBL TO VIEW V1;

GRANT EXECUTE ON PROCEDURE SP TO VIEW V1;



Код: sql
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
SET NAMES UTF8;

SET SQL DIALECT 3;

CONNECT ****;

SET AUTODDL ON;

/******************************************************************************/
/****                 Deactivating dependencies of objects                 ****/
/******************************************************************************/
ALTER VIEW V1 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3)
AS
SELECT
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS NUMERIC(15,2)),
    CAST(NULL AS VARCHAR(100)),
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS VARCHAR(50))
FROM RDB$DATABASE;


/******************************************************************************/
/****                            Creating views                            ****/
/******************************************************************************/
ALTER VIEW V1 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4)
AS
select t.id, t.bg, t.nm, t.vc, s.f1,  s.f2, s.f3, s.f4
from tbl t left join sp(t.id) s on 1=1;


/******************************************************************************/
/****            Altering stored procedures (with empty bodies)            ****/
/******************************************************************************/
SET TERM ^ ;

ALTER PROCEDURE SP(
  ID INTEGER)
RETURNS (
  F1 INTEGER,
  F2 BIGINT,
  F3 VARCHAR(50) /* COLLATE NONE - default */,
  F4 NUMERIC(15,2))
AS
BEGIN
  SUSPEND;
END
^


/******************************************************************************/
/****                      Altering stored procedures                      ****/
/******************************************************************************/
ALTER PROCEDURE SP(
  ID INTEGER)
RETURNS (
  F1 INTEGER,
  F2 BIGINT,
  F3 VARCHAR(50) /* COLLATE NONE - default */,
  F4 NUMERIC(15,2))
AS
begin
  f1 = 1;
  f2 = 100500100500;
  f3 = 'blah-blah-blah';
  f4 = -1;
  suspend;
end
^

SET TERM ; ^



результат очевидный облом.
...
Рейтинг: 0 / 0
Comparer - View
    #39568411
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут меня еще посетила мысль, а не мало ли будет создание одной пустой вьюхи? может надо создать сначала пустышку со старым набором полей, потом пустышки процедур, потом пустышку вьюхи с новым набором полей и уже потом наполнять пустышки?
...
Рейтинг: 0 / 0
Comparer - View
    #39568432
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
встали в клинч на домене
...
Рейтинг: 0 / 0
Comparer - View
    #39568433
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оппонент
...
Рейтинг: 0 / 0
Comparer - View
    #39568452
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С доменами явных манипуляций не проводил, пользовательских доменов не создавал, за основу была взята типовая база эмплоее.
...
Рейтинг: 0 / 0
Comparer - View
    #39569018
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky1. Есть нюанс, если поле наследуется прямиком от таблицы, то все ОК, тип правильный.
Если же от хранимки, или обернут какой-нибудь функцией, например простейший случай:
cast(0 as numeric (15,3))
то в заглушке стоит тип bigint.
Насколько это плохо пока не соображу, наблюдаю, может и так сойдет.


Ну, значит, во вьюхе это поле именно такого типа. Или нет? Я ж их не сам придумываю, а прямиком из системных таблиц беру.
А если во вьюхе таки это поле не bigint, тогда на баг похоже.

Ivan_Pisarevsky2. Пустышка процедуры, которая подпитывает вьюху создается после самой вьюхи, что плохо. Добавляю выходной параметр в хранимку, потом его добавляю во вьюху и компарю все это дело. Скрипт обламывается в итоге. По идее надо сначала изготовить все пустышки, потом уж наполнять.

Вынес процедуры выше, сейчас вроде нормально на твоем примере отрабатывает.

Ivan_Pisarevskyтут меня еще посетила мысль, а не мало ли будет создание одной пустой вьюхи? может надо создать сначала пустышку со старым набором полей, потом пустышки процедур, потом пустышку вьюхи с новым набором полей и уже потом наполнять пустышки?


С ходу в этом не видно смысла. Перед созданием пустышки все зависящие от этой вьюхи процедуры/триггеры/итд уже должны быть "обнулены". Хотя надо проверить этот момент...

С доменом пока не разбирался. Там не массив ли объявлен?
...
Рейтинг: 0 / 0
Comparer - View
    #39569188
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertНу, значит, во вьюхе это поле именно такого типа. Или нет? Я ж их не сам придумываю, а прямиком из системных таблиц беру.У меня numeric(15.3) в пустышке bigint. Попробую на днях сделать воспроизводимый пример, чтоб тебе не ковырять тысячи строк.

IBExpertВынес процедуры выше, сейчас вроде нормально на твоем примере отрабатывает.Это хорошо, проверю.

IBExpertС доменом пока не разбирался. Там не массив ли объявлен?массивов нет. просто пара вьюх каскадом и хранимки сплетенные с вьюхами. Я когда-то давно на это уже натыкался, заменил в параметрах хранимки объявление с типов на явные пользовательские домены и проблема ушла. На тестовой базе сейчас случайно наткнулся, подумал будет интересно.
Ворэраунд я знаю, если вьюха подпитывается хранимкой, то в ней надо объявить поля явными доменами, тогда компарится нормально.
...
Рейтинг: 0 / 0
Comparer - View
    #39569649
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyвстали в клинч на домене

Ну, собственно, что и требовалось доказать: не всякий ALTER сработает без предварительного вычищения зависимостей. Даже если имена, количество и типы полей вьюхи до и после изменения совпадают.
В результате все равно все зависимости чистить.
...
Рейтинг: 0 / 0
Comparer - View
    #39594869
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyУ меня numeric(15.3) в пустышке bigint. Попробую на днях сделать воспроизводимый пример, чтоб тебе не ковырять тысячи строк.На простом примере так и не воспроизвел, хотя и предпринял несколько попыток. Есть подозрение, что на это проблему можно забить, ну поживет несколько миллисекунд пустышка с другими типами полей, и фиг с ней.

По поводу доменов: компарер считает, что домен освободился и пытается удалять системный домен вида rdb$номер. Может его и не надо удалять? Ну будет болтаться в базе неиспользуемый домен, в самом худшем случае, кому от этого вред?

В целом с вьюхами стало поприятней работать. Ты не обновлял ДЛЛ библиотеку под этот функционал, который уже есть в эксперте? Обнови, если не трудно и библиотечку скриптера.
...
Рейтинг: 0 / 0
Comparer - View
    #39594976
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyПо поводу доменов: компарер считает, что домен освободился и пытается удалять системный домен вида rdb$номер. Может его и не надо удалять? Ну будет болтаться в базе неиспользуемый домен, в самом худшем случае, кому от этого вред?

Не надо, конечно. Только я уже давно забыл, что там и к чему в твоем примере было.

Ivan_PisarevskyВ целом с вьюхами стало поприятней работать. Ты не обновлял ДЛЛ библиотеку под этот функционал, который уже есть в эксперте? Обнови, если не трудно и библиотечку скриптера.

Сборки от 6 января лежат, все там должно быть.
...
Рейтинг: 0 / 0
Comparer - View
    #39595021
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertНе надо, конечно. Только я уже давно забыл, что там и к чему в твоем примере было.Пара баз выше приложена, попробовал их сейчас скомпарить повторно на текущей версии, клинча с доменами нет, видимо меры ты уже предпринял, а я этот момент прошляпил, единственный небольшой безобидный дефект, пустышка вьюхи создается дважды, см скрипт под спойлером.

Код: sql
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
/* Server version: LI-V6.3.3.32794 Firebird 3.0 
   SQLDialect: 3. ODS: 12.0. Forced writes: On. Sweep interval: 20000.
   Page size: 8192. Cache pages: 2048 (16384 Kb). Read-only: False. */
SET CLIENTLIB 'C:\Program Files\Firebird\Firebird_3_0\fbclient.dll';
SET NAMES UTF8;

SET SQL DIALECT 3;

CONNECT '192.168.2.29:dst1.fdb' USER 'SYSDBA' PASSWORD '******';

SET AUTODDL ON;

/******************************************************************************/
/****                 Deactivating dependencies of objects                 ****/
/******************************************************************************/
SET TERM ^ ;

ALTER PROCEDURE SP2
RETURNS (
  F5 VARCHAR(10) /* COLLATE NONE - default */)
AS
BEGIN
  SUSPEND;
END
^

SET TERM ; ^

ALTER VIEW V2 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4,
    ID2,
    BG2,
    NM2,
    VC2)
AS
SELECT
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS NUMERIC(18,2)),
    CAST(NULL AS VARCHAR(100)),
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS VARCHAR(50)),
    CAST(NULL AS NUMERIC(18,2)),
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS NUMERIC(18,2)),
    CAST(NULL AS VARCHAR(200))
FROM RDB$DATABASE;

ALTER VIEW V2 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4,
    ID2,
    BG2,
    NM2,
    VC2)
AS
SELECT
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS NUMERIC(18,2)),
    CAST(NULL AS VARCHAR(100)),
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS VARCHAR(50)),
    CAST(NULL AS NUMERIC(18,2)),
    CAST(NULL AS INTEGER),
    CAST(NULL AS BIGINT),
    CAST(NULL AS NUMERIC(18,2)),
    CAST(NULL AS VARCHAR(200))
FROM RDB$DATABASE;


/******************************************************************************/
/****                       Creating/altering views                        ****/
/******************************************************************************/
ALTER VIEW V1 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4,
    ID2,
    BG2,
    NM2,
    VC2,
    F5,
    F6)
AS
select coalesce(t.id+1, 123), t.bg, t.nm, t.vc,
       s.f1, s.f2, s.f3, s.f4,
       cast (t.id  as integer), cast(t.bg as bigint), cast(t.nm as numeric(15,2)), cast(t.vc as varchar(200)),
       coalesce(s.f5,  '1111'), s.f6
from tbl t left join sp(t.id) s on 1=1;

ALTER VIEW V2 (
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4,
    ID2,
    BG2,
    NM2,
    VC2)
AS
select
    ID,
    BG,
    NM,
    VC,
    F1,
    F2,
    F3,
    F4,
    ID2,
    BG2,
    NM2,
    VC2 from v1;


/******************************************************************************/
/****                   Restoring deactivated procedures                   ****/
/******************************************************************************/
SET TERM ^ ;

ALTER PROCEDURE SP2
RETURNS (
  F5 VARCHAR(10) /* COLLATE NONE - default */)
AS
begin
  for select f5 from v1 into :f5 do
  suspend;
end
^


SET TERM ; ^



IBExpertСборки от 6 января лежат, все там должно быть.Спасибо, проверю.
...
Рейтинг: 0 / 0
Comparer - View
    #39595082
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertСборки от 6 января лежат, все там должно быть.Проверил, при вызове ДДЛ-ки происходит AV при попытке скормить опцию "AlterViews". Она точно синхронизирована после добавление оной опции?
...
Рейтинг: 0 / 0
Comparer - View
    #39595128
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyПроверил, при вызове ДДЛ-ки происходит AV при попытке скормить опцию "AlterViews". Она точно синхронизирована после добавление оной опции?

Точно. Неизвестные опции просто игнорируются, так что если AV именно с этой опцией лезет, то движок точно про нее знает.
А без нее как? Тот же блок из эксперта без AV выполняется?
...
Рейтинг: 0 / 0
Comparer - View
    #39595148
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА без нее как?без - все ОК. Просто вызов с галками из эксперта - ОК. вызов скрипта из эксперта на картинке.
...
Рейтинг: 0 / 0
Comparer - View
    #39595315
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот у меня на твоих базах (те, что выше в топике) не воспроизводится.
Версия эксперта какая? Если базу саму с собой сравнивать, тоже AV лезет?
...
Рейтинг: 0 / 0
Comparer - View
    #39595405
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertВот у меня на твоих базах (те, что выше в топике) не воспроизводится.аналогично.
IBExpertВерсия эксперта какая?2018,1,27,1
IBExpertЕсли базу саму с собой сравнивать, тоже AV лезет?нет.
Если столкнуть рабочую с тестовой(тестовая отличается), то вот такое сообщение(это просто в эксперте с выставлением галок мышкой):
ошибкаError Message:
----------------------------------------
Access violation at address 00811EEF in module 'ibexpert.exe'. Read of address 4F4C5F6E

[00811EEF] dbcComp_Viw.TViwData.GetFlds (Line 78, "dbcComp_Viw.pas" + 2) + $5
[00403BDF] System.@HandleAnyException + $33
[00812179] dbcComp_Viw.TViwData.DummyDef (Line 100, "dbcComp_Viw.pas" + 1) + $33
[00803851] dbcDBComparer.TDBComparer.ComposeDeactivateObjectsScript (Line 961, "dbcDBComparer.pas" + 41) + $26
[0080218B] dbcDBComparer.TDBComparer.CompareDatabases (Line 419, "dbcDBComparer.pas" + 47) + $2
[00F10BAC] DBCompareF.TDBCompareForm.CompareDBs (Line 563, "DBCompareF.pas" + 198) + $B
[00F0FF14] DBCompareF.TDBCompareForm.actCompareExecute (Line 335, "DBCompareF.pas" + 3) + $2
[004DF86C] dxBar.TdxBarItemControl.ControlUnclick (Line 22796, "dxBar.pas" + 28) + $7


Могу выслать скрипты создания баз на почту в профиле или куда скажешь, мне бы не хотелось выкладывать оные публично.
...
Рейтинг: 0 / 0
Comparer - View
    #39595980
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyМогу выслать скрипты создания баз на почту в профиле или куда скажешь, мне бы не хотелось выкладывать оные публично.

Присылай на мыло, конечно.
...
Рейтинг: 0 / 0
Comparer - View
    #39597453
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

отравил.
...
Рейтинг: 0 / 0
Comparer - View
    #39597474
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я получил.
...
Рейтинг: 0 / 0
50 сообщений из 50, показаны все 2 страниц
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Comparer - View
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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