powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Новый компарер баз
60 сообщений из 60, показаны все 3 страниц
Новый компарер баз
    #39096041
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил на днях IBExpert на машине, где обновляются базы. И сразу наткнулся на следующие проблемы:
1. Папка Objects to alter. Раздел процедуры. Не нашел, как обновить выбранную ХП. в контекстном меню ничего нет, двойной клик не работает.
2. Тот же раздел. Тупой копипаст нового текста не отрабатывает, так как генерируется скрипт CREATE PROCEDURE, а должно быть CREATE OR ALTER.
3. Двойной клик на имени процедуры в скрипте не работает. Это очень неудобно.
4. Выбираю измененную таблицы. Посмотрел я на различия. Согласен с ними. И хочу получить скрипт, который применит эти изменения. Но такой кнопки нет.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096061
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А никто вот этого всего и не обещал, и не собирался делать. Компарер, как и прежде, генерирует ОДИН скрипт для полной синхронизации метаданных. Остальное исключительно для визуализации того, что и где изменилось.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096113
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пункт 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.
/******************************************************************************/
/****                 Deactivating dependencies of objects                 ****/
/******************************************************************************/
SET TERM ^ ;

ALTER TRIGGER BAT$RECEIPT$BATCH_AU0
AS
BEGIN
  EXIT;
END
^

ALTER TRIGGER BAT$RECEIPT$BATCH_BIU0
AS
BEGIN
  EXIT;
END
^

ALTER PROCEDURE CALC$ABONENT$FINE(
  ID_ABONENT /* DOM$ABONENT */ NUMERIC(9) NOT NULL,
  ID_PERIOD /* DOM$PERIOD */ INTEGER NOT NULL,
  DATE_REPAYMENT /* DOM$DATE */ DATE)
AS
BEGIN
  EXIT;
END
^


И пошла портянка ALTER TRIGGER и ALTER PROCEDURE на двадцать экранов. Что вызвало это, я не знаю.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096179
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не нужно делать. Я не буду исправлять несуществующие проблемы.
Не нравится генерируемый скрипт - делай все ручками.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096229
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertЯ не буду исправлять несуществующие проблемы.
Это такая тонкая шутка от разработчика? Я вам в предыдущем посте описал про существующую проблему.
Распишу еще подробнее. Берем раздел Objects to alter. Процедур там - 18 . Открываю Update Script. Там 89 ХП. Уже интересно. Смотрю список. Там зачищается и восстанавливается ХП "CHK$DOC$HOUSE$CHANGE_UNIT". Зависимостей от нее в базе нет. Внимание вопрос: зачем она зачищается? Я согласен это сделать, но напишите, зачем. Вдруг я проглядел что или другой разработчик поменял что-то?

Другой пример. Есть база, в которую надо применить изменения, но не все. Часть ХП и триггеров оставить неизменными. Вот вижу изменен триггер. Смотрю что поменялось - это очень удобно. С изменениями согласен. Думаю, зачем я буду сейчас выполнять скрипт, я прямо сейчас его поменяю. А поменять - никак. Надо в эксплорере искать триггер по названию, и вносить туда правку. Когда было бы гораздо проще кликнуть на триггер в дереве и он открывается. Или прямо в редакторе поменять текст и скомпилировать, это было бы самое то.

Не хватает кнопок "Следующая разница" и "Предыдущая разница". Кликаю ХП, открывается дифф. Текста на 30 кб. И сижу, листаю экраны, в поисках изменения, которое в самом конце.

Мелкий недостаток. Создание уникального ключа. Здесь лишний пробел перед двоеточием:
Код: sql
1.
ALTER TABLE DOC$LAWSUIT$WRIT_OF_EXEC ADD CONSTRAINT UNQ1_DOC$LAWSUIT$WRIT_OF_EXEC UNIQUE (NUMBER) ;



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


Нет там описания проблемы. Есть жалоба на то, что скрипт большой, и непонимание того, что и для чего в этом скрипте.
Проблема - это когда сгенерированный скрипт не выполняется. Или когда после его выполнения компарер снова находит различия.

CyberMaxРаспишу еще подробнее. Берем раздел Objects to alter. Процедур там - 18 . Открываю Update Script. Там 89 ХП. Уже интересно.


Что интересного? Objects to alter показывает только процедуры, определения которых различаются.
В скрипте, разумеется, могут присутствовать не только они, но и другие процедуры, которые придется альтерить для разруливания зависимостей.

CyberMaxСмотрю список. Там зачищается и восстанавливается ХП "CHK$DOC$HOUSE$CHANGE_UNIT". Зависимостей от нее в базе нет. Внимание вопрос: зачем она зачищается? Я согласен это сделать, но напишите, зачем. Вдруг я проглядел что или другой разработчик поменял что-то?


Я не телепат. Раз компарер её чистит и восстанавливает, значит он нашел соответствующие зависимости. Компарер анализирует не RDB$DEPENDENCIES, а текст процедуры.


CyberMaxАлександр, новый вьювер расхождений мне понравился. Но вот эти мелочи делают его просто неудобным для работы.


Он для того, чтобы посмотреть, что в базе изменилось. И только. Никто и не планировал делать там то, что ты в нем ищешь.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096431
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertНет там описания проблемы. Есть жалоба на то, что скрипт большой, и непонимание того, что и для чего в этом скрипте.
Проблема - это когда сгенерированный скрипт не выполняется. Или когда после его выполнения компарер снова находит различия.
Проблема - это когда в скрипт попадает то, что раньше не попадало. Объясните мне в скрипте, для чего все эти запросы. Я их не понимаю.

IBExpertЧто интересного? Objects to alter показывает только процедуры, определения которых различаются.
В скрипте, разумеется, могут присутствовать не только они, но и другие процедуры, которые придется альтерить для разруливания зависимостей.
Пускай так.

IBExpertЯ не телепат. Раз компарер её чистит и восстанавливает, значит он нашел соответствующие зависимости. Компарер анализирует не RDB$DEPENDENCIES, а текст процедуры.
Отлично. Зависимостей от ХП нет. Но компарер что-то нашел. Напишите в скрипте, для чего он зачищает ХП, восстанавливает ее и затем еще прописывает примечание (sic!). Если всего лишь текст другой, зачем все эти телодвижения? За ними ускользает суть манипуляций. Мало того, что скрипт пухнет, так и не понятно, что там собственно делается. Я согласен подропать и заальтерить хоть все триггера с ХП, объясните только, для чего это. И почему этого нельзя избежать.

IBExpertОн для того, чтобы посмотреть, что в базе изменилось. И только. Никто и не планировал делать там то, что ты в нем ищешь.
Даже если не планировали. Но это достаточно очевидный и нужный функционал, чтобы реализовать его.
У вас базы с каким количеством метаданных? У меня в базе под 1500 ХП и 500 триггеров. В одной исключительной базе 50 таблиц, которые дропать нельзя (они только для этой базы), 15 ХП, которые обновлять нельзя, и 5 триггеров, которые тоже обновлять нельзя. Когда каждый запрос скрипта анализируется на предмет, применять его или нет для базы. И в один прекрасный день скрипт диффа становится больше в два раза, для чего все эти альтеры - непонятно, то ли поменял кто-то что-то где-то, то ли компарер недостаточно умный (например, старый не использовал ALTER DOMAIN, где это можно было, генерируя тысячи бесполезных запросов, когда можно было одним обойтись), то ли баг компарера.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096445
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxОтлично. Зависимостей от ХП нет. Но компарер что-то нашел. Напишите в скрипте, для чего он зачищает ХП, восстанавливает ее и затем еще прописывает примечание (sic!). Если всего лишь текст другой, зачем все эти телодвижения? За ними ускользает суть манипуляций. Мало того, что скрипт пухнет, так и не понятно, что там собственно делается. Я согласен подропать и заальтерить хоть все триггера с ХП, объясните только, для чего это. И почему этого нельзя избежать.


Не, извини. Я ликбез по зависимостям проводить не буду.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096480
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertНе, извини. Я ликбез по зависимостям проводить не буду.
Причем тут ликбез? Верните вот эти примечания:
Код: sql
1.
2.
3.
4.
5.
6.
/* Empty GET$ABONENT$EXEC_PROC_FOR_SELEC for drop DOC$LAWSUIT$EXEC_PROC(NUMBER) */
/* Empty OPER$CS$CREATE_STATEMENT for drop DOC$CS$STATEMENT(PASSPORT_NUMBER) */
/* Empty OPER$EXCEPTION$ANOTHER_BRANCH for drop SYS$LOG$EXCEPTION(TEXT) */
/* Empty CALC$ABONENT$MONTHS_DEBT for drop DIR$SERVICE$SERVICE(ID_PERIOD_BEGIN_MONTHS_DEBT) */
/*  Empty CALC$ABONENT$CHARGE_FINE for CALC$ABONENT$FINE(param list change)  */
/*  Empty OPER$DB_STATE$FINISH_ALIGNMENT_ for CALC$ABONENT$MONTHS_DEBT(param list change)  */


Благодаря им, я мог понять, что собственно делается и соптимизировать процесс обновления. А теперь там темный лес, я не понимаю, для чего половина альтеров. Или я не имею права знать, что случилось с ХП, что ее надо обновить?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096544
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxПричем тут ликбез? Верните вот эти примечания:


Нет, не верну. Алгоритм генерации скрипта изменился, и теперь все зависимости "обнуляются" в одном месте: в секции "Deactivating dependencies of objects". Подробно расписывать там, почему тот или иной объект деактивируется, я не буду. Хотя бы по той причине, что каждое конкретное "обнуление" может быть результатом не одной зависимости, а многих, причем не обязательно прямых, а опосредованных.

CyberMax
Благодаря им, я мог понять, что собственно делается и соптимизировать процесс обновления. А теперь там темный лес, я не понимаю, для чего половина альтеров. Или я не имею права знать, что случилось с ХП, что ее надо обновить?

Ничего с ней не случилось. Твоя ХП использует что-то, что модифицируется ниже в скрипте. Все.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096617
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если старый компарер не обновляет ХП, а новый обновляет, в чем причина?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096631
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxЕсли старый компарер не обновляет ХП, а новый обновляет, в чем причина?

Причина в изменившемся алгоритме. Ты мне погадать предлагаешь. Без текста процедуры даже. Откуда мне знать, почему старый не обновлял каку-то процедуру, а новый обновляет?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096914
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я никогда не пользовался компарером.

У меня вместо этого имелся скрипт "сделать как надо". Хотя Firebird - не лучшая база для таких вещей как раз из-за зависимостей, но работать в таком стиле можно. Скрипт был разбит на файлы по зависимостям и по темам. Файлы хранились в системе контроля версий.

Если над базой работают N разработчиков, они делают merge в системе хранения версий и таким образом сливают свои изменения.
Также легко узнать, что изменилось в базе, скажем, за последние полгода.

Плюс к тому был файл эволюции, где был отдельный кусочек кода на каждое изменение, непосильное скрипту, т.е., добавление поля в таблицу, модификация данных, и т.п.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39096918
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden> А я никогда не пользовался компарером.

Ну а?! Не надо путать компарер и скрипты обновлений -
последние есть у многих (вручную формируются или как -
другой вопрос), а компарер нужен для выявления различий
в двух БД (при чём не только метаданных).

> У меня вместо этого имелся скрипт "сделать как надо".
> Хотя Firebird - не лучшая база для таких вещей

Денис, Вы бы поосторожнее с такими заявлениями-то :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097057
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

компарер у меня тоже был. Он дампил все объекты в файл с определённой сортировкой. А потом winmerge-м сравниваем два текстовых файла. Правда, медленно работал. Но и нужен он был редко, поскольку вышеописанная система делала эту задачу мало актуальной.

Насколько я понимаю, смысл старого компарера в IBExpert состоял не в сравнении баз, а в написании скрипта, который приводит метаданные одной базы в соответствие с другой. Зачем ещё он был нужен, я не могу помыслить.

Касаемо неподходящести Firebird для таких вещей - это так. Из-за зависимости объектов, которая, к тому же, не целиком прописана в системных таблицах (по состоянию на 2.5) не так легко перестроить базу. В MS SQL с этим на порядок проще. Из этого ничего не следует в плане общего сравнения этих двух баз - они совершенно разные в очень многих отношениях, так что не напрягайся от этого чрезмерно :)
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097532
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenКасаемо неподходящести Firebird для таких вещей - это так.Сказал, как отрезал. :)
У нас компарер эксперта ровняет все как надо, да мелкие претензии есть, топик мой под это дело был, про вьюхи, но там ничего принципиального нет, так, косметика. Базы у нас по метаданным твоим не уступают, разве что вьюх посредников у нас не плодится таком кол-ве.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097546
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden> компарер у меня тоже был. ... Правда, медленно работал. Но и нужен он был редко

А зачем велосипед нужен-то?
Или он под все СУБД у тебя?

> Касаемо неподходящести Firebird для таких вещей - это так.
> Из-за зависимости объектов, которая, к тому же, не целиком
> прописана в системных таблицах (по состоянию на 2.5)

О чём конкретно речь ?
Вложенные зависимости имеются в виду?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097686
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskybuddenКасаемо неподходящести Firebird для таких вещей - это так.Сказал, как отрезал. :)
У нас компарер эксперта ровняет все как надо, да мелкие претензии есть, топик мой под это дело был, про вьюхи, но там ничего принципиального нет, так, косметика. Базы у нас по метаданным твоим не уступают, разве что вьюх посредников у нас не плодится таком кол-ве.

Моя фраза слегка выпала из контекста. Я имел в виду всего лишь то, что скрипт "сделать как надо" писать для Firebird сложнее, чем для MS SQL. В MS SQL не нужно озираться на зависимости объектов друг от друга. Пересоздавай любой объект. В Firebird зависимости мешают удалить объект, отсюда существенно возрастает сложность процесса и, собственно, отсюда и может возникнуть необходимость в каком-то специальном компарере.

Ivan_PisarevskyУ нас компарер эксперта ровняет все как надо, да мелкие претензии есть.
Если бы я своевременно нашёл этот компарер, есть небольшая вероятность, что не стал бы городить свою кухню.

