powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Контроль версий в FB
23 сообщений из 23, страница 1 из 1
Контроль версий в FB
    #39011698
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток,

хотелось бы нечто подобного как Visual Studio, дабы контроль версий для метаданных иметь. Причем не для всего дампа в целом а для каждой сущности (таблицы, процедуры, триггера итп) раздельно, что б и откатывать по отдельности можно было и историю смотреть итп. Соотв. можно было бы и проект для базы придумать (по тому же принципу как в VS).
Или на крайний случай, хотя бы экспорт метаданных для каждой сущности в отдельный файл с опцией если контрольная сумма файла не поменялась не перезаписывать, а там уж сами svn или кому что прикрутим. (без проверки контрольной суммы тоже в принципе можно обойтись, но тогда прийдётся копирование в проект самому выполнять).

Красивее конечно был бы первый вариант (с интеграцией svn в IBExpert итп), но как промежуточный второй тоже бы выручил, по сути экспорт метаданных разделяя сущности пофайлово не так уж сложно сделать? только систему именования файлов придумать, что думаю тоже труда не составит.

что скажете? наверняка идея уже витала?

Спасибо за ответ
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39011723
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoхотелось бы нечто подобного как Visual Studio, дабы контроль версий для метаданных иметь. Причем не для всего дампа в целом а для каждой сущности (таблицы, процедуры, триггера итп) раздельно, что б и откатывать по отдельности можно было и историю смотреть итп. Соотв. можно было бы и проект для базы придумать (по тому же принципу как в VS).

понимаешь ли сущности они связанными могут быть. И изменения в них тоже связанными. Так что только целиком для всей базы.

Mikhail TchervonenkoКрасивее конечно был бы первый вариант (с интеграцией svn в IBExpert итп), но как промежуточный второй тоже бы выручил, по сути экспорт метаданных разделяя сущности пофайлово не так уж сложно сделать? только систему именования файлов придумать, что думаю тоже труда не составит.

это конечно можно сделать вот только зачем. Как тебе удобно будет накатить обновления при изменении 5 процедур и трёх таблиц?
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39011728
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

Если я правильно понял мысль, тут все от принципа разработки идет. У нас в процессе разработки версионность контролируется системой контроля версий (капитан, ага). Другими словами, база данных - это набор скриптов, которые скармливаются isql-ю, а не fdb-файл. Если в базе что-то меняется, тогда результат оформляется в виде опять же скрипта с названием вида programname_1234.sql и сбрасывается в систему контроля версий.

Учитывая, что кроме метаданных в базе зачастую есть и какие-то начальные данные, от которых зависит работа базы и/или клиентских приложений, то контроль ТОЛЬКО метаданных (нам) не нужен от слова "совсем". А если прикручивать автоматизацию контроля и данных и метаданных, причем с кучей самых невообразимых фильтров для данных...

Короче, скрипты - первичны, все остальное (в рассматриваемом случае) - от лукавого.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012046
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот тут описывал свой вариант, вкратце - по команде из IBE экстрактится весь скрипт БД и запускается диалог коммита. Для небольших баз и одного разработчика хватает, на большие масштабы возможно надо модифицировать.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012053
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А лог изменений и скрипт апдейта БД от предыдущей версии до текущей - суть разные вещи, и смешивать их не стоит. Для примера можно взять некую ХП объемом в 64 кило текста и изменение, состоящее в замене - на + в одном единственном месте. Лог будет наглядным в одну строчку, а скрипт апдейта - всё те же 64 кило.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012056
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, в IBE есть и встроенная version history, а также возможность писать в лог все операции с метаданными
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012637
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMikhail Tchervonenkoхотелось бы нечто подобного как Visual Studio, дабы контроль версий для метаданных иметь. Причем не для всего дампа в целом а для каждой сущности (таблицы, процедуры, триггера итп) раздельно, что б и откатывать по отдельности можно было и историю смотреть итп. Соотв. можно было бы и проект для базы придумать (по тому же принципу как в VS).

понимаешь ли сущности они связанными могут быть. И изменения в них тоже связанными. Так что только целиком для всей базы.

Mikhail TchervonenkoКрасивее конечно был бы первый вариант (с интеграцией svn в IBExpert итп), но как промежуточный второй тоже бы выручил, по сути экспорт метаданных разделяя сущности пофайлово не так уж сложно сделать? только систему именования файлов придумать, что думаю тоже труда не составит.

это конечно можно сделать вот только зачем. Как тебе удобно будет накатить обновления при изменении 5 процедур и трёх таблиц?
это понятно, но тут больше интересует история изменений сущностей по отдельности нежели автоматизация обновлений при откате.
Скрипт обновления создаётся один раз и хранить его историю смысла нет (хоть он у нас и в svn тоже пихается). Можно конечно весь дамп пихать и потом сравнивать дампы целиком (что и делается) но на больших базах это трудоёмко и тебует больше времени. Опять же, хотелось бы уже в логе svn видеть что когда и кем изменилось а не выискивать это при сравнении дампов. По сути разбиение дампа на файлы с сущностями решило бы эту проблему. А для определения последоваьельности накатывания этих сущностей можно при генерации их нумеровать, тогда и последовательность не нарушится. Естественно если есть связь это уже на совести разработчика, тут никакой код нас не заменит.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012643
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalКстати, в IBE есть и встроенная version history, а также возможность писать в лог все операции с метаданными
если можно подробнее что Вы имеете тут ввиду, где это посмотреть? о каком пункте в меню IBex речь?
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012645
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoFr0sT-BrutalКстати, в IBE есть и встроенная version history, а также возможность писать в лог все операции с метаданными
если можно подробнее что Вы имеете тут ввиду, где это посмотреть? о каком пункте в меню IBex речь?
Для любого объекта базы данных - вкладка Version history. При первом обращении експерт спросит разрешения создать служебные таблицы для хранения истории.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012651
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineMikhail Tchervonenkoпропущено...

если можно подробнее что Вы имеете тут ввиду, где это посмотреть? о каком пункте в меню IBex речь?
Для любого объекта базы данных - вкладка Version history.
Упс, солгал. Только для вьюх, процедур и триггеров. Ну, домены и прочие ексепшены еще туда-сюда, а вот отстутствие этой фичи для таблиц делает ее слегка ненужной. ИМХО, конечно.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012675
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу, оно. Правда, сам не юзал.
А так для истории изменений, по-моему, одного скрипта со всеми метаданными базы вполне достаточно. Задачу быстрого поиска по объектам в логе можно решить административно, путем фиксации шаблона коммит-мессаги
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39012711
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Если просто видеть изменения метаданных - тогда согласен насчет полного скрипта. Более того, оно и без фиксации шаблона все будет видно. diff все покажет, а какой-нить TortoiseGIT/SVN еще и раскрасит в разные цвета.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39013162
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonline, не всегда. Например, мелкое изменение в середине длиннющей ХП - diff покажет несколько строк до и после, но не подхватит заголовок, а в Тортоизе замаешься искать название этой ХП. Возможно, есть какие-то хитрые настройки diff-a, чтобы идентифицировать блок с изменениями, но я такого не знаю. Зато при введении шаблона коммит-сообщения история по каждому объекту элементарно отфильтровывается.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39013199
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalв Тортоизе замаешься искать название этой ХП.по номеру строки в эталонном скрипте искать пробовал?
подозрительный номерок перед измененным куском
@@ -92,6 +92,7 @@
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39013607
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky, не в том проблема. Вот в окне открыта простыня на 20 экранов с кодом одной ХП и в середине нее изменение. Задача найти название этой ХП требует действий, времени и ни фига не автоматизируется.
А твой сценарий вообще жуть: посмотреть номер, запомнить его, открыть полный скрипт в редакторе, запустить диалог перехода к строке, ввести номер, перейти к строке, а дальше - упс... проматывать вручную вверх до заголовка. Либо юзать продвинутые редакторы с деревом объектов.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39013715
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalВот в окне открыта простыня на 20 экранов с кодом одной ХП и в середине нее изменение.Кто не может структурировать свои мысли и пишет портянки кода на 20 экранов вполне закономерно должен страдать.
Fr0sT-BrutalЛибо юзать продвинутые редакторы с деревом объектов.Внезапно, такой есть в эксперте.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39014223
>Кто не может структурировать свои мысли и пишет портянки кода на 20 экранов вполне закономерно должен страдать.
Ну, множить сущности без особой нужды тоже не есть гуд. Да даже если не 20 экранов, а 5 - уже задача найти название ХП требует кучи действий

