Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Автоматизировать сравнение баз / 15 сообщений из 15, страница 1 из 1
29.04.2020, 19:40
    #39953045
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
Сейчас при подготовке инсталляционной базы у меня выполняются следующие действия
1. Сравниваются метаданные и формируется скрипт
2. Сравниваются данные двух таблиц и полученный скрипт добавляется к основному
3. В начало и конец общего скрипта добавляется вызов двух процедур

Хочется все это автоматизировать и перевести на IBEBLOCK.

Чего не хватает
1. Т.к. у меня в скрипте есть своя шапка, то хочется добавить опцию AppendMode в функцию ibec_CompareMetadata
2. В функции ibec_CompareMetadata и ibec_CompareTables добавить опцию, которая будет отключать добавление оператора CONNECT в скрипт.

Это основное. И две мелких хотелки
1. Узнавать когда каждая из функций не нашла отличий
2. Подгрузить файл в SQL Executot

И вопрос. ibec_CompareTables позволяет указать выражение WHERE. Правильно ли я понимаю, что это возможно только при сравнении одной таблицы? Или можно указать к какой таблице это выражение относится?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
30.04.2020, 07:24
    #39953156
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_

И вопрос. ibec_CompareTables позволяет указать выражение WHERE. Правильно ли я понимаю, что это возможно только при сравнении одной таблицы? Или можно указать к какой таблице это выражение относится?


Это выражение будет применено ко всем таблицам в списке.

По остальному - позже.
...
Рейтинг: 0 / 0
30.04.2020, 18:21
    #39953373
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_

Чего не хватает
1. Т.к. у меня в скрипте есть своя шапка, то хочется добавить опцию AppendMode в функцию ibec_CompareMetadata


Не вижу в этом необходимости. После сравнения грузишь получившийся скрипт в переменную (ibec_LoadFromFile) и затем сохраняешь ее в файл со своей шапкой (ibec_SaveToFile с флагом __stfAppend).

Или просто INPUT <файл скрипта> к своей шапке дописываешь.

_Vasilisk_

2. В функции ibec_CompareMetadata и ibec_CompareTables добавить опцию, которая будет отключать добавление оператора CONNECT в скрипт.


Это можно. В следующей версии опция NoConnect.

_Vasilisk_

Это основное. И две мелких хотелки
1. Узнавать когда каждая из функций не нашла отличий


Думаю, тоже можно.

_Vasilisk_

2. Подгрузить файл в SQL Executot


Ничего не понял.
...
Рейтинг: 0 / 0
30.04.2020, 19:02
    #39953382
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
IBExpert
_Vasilisk_1. Т.к. у меня в скрипте есть своя шапка, то хочется добавить опцию AppendMode в функцию ibec_CompareMetadata
Не вижу в этом необходимости. После сравнения грузишь получившийся скрипт в переменную (ibec_LoadFromFile) и затем сохраняешь ее в файл со своей шапкой (ibec_SaveToFile с флагом __stfAppend).А так я вначале формирую шапку в новом файле, а потом в этот же файл дописываю выхлопы ibec_CompareMetadata и ibec_CompareTables

IBExpert
_Vasilisk_2. Подгрузить файл в SQL Executot
Ничего не понял.Файл сохраняется на диске. Хочется избежать ручных манипуляций Script Executive -> Load from file, а чтобы он сразу подгружался в новое окно Script Executive. Как делает стандартное Extract Data Into Script или Compare Tables. Хоть скрипт и сохраняется в файл, но потом выдается запрос и скрипт загружается в новое окно Script Executive
...
Рейтинг: 0 / 0
01.05.2020, 04:45
    #39953468
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_
Файл сохраняется на диске. Хочется избежать ручных манипуляций Script Executive -> Load from file, а чтобы он сразу подгружался в новое окно Script Executive.


Это делается секретной командой
Код: plsql
1.
ibec_ibe_PerformAction(null, 'OpenScriptFile', 'D:\temp\111.sql');
...
Рейтинг: 0 / 0
01.05.2020, 05:53
    #39953469
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
В свежей версии:
1. Чтобы получить скрипт без CONNECT и связанных с ним SET, указать NoConnect в строке опций.
2. Для ibec_CompareMetadata указать в строке опций Return=ActionCount - функция вернет число операторов CREATE/ALTER/DROP и т.д. в скрипте сравнения. Всякие SET, COMMIT и иже с ними не считаются. Если различий нет, то должна вернуть 0.
3. Для ibec_CompareTables указать в строке опций Return=DiffCount - функция вернет общее количество различающихся записей.

Особо не тестил.
...
Рейтинг: 0 / 0
01.05.2020, 15:36
    #39953555
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
IBExpert
Это делается секретной командой
Специально искал в доке. Не увидел
IBExpert
В свежей версии:
Спасибо
AppendMode таки не прикрутил
IBExpert
Особо не тестил.
В понедельник погоняю
...
Рейтинг: 0 / 0
01.05.2020, 16:29
    #39953567
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_

AppendMode таки не прикрутил


Да, я тоже лентяй.
...
Рейтинг: 0 / 0
04.05.2020, 16:07
    #39954099
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
IBExpert
Да, я тоже лентяй.
ibec_SaveToFile поддерживает Append, ibec_CompareTables тоже. Ну одну функцию допилить
...
Рейтинг: 0 / 0
04.05.2020, 17:20
    #39954115
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
Какая-то беда
Код: 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.
execute ibeblock
as
begin
  cbb = 'execute ibeblock (LogMessage variant)
         returns (
           Threshold integer = 200)
         as
         begin
           ibec_progress(LogMessage);
         end';

  var_script_file = 'D:\script.sql';

  SourceDB = ibec_CreateConnection(__ctInterBase, '............');
  TargetDB = ibec_CreateConnection(__ctInterBase, '...........');

  try
    ibec_CompareMetadata(SourceDB, TargetDB,
                         var_script_file,
                         'ServerVersion=FB30;
                          OmitGrants;
                          SafeDatatypeConversion;
                          IgnoreIBEObjects;
                          AppendMode;
                          NoConnect',
                         cbb);
    ibec_ShowMessage('1');

    ibec_CompareTables(SourceDB, TargetDB,
                       'INTERNAL_CFGS',
                       'INTERNAL_CFGS',
                       var_script_file,
                       'IncludeMilliseconds;
                       CommitAfter=2000;
                       NoConnect;
                       AppendMode;',
                       cbb);
    ibec_ShowMessage('2');
  finally
    ibec_CloseConnection(TargetDB);
    ibec_CloseConnection(SourceDB);
  end;
end;

ibec_ShowMessage('1'); срабатывает, а потомAccess violation at address 00542739 in module 'IBExpert.exe'. Read of address 000000B0по отдельности вызовы работают. Таблица INTERNAL_CFGS в обоих базах идентичны. По метаданным есть различия в процедурах
...
Рейтинг: 0 / 0
05.05.2020, 05:06
    #39954252
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_
Какая-то беда


ibec_CompareMetadata коннекты закрывала по окончании работы. Исправил.

А вот скажи, ты это всерьез в один скрипт и результаты сравнения метаданных, и результаты сравнения данных собираешься пихать?
...
Рейтинг: 0 / 0
05.05.2020, 11:57
    #39954285
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
IBExpert
Исправил.
Стало лучше
IBExpert
А вот скажи, ты это всерьез в один скрипт и результаты сравнения метаданных, и результаты сравнения данных собираешься пихать?
А в чем проблема? У меня есть две таблицы, обеспечивающие работу приложения. В одной хранятся SQL запросы, в другой локализация. Данные в этих таблицах клиент не изменяет никогда
...
Рейтинг: 0 / 0
05.05.2020, 13:26
    #39954308
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_
А в чем проблема? У меня есть две таблицы, обеспечивающие работу приложения. В одной хранятся SQL запросы, в другой локализация. Данные в этих таблицах клиент не изменяет никогда


В таком сценарии проблем не видно.
...
Рейтинг: 0 / 0
05.05.2020, 14:01
    #39954320
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
_Vasilisk_
ibec_SaveToFile поддерживает Append, ibec_CompareTables тоже. Ну одну функцию допилить


Иногда проще допилить...:)
Допилил.
...
Рейтинг: 0 / 0
05.05.2020, 14:55
    #39954330
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматизировать сравнение баз
IBExpert
Иногда проще допилить...:)
Допилил.


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


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