Но всё же, если есть два разработчика и две разработческие базы, то технология со скриптом "как надо" и системой контроля версий помогает, а компарер - не поможет.

Т.е., компарер - это какая-то ущербная технология. Только оператор присваивания, без оператора сложения. На мой взгляд, нужно уходить от таких технологий. Моя практика показывает, что без IBExpert-ного компарера вполне можно обойтись.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097688
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА зачем велосипед нужен-то?
Или он под все СУБД у тебя?

Затем, что цель IBExpert-ного компарера - это привести базу A к базе Б. Для задачи сравнения баз он избыточен. Если изменилась одна процедура, но глубоко вложенная по графу вызовов, скрипт IBExpert-ного компарера может включать сотни SQL-предложений. И сиди, разбирайся, какие из них ничего не делают, кроме удаления с последующим воссозданием. Во всяком случае, это так для старого компаратора. Что там в новом IBExpert-е - я не видел.

Если же просто сделать дамп базы, как его делает isql, то там объекты не отсортированы. И опять же, там есть кое-что лишнее. Может, я просто не нашёл правильные ключи isql. В любом случае, написать этот компарер мне не составило труда.

О чём конкретно речь ?
Вложенные зависимости имеются в виду?

Я в этой теме последний раз был года два назад. Кажется, там не прописываются какие-то зависимости вьюх (в 2.1, во всяком случае, про 2.5 не знаю, эта тема не всплывала). Я эти зависимости отдельно прописывал руками в свою систему сборки-разборки. Я думаю, что IBExpert смотрит на исходники объектов для вычисления всех зависимостей и даже когда-то это здесь обсуждалось.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097700
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden
Моя фраза слегка выпала из контекста. Я имел в виду всего лишь то, что скрипт "сделать как надо" писать для Firebird сложнее, чем для MS SQL. В MS SQL не нужно озираться на зависимости объектов друг от друга. Пересоздавай любой объект. В Firebird зависимости мешают удалить объект, отсюда существенно возрастает сложность процесса и, собственно, отсюда и может возникнуть необходимость в каком-то специальном компарере.

наоборот механизм зависимостей существенно облегчает сопровождение БД. В MSSQL как раз таки можно грохнуть таблицу, которая использовалась в какой-то ХП или может быть в 10 ХП. А Узнаешь о том что они перестали работать через месяц. Вот веселуха то будет.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097735
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden> Но всё же, если есть два разработчика и две
budden> разработческие базы, то ... компарер - не поможет.
budden> ...
budden> Т.е., компарер - это какая-то ущербная технология.
budden> ...
budden> Затем, что цель IBExpert-ного компарера - это привести
budden> базу A к базе Б. Для задачи сравнения баз он избыточен.

Не улавливаю смысла в этом потоке мыслей. :)
Сравниваются две БД, формируется скрипт.
Что не устраивает, как надо и чем отличается
правильный (твой) компарер от описанного?

budden> Если изменилась одна процедура, но глубоко вложенная
budden> по графу вызовов, скрипт IBExpert-ного компарера может
budden> включать сотни SQL-предложений.

Не совсем понял. Во-первых, конкретно процедуру
можно редактировать, даже наплевав на зависимости.
Дропнуть нельзя, а изменить можно, даже наплевав на
несовместимость нового интерфейса с зависисящими
от неё объектами. Во-вторых, не знаю о каких сотнях и
какой вложенности ты говоришь, если в самом крайнем
случае достаточно занулить тело прямых зависимостей,
не трогая интерфейса, а затем восстановить - и всё.

Что в данном случае IBE делает не так и как надо?

budden> Я думаю, что IBExpert смотрит на исходники объектов для
budden> вычисления всех зависимостей и даже когда-то это здесь обсуждалось.

Я голову на отсечение не дам, но уверен, что это бред.
Т.е. IBE может, конечно, заглянуть внутрь зависимостей
для доп. определения чего-то там (прав, ещё чего-то),
но сами зависимости вычисляет по rdb$dependencies,
а не тупым парсингом. Саша как появится, надеюсь,
просветит на сей счёт, расставит точки на i.

budden> Моя практика показывает, что без
budden> IBExpert-ного компарера вполне можно обойтись.

Обойтись-то можно, но почему бы себе жизнь не упростить?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097740
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисbuddenМоя фраза слегка выпала из контекста. Я имел в виду всего лишь то, что скрипт "сделать как надо" писать для Firebird сложнее, чем для MS SQL. В MS SQL не нужно озираться на зависимости объектов друг от друга. Пересоздавай любой объект. В Firebird зависимости мешают удалить объект, отсюда существенно возрастает сложность процесса и, собственно, отсюда и может возникнуть необходимость в каком-то специальном компарере.

наоборот механизм зависимостей существенно облегчает сопровождение БД. В MSSQL как раз таки можно грохнуть таблицу, которая использовалась в какой-то ХП или может быть в 10 ХП. А Узнаешь о том что они перестали работать через месяц. Вот веселуха то будет.
Я не говорил о сопровождении вообще. Я говорил только о написании скрипта "сделать как надо".
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097746
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cкрипт "сделать как надо" нужно писАть не компарером, а вообще "вручную",
для нужной версии БД (и с опр. требованиями к предыдущей версии), ИМХО.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097747
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, я ж написал: а что, если разработчиков более одного?
Оба скопировали себе 1 числа базу TEST, затем один правил одну часть базы
в базе DEV1, другой правил другую часть базы в базе DEV2. Как теперь IBExpert поможет
7-го числа залить в базу TEST изменения из обоих DEV1 и DEV2? Насколько я понимаю - никак, только
ручная работа.

А если каждый из разработчиков представил разбитый на файлы скрипт "сделать как надо", то их
можно слить с помощью Mercurial-а (или другой системы контроля версий).
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097748
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

> Cкрипт "сделать как надо" нужно писАть не компарером, а вообще "вручную",
Да. Ты его один раз написал, а дальше только дописываешь.
Конечно, это тоже требует усилий. Работа вообще дело такое - на ней иногда нужно работать.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097749
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и плюс у меня там было кое-что для автоматизации, например, разборка зависимостей была автоматической.
Можно было ещё кое-что допилить, чтобы было его намного легче писать, но до этого руки не дошли.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097759
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden> Как теперь IBExpert поможет 7-го числа залить в базу TEST
budden> изменения из обоих DEV1 и DEV2? Насколько я понимаю -
budden> никак, только ручная работа.

1. Срванить D1 c TEST, получить скрипт1.
2. Срванить D2 c TEST, получить скрипт2.
3. Накатить скрипт1, скрипт2.
4. Разрулить проблему с несовместимостью
скриптов, если они есть.

В чём проблема, собсно? А если вручную
можно (т.е. каждый из разработчиков знает,
какие именно объекты нужно перенести, а не
"у меня БД правильная, слейте") - ещё проще.

> А если каждый из разработчиков представил разбитый
> на файлы скрипт "сделать как надо", то их можно слить
> с помощью Mercurial-а (или другой системы контроля версий).

Зачем их вообще сливать, тем более мерджерами/VCS,
если скрипты уже готовы? Выполни их и всё или даже
просто объедини в один скрипт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097803
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

Скрипт "сделать как надо" у меня делал как надо не только то, что
изменил разработчик, а всю базу. Он собирает абсолютно все
вьюхи, триггеры и хранимки.

Т.е., база становится "программой" и у неё есть кнопка "скомпилировать".

ПОэтому, когда два разрабочтика работают, каждый из них клонирует себе репозиторий
(Mercurial) с исходником серверной части, вносит в него сколько угодно изменнеий.

Когда наступает время сливаться, сливаем репозитории а потом пробуем скомпилировать то, что
в итоге получилось.

Также мы сливаем спец.файл, где написаны alter-ы для таблиц. Его, как правило, руками приходится править.

Но исходники хранимок, вьюх, триггеров, сливаются автоматически. Причём эта технология масштабируется
на большое число разработчиков.

Честно сказать, там были нерешённые вопросы. Например, если изменялась сигнатура взаимно рекурсивных
процедур, то это приходилось руками разруливать.

И иногда получалось, что процедура удалялась после того, как была создана, если порядок сборки неправильно описан.
Это и есть трудности Firebird. Но на это у меня были средства контроля, которые сообщали о том, что процедура такая-то
стёрта. Тогда нужно подправить порядок сборки. На самом деле, это можно было автоматизировать, просто руки не успели
дойти.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097827
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden> Скрипт "сделать как надо" у меня делал как надо не только то, что
budden> изменил разработчик, а всю базу. Он собирает абсолютно все
budden> вьюхи, триггеры и хранимки.

Не, я, конечно, не против вашего желания нажить себе
геморрой, но другим-то зачем советовать так мучаться?

> Также мы сливаем спец.файл, где написаны alter-ы для таблиц.
> Его, как правило, руками приходится править.

А, так у вас, по сути, сабжа и никакой автоматизации тут нет.

> И иногда получалось, что процедура удалялась после того,
> как была создана, если порядок сборки неправильно описан.
> Это и есть трудности Firebird.

Я не знаю, что у вас там не получилось и почему порядок
неправильный (в этом тоже FB виноват?), но, по сути, ХП
вообще никогда не нужно удалять при изменении - кроме
случаев, когда это самоцель - достаточно занулить её тело,
поработать с зависимостями и скомпилировать её обратно.

FB тут никаким боком, начиная с какой-то версии он даже
позволял работу с ХП, приводящую к невалидности других
ХП (и не только ХП, наверное, не помню). Собсно, что он
не позволяет (не позволял, как щас - ХЗ) - так это всякую
невалидность таблиц. Но тут все СУБД одинаковы, наверное
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097851
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, я хранимки и не удалял - именно обнулял тело.

Альтеры таблиц составляют малую часть всех изменений.

Ну в общем, не убедил вас - и ладно. Главное, чтобы меня услышал автор IBExpert, впрочем даже и это не столь
важно.

Я этим способом пользовался около 10 лет на MS SQL и на Firebird и нахожу его единственно правильным.

Скрипты - система контроля версий - скрипты эволюции - сборка серверной части из скриптов "как надо".

Если ещё буду работать с любой СУБД - буду делать только так.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097949
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЯ голову на отсечение не дам, но уверен, что это бред.
Т.е. IBE может, конечно, заглянуть внутрь зависимостей
для доп. определения чего-то там (прав, ещё чего-то),
но сами зависимости вычисляет по rdb$dependencies,
а не тупым парсингом. Саша как появится, надеюсь,
просветит на сей счёт, расставит точки на i.


Расставляю... RDB$DEPENDENCIES вообще не анализируется. Потому что в скриптах ее нет. А если есть механизм для анализа зависимостей в скрипте, то зачем использовать другой для анализа зависимостей в базе?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39097959
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenГлавное, чтобы меня услышал автор IBExpert

Честно говоря, я твою мысль в отношении компарера не понял.
Он делает то, что должен делать, для чего задумывался. Плохо или хорошо - это другой вопрос.
Твоя-то идея в чем заключается?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39098901
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert> Расставляю... RDB$DEPENDENCIES вообще не анализируется.
IBExpert> Потому что в скриптах ее нет. А если есть механизм для анализа
IBExpert> зависимостей в скрипте, то зачем использовать другой для ...

Я не очень понял, что ты имеешь в виду под "анализом зависимостей
в скрипте" (чего там анализировать? пустышки ХП, триггеры в конце,
сначала таблицы, потом вьюхи т .д.), но я имел в виду редактирование
ХП - никогда не поверю, что для анализа зависимых от неё объектов
ты какие-то там скрипты формируешь и анализируешь.

Компарер-то сам по себе никаких зависимостей не "анализирует", или ты
результирующий скрипт анализируешь для упорядочивания операторов?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Новый компарер баз
    #39099077
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамКомпарер-то сам по себе никаких зависимостей не "анализирует", или ты
результирующий скрипт анализируешь для упорядочивания операторов?


Компарер анализирует зависимости, чтобы сгенерировать корректный скрипт обновления.
Так вот он не таблицу зависимостей анализирует, а DDL объектов БД.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39099989
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, я тебе на почту написал, тема - "ответ на тему с sql.ru"
...
Рейтинг: 0 / 0
Новый компарер баз
    #39100086
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вставлю свои пять копеек.

тоже столкнулся. изменил одну процедуру. в ней была использована вьюха.

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

однако на базе стоит логирование изменений метаданных. там отражено только изменение одной процедуры.


и было еще такое. сравнил базы. накатил скрипт. в процессе выполнения ругнулся, что у какого-то поля вьюхи есть зависимости. однако после повторного сравнения баз разницы не было найдено.

по всей видимости ругнулся он на поле вьюхи, которая была вытянута из базы по зависимостям. те в принципе не измененная. вот выполнение скрипта на нем и споткнулось. и по этому повторное сравнение и не нашло изменений. тк по сути эта вьюха была выбрана по "глубоким" зависимостям.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39100172
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenIBExpert, я тебе на почту написал, тема - "ответ на тему с sql.ru"

Нет ничего, только в спаме про "невидимые бюстгальтеры". Не твое? :)
Пиши здесь, чё стесняться-то?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39100174
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqтоже столкнулся. изменил одну процедуру. в ней была использована вьюха.

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


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

мастер база имеет индексы
Код: sql
1.
2.
CREATE INDEX REQUEST_MATERIALS_IDX2 ON REQUEST_MATERIALS (RQ_ID, WH_ID, M_ID);
CREATE INDEX REQUEST_MATERIALS_RETURN_IDX2 ON REQUEST_MATERIALS_RETURN (RQ_ID, WH_ID, M_ID);



в слайве индексы
Код: sql
1.
2.
CREATE INDEX REQUEST_MATERIALS_IDX2 ON REQUEST_MATERIALS (RQ_ID, WH_ID);
CREATE INDEX REQUEST_MATERIALS_RETURN_IDX2 ON REQUEST_MATERIALS_RETURN (RQ_ID, WH_ID);



после сравнение базы в IBExpert 2015.11.11.1 и выполнение скрипта индексы не изменились
Код: sql
1.
2.
CREATE INDEX REQUEST_MATERIALS_IDX2 ON REQUEST_MATERIALS (RQ_ID, WH_ID);
CREATE INDEX REQUEST_MATERIALS_RETURN_IDX2 ON REQUEST_MATERIALS_RETURN (RQ_ID, WH_ID);



после сравнения IBExpert 2015.7.26.1 все хорошо
Код: sql
1.
2.
CREATE INDEX REQUEST_MATERIALS_IDX2 ON REQUEST_MATERIALS (RQ_ID, WH_ID, M_ID);
CREATE INDEX REQUEST_MATERIALS_RETURN_IDX2 ON REQUEST_MATERIALS_RETURN (RQ_ID, WH_ID, M_ID);
...
Рейтинг: 0 / 0
Новый компарер баз
    #39101698
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noisy_by,

Проверил, проблем не обнаружил. Индексы пересоздаются и при добавлении поля в индекс, и при удалении поля из него.
Тесткейз можешь сделать? Одна табличка, пара индексов.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39101751
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqтоже столкнулся. изменил одну процедуру. в ней была использована вьюха.

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


Проверил на простом примере: вьюха + процедура, делающая выборку из вьюхи. При изменении текста процедуры только она альтерится, вьюху эксперт не трогает.

У тебя, вроде, случай сложнее, но без конкретного примера искать вслепую я не буду.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39102122
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, письмо было на info@ibexpert.com, 10-го в 19-00.

Здесь не стану писать.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39102374
noisy_by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз прогнал сравнение IBExpert 2015.11.12.1
получается эксперт увидел различия, но не удаляет индекс перед созданием нового

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
/*******************************************************************************
The next statement causes the following error:

This operation is not defined for system tables.
unsuccessful metadata update.
Index REQUEST_MATERIALS_IDX2 already exists.
*******************************************************************************/
CREATE INDEX REQUEST_MATERIALS_IDX2 ON REQUEST_MATERIALS (RQ_ID, WH_ID, M_ID);

/*******************************************************************************
The next statement causes the following error:

This operation is not defined for system tables.
unsuccessful metadata update.
Index REQUEST_MATERIALS_RETURN_IDX2 already exists.
*******************************************************************************/
CREATE INDEX REQUEST_MATERIALS_RETURN_IDX2 ON REQUEST_MATERIALS_RETURN (RQ_ID, WH_ID, M_ID);
...
Рейтинг: 0 / 0
Новый компарер баз
    #39102530
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noisy_byполучается эксперт увидел различия, но не удаляет индекс перед созданием нового


Я проверял - удаляет. Без воспроизводимого примера сложно понять, в чем проблема.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39102735
noisy_by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последняя версия 2015.11.13 индексы удалило.
Спасибо.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39103079
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertsergqтоже столкнулся. изменил одну процедуру. в ней была использована вьюха.

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


Проверил на простом примере: вьюха + процедура, делающая выборку из вьюхи. При изменении текста процедуры только она альтерится, вьюху эксперт не трогает.

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

вроде на 2015.11.13.1 не наблюдается ничего из мною перечисленного
...
Рейтинг: 0 / 0
Новый компарер баз
    #39103135
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя вроде осталось в некоторых случаях если дропается вьюха с триггерами, то почему-то в скрипте сначала дропается вьюха, потом создается триггер, а потом создается сама вьюха. На триггере ругается, что нет old.x.


И такую еще штуку заметил.

в одной из вьюх последняя строка - комментарий через двойное тире. и в конце строки точка с запятой. просто раньше эта срока была частью запроса. вот на этой вьюхе почему-то не ставится терминатор ; и выполнение скрипта на этой строке ругается.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39103342
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqхотя вроде осталось в некоторых случаях если дропается вьюха с триггерами, то почему-то в скрипте сначала дропается вьюха, потом создается триггер, а потом создается сама вьюха. На триггере ругается, что нет old.x.

Триггеры создаются после создания таблиц и вьюх. Не было бы вьюхи - ругалось бы на ее отсутствие, а не на old.x

sergqв одной из вьюх последняя строка - комментарий через двойное тире. и в конце строки точка с запятой. просто раньше эта срока была частью запроса. вот на этой вьюхе почему-то не ставится терминатор ; и выполнение скрипта на этой строке ругается.

Лучше вообще избавиться от такого комментария. В компарере-то я поправил, но попутно выяснилось, что при выполнении такого статемента через isc_dsql_execute_immediate точка с запятой все равно будет вырезана. И тексты представлений в базах будут различаться, что на следующем прогоне снова обнаружит компарер, и т.д.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39103939
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

вот маленький пример

2015.11.13.1

если синхронизировать t1 на t2, то сначала будет создан триггер на спецификацию ( в котором удаляется из вьюхи договора)
А потом уже сама вьюха договора.
И естественно облом выполнения скрипта
...
Рейтинг: 0 / 0
Новый компарер баз
    #39103947
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть простая тестовая база
Код: sql
1.
2.
CREATE TABLE BANK (TEST  INTEGER);
GRANT ALL ON BANK TO PUBLIC;


При сравнении ее самой с собой получаю
Код: sql
1.
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES ON BANK FROM PUBLIC;


Скорее всего дело в RDB$USER_PRIVILEGES, но сам туда ручками я не лазил.
В архиве тестовая база (fb 2.5)
https://yadi.sk/d/dLMduU9CkUPHz
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104029
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно.

Поддержу CyberMax.

есть вьюха. у нее три зависимых процедуры и 26 триггеров.
Добавил просто в текст вьюхи пробел. в итоге выгребло в скрипт все процедуры и триггера. Хотя Objects to alter - 1

ради интереса сделал тестовую таблицу. на нее вьюху и у нее триггер с исключением. в процедуре сделал добавление во вью.
Запустил процедуру. выдала исключение. поменял тест исключения. опять без перекомпиляции процедуры запустил ее.
текст исключения другой. значит процедуру не надо прекомпилировать )))

Можно было б сделать в компарере действительно кнопку выгрузки чистого скрипта. ведь компарер как то понимает, что Objects to alter всего один.. вот чтоб по этой кнопке и выгружало только 1 объект. а если будет в пользователя желание - все )
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104084
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqвот маленький пример

2015.11.13.1

если синхронизировать t1 на t2, то сначала будет создан триггер на спецификацию ( в котором удаляется из вьюхи договора)
А потом уже сама вьюха договора.
И естественно облом выполнения скрипта

t2 создает пустую базу, так и должно быть?
Ты что сравниваешь - скрипты или базы? Если сравнивать базы, созданные твоими скриптами, то скрипт правильный генерируется, выполняется без ошибок, последующее сравнение показывает отсутствие различий.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104085
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqесли синхронизировать t1 на t2, то сначала будет создан триггер на спецификацию ( в котором удаляется из вьюхи договора)
А потом уже сама вьюха договора.
И естественно облом выполнения скрипта

Сравнил скрипты компарером - тоже корректный скрипт выдал.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104140
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк ЕвгенийЕсть простая тестовая база
Код: sql
1.
2.
CREATE TABLE BANK (TEST  INTEGER);
GRANT ALL ON BANK TO PUBLIC;


При сравнении ее самой с собой получаю
Код: sql
1.
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES ON BANK FROM PUBLIC;


Скорее всего дело в RDB$USER_PRIVILEGES, но сам туда ручками я не лазил.


Там, оказывается, два одинаковых набора привилегий от DBA и SYSDBA. Вот эксперт в них и запутался.
Не очень понятно, как разруливать такие ситуации, пока сделал извлечение привилегий без привязки к grantor'у.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104167
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

сейчас на работе не вспомню, но t2 от t1 отличалась только отсутствием SPECS_VIEW_BODY_AD0

сейчас скачал 2015.11.16.1

в t2 отсутствует SPECS_VIEW_BODY_AD0. однако сравнение ничего не нашло (. Скрипт пуст
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104177
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergqсейчас на работе не вспомню, но t2 от t1 отличалась только отсутствием SPECS_VIEW_BODY_AD0

сейчас скачал 2015.11.16.1

в t2 отсутствует SPECS_VIEW_BODY_AD0. однако сравнение ничего не нашло (. Скрипт пуст

Удалил из второй базы SPECS_VIEW_BODY_AD0, сравнил - все нашлось.
...
Рейтинг: 0 / 0
Новый компарер баз
    #39104428
sergq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

как ни странно, но и у меня нашлось и сформировалось все корректно. но в первый раз не формировалось. чудеса да и только
...
Рейтинг: 0 / 0
Новый компарер баз
    #39118662
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый компарер красиво, но WTF...
Не первый раз замечаю проблему с порядком создания объектов когда происходит изменение в взаимозависимых объектах. Замечал и на триггерах с процедурами и на процедурах с процедурами. дойдут руки - сделаю тестовый пример. Старый компарер работал как часы...
...
Рейтинг: 0 / 0
Новый компарер баз
    #39118712
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFFНе первый раз замечаю проблему с порядком создания объектов когда происходит изменение в взаимозависимых объектах.

Проблема-то в чем конкретно выражается?
...
Рейтинг: 0 / 0
Новый компарер баз
    #39118743
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertFedorinoFFНе первый раз замечаю проблему с порядком создания объектов когда происходит изменение в взаимозависимых объектах.

Проблема-то в чем конкретно выражается?
Отправил две базы на личную почту.
Проблема в неработоспособном скрипте. надеюсь поправимо.
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Новый компарер баз
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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