>Внезапно, такой есть в эксперте.
О, че-то не подумал, что можно открывать скрипт из файла. Тем не менее, он не подсвечивает в дереве тот объект, на котором находится курсор
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39014409
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal посеял пароль блинон не подсвечивает в дереве тот объект, на котором находится курсорПиши челобитную, сам знаешь кому.
Fr0sT-Brutal посеял пароль блинзадача найти название ХП требует кучи действийпопробовал на своих метаданных, проблем не обнаружил, хотя скрипт примерно на 15 мег, там довольно много объектов.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39015055
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У мну для этих целей скрипт на Python-чике.
Вызывает isql для получения текстового дампа базы, из которого потом вычищает ненужные данные.
Этот дамп и отдаётся svn-у.

Раньше использовал IBEScript, но переехал полностью под linux, а настраивать для этого wine и ловить глюки заломало. :)

По поводу портянок на 5-20 экранов - полностью согласен - не нужно больших портянок.

Кстати, git diff показывает имена функций/методов для C\C++ и Python точно. Может и для SQL умеет? :)
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39015291
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не планирую этим заниматься в обозримом будущем.
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39015417
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

Для себя сделал такой файл

exract_db.sql
Код: 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.
execute ibeblock
as
begin
  Name = ibec_GetGlobalVar('NAME', '');
  PATH = ibec_GetGlobalVar('PATH', '');
  DB_Name = ibec_GetGlobalVar('DB', '');

  if (Name = '') then
  begin
    ibec_progress('Не указано имя БД');
    exit;
  end

  if (Path = '') then
  begin
    ibec_progress('Не указан путь');
    exit;
  end

  if (DB_Name = '') then
  begin
    reg = ibec_reg_Open(__HKEY_CURRENT_USER, 0);
    try
      if (ibec_reg_OpenKey(reg, 'Software\DeltaSoft\'||Name, FALSE)) then
        DB_Name = ibec_reg_ReadString(reg, 'DBName');
    finally
      ibec_reg_Close(reg);
    end
  end

  if (DB_Name = '') then
  begin
    ibec_progress('Не указана БД');
    exit;
  end

  dir = Path||'\'||Name||'_db';

  ibec_progress('Очистка папки '||dir);
  if (ibec_getfiles(files_list, dir, '*.*',  __gfFullName) > 0) then
  begin
    i = 0;
    while (i <= ibec_high(files_list)) do
    begin
      ibec_DeleteFile(files_list[i]);
      i = i + 1;
    end
  end;

  ibec_progress('Создание отображения БД в '||dir);
  DB = ibec_CreateConnection(__ctFirebird, 'DBName="'||DB_NAME||'";user=SYSDBA; password=masterkey');
  try
    ibec_UseConnection(DB);
    ibec_ExtractMetadata(db, dir, 'VCSFiles;GenerateCreate;IncludeCharset;ExtractPrivileges;ExtractDescriptions',cbb);

    fs = ibec_fs_OpenFile(name||'.data', __fmOpenRead);
    if (fs is not null) then
    begin
      ibec_progress('Создание данных БД в '||dir);

      while (not ibec_fs_Eof(fs)) do
      begin
        TableN = '';
        wh = '';

        s = ibec_fs_Readln(fs);
        ValCount = ibec_ParseCSVLine(Vals, s, '"', ibec_Chr(9), 0);
        if (Vals[0] is not null) then
          TableN = Vals[0]; else TableN = '';

        if (Vals[1] is not null) then
          wh = Vals[1]; else wh = '';

        cnt = 0;

        for select trim(r.rdb$field_name), trim(case when f.rdb$field_type in (14, 37, 40, 261, 45) then '''' else '' end), coalesce(trim(both '''' from nullif(trim(leading 'DEFAULT ' from upper(substring(coalesce(r.rdb$default_source, f.rdb$default_source) from 1 for 80))), 'NULL')), '')
            from rdb$relation_fields r
            join rdb$fields f on f.rdb$field_name = r.rdb$field_source
            where r.rdb$relation_name = :TableN
            order by r.rdb$field_position
        into n, tp, defv do
        begin
          f[cnt] = n;
          d[cnt] = defv;
          y[cnt] = tp;
          cnt = cnt + 1;
        end

        if (cnt = 0) then exit;

        s = ''; w = '';
       
        if (wh > '') then 
          w = ' where '||wh;

        k = 0;
        q = 'select * from '||TableN||W||'  order by '||f[0];
        for execute statement :q into vals do
        begin
          k = k + 1;
          i = 0;
          while (i < cnt) do
          begin
            v = vals[i];
            v = coalesce(v, '');
            r = d[i];
            if (v <> '' and v <> r) then
            begin
              s=s||f[i]||'='||y[i]||vals[i]||y[i]||ibec_CRLF();
            end
            i = i + 1;
          end;
          s=s||'---------------------------------------------------'||ibec_CRLF();
        end
        ibec_SaveToFile(dir||'\'||TableN||'.data', s, 1);

        ibec_progress('   '||TableN||'   '||k);
      end
      ibec_fs_CloseFile(fs);
    end
  finally
    ibec_CloseConnection(DB);
  end

  ibec_SaveToFile(dir||'\'||name||'_db.txt', DB_NAME, 0);

  ibec_progress('Отображение БД создано');
end;


Вызов через bat
db2svn.bat
Код: sql
1.
IBEScript.exe exract_db.sql -GNAME=%1 -GPATH=%2 -GDB=%3


Где первый параметр " Name " название БД (не путь). По нему из реестра читаю DBNAme

Второй Path - папка в которой создается папка с именем " Имя_БД _db", в которой будут файлы для SVN. В моем случае это папка проекта

Третий - необязательный DBNаme - если не указан берется из реестра

Дополнительно в текущей папке проверяется наличие файла Name .data
Это для версионирования данных таблиц.
Каждая строка - имя таблицы, и при необходимости, после знака табуляции, условие WHERE

На примере EMPLOYEE.FDB

EMPLOYEE.data
Код: plaintext
1.
2.
PROJECT
COUNTRY#9currency containing 'dollar'

вызов:
Код: plaintext
db2svn.bat EMPLOYEE d:\projects\MyProject "C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\EMPLOYEE.FDB"

В результате в папке d:\projects\MyProject будет создана папка EMPLOYEE_db.
В ней по файлу на каждый объект БД.
Файлы COUNTRY.data, PROJECT.data - данные соответствующих таблиц
EMPLOYEE_db.txt в котором хранится текущий DBName (C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\EMPLOYEE.FDB)
...
Рейтинг: 0 / 0
Контроль версий в FB
    #39024683
noisy_by
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб не создавать новую тему

Возможно ли настроить ibec_ExtractMetadata так чтоб из результата убрать в комментарии дату генерации скрипта?
т.е. вместо
Код: sql
1.
/*                 Generated by IBExpert 06.08.2015 22:59:32                  */


получить
Код: sql
1.
/*                 Generated by IBExpert                   */



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

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


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