Plugin for HANA Database project in Visual Studio

Автор: admin от 12-09-2017, 06:55, посмотрело: 31

Я работаю по SCRUM-у в ASP .NET MVC-проекте, в котором HANA используется как база данных, а в качестве Source Control-а – TFS. На уровне базы данных преимущественно используем View (Calculation, Attributes and DB Views), а также Stored Procedure – для выполнения транзакционных запросов на сервер.



После окончания каждого релиза у меня всегда возникал вопрос: «А что именно изменилось в этом релизе?» или «Кто какое изменение сделал?» В связи с этим я подумал: «Почему бы не трекать состояние объектов в TFS после каждого изменения?»



В результате я решил создать плагин, который позволяет использовать Database-проект в Visual Studio (VS) и импортировать изменения, которые есть в базе данных. Так родилась идея создания данного приложения.



Начинаем с простого и смотрим, какие прототипы есть у Microsoft. Как пример возьмем MS-SQL-сервер и Database-проект в Visual Studio и рассмотрим все возможности, которые у них существуют:




  • Можно создать свою схему (использовать существующую) в MS-SQL и потом импортировать ее в Database-проект в Visual Studio (DB VS).

  • Можно создать (изменить) объект в Database и трансформировать изменения в базу данных.

  • Можно трекать изменения в Source Control (в моем случае в TFS).

  • Таким образом, мы можем отслеживать все изменения, которые происходят в ходе разработки, а также их авторов.



  • Сразу говорю, что поддерживать все эти возможности очень непросто, тем более что в HANA существует такой вид объектов, как Graphic View: он создается в графическом виде и его никак не продемонстрируешь в Visual Studio (но тем не менее для этого типа объектов тоже нашелся подход, чтобы импортировать его в VS).



    Я пошел по простому пути. Рассмотрим каждую возможность по отдельности.



    Создание/использование схемы в HANA и импорт ее в DB VS



    Тут есть две задачи:




  • Создать проект с нуля в DB VS и импортировать его в DB.

  • Использовать уже существующий проект (схему) в DB и импортировать его в DB VS.



  • Я выбрал только вторую: во-первых, у меня уже есть существующий проект, во-вторых, для создания проекта в VS необходима обратная связь (о ней я буду говорить чуть позже), которая является очень непростой задачей.



    Итак, я должен создать мост, который импортирует все объекты из DB в DB VS.



    Создание (изменение) объекта в Database и трансформирование изменений в базу данных



    Это почти то же самое, что и в предыдущей задаче. То есть если у меня уже есть существующая схема, надо только принести объекты в DB VS. Однако здесь стоит учитывать: если измененный (удаленный) объект уже существует в проекте, следует его редактировать (удалить) в DB VS. Это необходимо для того, чтобы трекать изменения в TFS, поэтому я тоже реализовал эту задачу.



    Возможность трекать изменения в Source Control (в моем случае в TFS)



    После того, как появились изменения в DB VS, надо трекать их в TFS. Для этого каким-то образом надо в VS отметить измененные файлы так, чтобы она вошли в список айтемов для Check-In. Тут мне пришлось использовать «.New framework libraries» для TFS. Я использовал Visual Studio 2012 во время создания данного плагина, но для других (высших) версий VS надо использовать необходимые (дополнительные) framework-и от Microsoft, чтобы плагин мог занести изменения в TFS.



    DB VS Plugin



    Плагин состоит из 4-х основных частей:




  • Authentication Window.

  • HANA Object Transformer.

  • Object Changes Manager.

  • TFS Manager.



  • Authentication Window



    В данное окно мы вводим всю необходимую информацию для нашего плагина. После того как проверка прошла успешно, система запоминает данные и при следующем логине их использует. Если по какой-либо причине плагин не смог «достучаться» до одного сервера (например, после изменения своих прав в DB или в TFS), то снова открывается окно авторизации и дает возможность редактирования свои прав.



    Plugin for HANA Database project in Visual Studio


    Нам необходимо внести два типа данных:




  • Всю необходимую информацию для HANA, а именно: Server Path, User Name, Password и Schema Name.

  • Информацию о проекте и TFS: в поле Project Path можно показать местонахождение DB VS-файла для использования в плагине. Также информацию о TFS Credential, такую как User Name, Password и TFS Server URL.



  • Если вы поставите галочку возле Save, то после успешного подключения к серверам ваши данные сохранятся.



    HANA Object Transformer



    Эта самая сложная часть плагина. Тут, используя системные словари, мы получаем информацию о всех объектах, которые находятся в системе. Объекты, которые поддерживаем в текущей реализации:




  • Tables.

  • Constraints (Foreign Keys, Primary Keys, Unique).

  • Table Types.

  • Sequences.

  • Functions.

  • Stored Procedures.

  • Synonyms.

  • Views (Attribute Views, Calculation Views, Database Views).



  • Знаю, что в HANA многие проекты используют еще и другие объекты (как REST Services (XSJS) и т.д.), но в нашем случае мы их игнорировали. Для всех объектов, кроме Views, я использую системные словари, чтобы получить данные. Как пример рассматриваем получение данных о таблицах.



    Для этого получаем название таблиц в нашей схеме с помощью следующего запроса:



    SELECT 
    	SCHEMA_NAME,TABLE_NAME,TABLE_OID,COMMENTS,FIXED_PART_SIZE,IS_LOGGED,IS_SYSTEM_TABLE,IS_COLUMN_TABLE,TABLE_TYPE,IS_INSERT_ONLY,IS_TENANT_SHARED_DATA,IS_TENANT_SHARED_METADATA,SESSION_TYPE,IS_TEMPORARY,TEMPORARY_TABLE_TYPE,COMMIT_ACTION,IS_USER_DEFINED_TYPE,HAS_PRIMARY_KEY,PARTITION_SPEC,USES_EXTKEY,AUTO_MERGE_ON,USES_DIMFN_CACHE,IS_PUBLIC,AUTO_OPTIMIZE_COMPRESSION_ON,COMPRESSED_EXTKEY,HAS_TEXT_FIELDS,HAS_TEXT_FIELDS,USES_QUEUE_TABLE,IS_PRELOAD,IS_PARTIAL_PRELOAD,UNLOAD_PRIORITY,HAS_SCHEMA_FLEXIBILITY,IS_REPLICA
    FROM TABLES
    WHERE SCHEMA_NAME = CURRENT_SCHEMA AND IS_USER_DEFINED_TYPE = 'FALSE'; 


    После чего получаем данные о колонках таблиц с помощью следующего запроса и в C# коде с помощью Linq объединяем их:



    SELECT 
    	SCHEMA_NAME, TABLE_NAME, TABLE_OID, COLUMN_NAME, POSITION, DATA_TYPE_ID, DATA_TYPE_NAME, OFFSET, LENGTH, SCALE, IS_NULLABLE, DEFAULT_VALUE, COLLATION,COMMENTS, MAX_VALUE, MIN_VALUE, CS_DATA_TYPE_ID, CS_DATA_TYPE_NAME,DDIC_DATA_TYPE_ID, DDIC_DATA_TYPE_NAME, COMPRESSION_TYPE, INDEX_TYPE, COLUMN_ID, PRELOAD,GENERATED_ALWAYS_AS, HAS_SCHEMA_FLEXIBILITY, FUZZY_SEARCH_INDEX, FUZZY_SEARCH_MODE,MEMORY_THRESHOLD,LOAD_UNIT,GENERATION_TYPE
    FROM TABLE_COLUMNS WHERE SCHEMA_NAME = CURRENT_SCHEMA ORDER BY POSITION


    Самым сложным оказалось получить информацию о Graphic Attribute View. Тут нет прямой возможности получить данные о структуре View. Но если подумать, HANA Studio показывает эту графическую вьюшку с помощью определенных метаданных в базе. Я тоже старался получить именно эти метаданные, а нашел на XML файл, который для каждого View сохраняется в DB. Таким образом я решил этот вопрос: то есть чтобы получить информацию о вьюшке и также трекать ее изменения, мне необходимо сохранить ее XML в DBVS. В структуре XML существует такие данные, как входящие параметры, исходящие параметры, наименования всех таблиц, которые используются в текущей вьюшке, тип данных, фильтры, join-ы и еще много чего интересного.



    Calculation / Database Views тоже в основном создаются и сохраняются как SQL Script, поэтому тут особых проблем не возникало.



    Object Changes Manager (OCM)



    После получения информации с базой надо посмотреть, какое изменение есть в текущем и в предыдущем состояниях DB VS. OCM является звеном синхронизации изменений и синхронизует DB VS в трех этапах:




  • Проверяет, какие новый объекты были добавлены в схеме.

  • Проверяет наличие изменений в каждом существующем объекте.

  • Проверяет удаление объектов в схеме.



  • В первом случае: OCM генерирует скрипт, добавляет файл, определяет местонахождение в DB VS и обновляет дополнительные файлы.



    Во втором случае: OCM сравнивает сгенерированный скрипт с существующим файлом в DB VS и, если объект изменился, меняет существующий файл.



    В третьем случае: OCM удаляет файлы объектов, которые отсутствуют в текущей версии схемы.



    Ниже представлены скриншоты, которые показывают, как выглядит окно плагина и как происходит процесс миграции:



    Plugin for HANA Database project in Visual Studio
    Рис. 1. Список объектов (в данном случае таблицы), которые изменились




    • красный цвет – удаленные айтемы,

    • зеленый – новые,

    • фиолетовые – измененные



    Plugin for HANA Database project in Visual Studio
    Рис 2. Список Stored Procedure, которые изменились



    Plugin for HANA Database project in Visual Studio
    Рис. 3. В Included окне входит список набранных объектов для изменения в DB VS



    Plugin for HANA Database project in Visual Studio
    Рис. 4. Вопрос на принятие изменения в DB VS



    Plugin for HANA Database project in Visual Studio
    Рис. 5. Идет процесс миграции в DB VS



    Plugin for HANA Database project in Visual Studio
    Рис. 6. Сообщение об успешном выполнении миграции



    TFS Manager Service (TFS MS)



    TFS MS следит за каждым изменением, которое происходит в проекте, и отмечает их соответствующим образом: чтобы при Check-In все они попали в список измененных айтемов в TFC.



    С помощью данного плагина мне удалось трекать все изменения в рамках нашего проекта. Я двигался дальше и расширил этот плагин для Merge Delivery Unit в разных схемах, а также для сравнения разных схем после процесса мерджа, чтобы убедиться, что все смерджилось правильно. Но об этом я расскажу в следующей статье?

    Источник: Хабрахабр

    Категория: Программирование

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

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *