|
Навигация
|
Главная » Visual Studio Улучшаем Redgate SQL Search: некоторые моменты разработкиИсточник: habrahabr yar229 Трепетно люблю и пользую при работе в SQL Server Management Studio утилиты от Redgate, в том числе и бесплатный Redgate SQL Search. Все бы хорошо, но еще мечталось о вменяемом инструменте, который бы позволял в дереве объектов создавать собственные папки и раскладывать в них таблички/процедурки. В один прекрасный момент таковой появился - SQLTreeO, но тут же наткнулся на проблему - SQLSearch не ищет в созданных им папках. Собственно, с этого и начался маленький addin для addin'а -SQLSearch Extender. Дальше - больше, раз пошла такая пьянка, то почему бы не добавить по мере сил функционала, так как Redgate не торопится реализовывать пожелания пользователей. Что добавлено к функционалу SQLSearch'а (настройки в меню Tools -> SQL Search Extender):
API для SSMS Microsoft не афиширует, на старте очень помогли следующие статьи - The Black Art of Writing a SQL Server Management Studio 2005 Add In и SQL 2008r2 breaks ssms addins Практически все, что надо для счастья, в этих статьях рассказано, отмечу несколько моментов Момент 1. Ловим окно SQLSearch.Так как информации изначально у нас практически нет, то вешаем обработчик на Connect.OnCmdUIContextChanged и вспоминаем WinAPI EnumChildWindows. С глубоким внутренним удовлетворением обнаруживаем, что внутре нужного окна лежит наследник от UserControl, далее по типу и имени (Hawkeye в помощь) находим нужные нам элементы. Дальше делаем с интерфейсом все, что нам угодно. Момент 2. Поиск в папках SQLTreeOИдея проста - после того, как отработает поиск SQLSearch'а, смотрим на выделенный в Object Explorer'е элемент и, если его имя не совпадает с нужным, то поднимаемся до уровня узла сервера и пробегаемся по папкам. Момент 3. Подсветка синтаксиса.Скрипты SQLSearch выводит в стандартный RichEdit. Очень хотелось накрыть его сверху редактором от самой студии (случайная ссылка для ключевых слов), практически получилось, но не хватило терпения расследовать и устранять всяческие мелкие неурядицы. В итоге пошел по пути наименьшего сопротивления, спрятав его за своим RichEdit'ом и вспомнив о существовании Microsoft.SqlServer.SqlParser.Parser и, для скорости, формируя RTF ручками. Момент 4. Хочу красивую иконку в меню Tools!Как это ни смешно, но если в выпадающих контекстных меню это делается без проблем, то в данном случае информации не нашел, пришлось повозиться - обратиться к System.Windows.Forms.AxHost, IPictureDisp и колдовать с масками. Момент 5. Хочу поиск regexp'ами!Поначалу опечалился, так как не видел способа сделать это без модификации самого SQLSearch'а, но потом нашлось решение. SQLSearch для кэширования данных использует SQLite и .NET обертку для него System.Data.SQLite, загрузка библиотеки фактически происходит в момент, когда мы начинаем поиск. Но так как мы находимся в одном домене и отлавливаем окно еще до начала поиска, то можем быстренько загрузить свою библиотеку SQLite. Скачиваем исходники System.Data.SQLite, убеждаемся в соответствии номера версии и ключа тому, что использует сам SQLSearch, и модифицируем System.Data.SQLite.SQLiteCommand, отлавливая sql запросы и изменяя нужные. Реализация самого поиска regexp'ами оказалась проста - достаточно в своей библиотеке реализовать класс, пометив его атрибутом SQLiteFunction - SQLite REGEXP function, после чего можем писать всякие штуки вроде select * from table where text REGEXP '.*GOOD\Z' Этот же хак помог снять ограничение на максимальное количество результатов поиска - SQLSearch ограничивает выдачу 150 результатами. Момент 6. Получение скриптов объектов.Все просто - выручает Microsoft.SqlServer.Management.Smo В планах, just4fun, хочется декомпилировать и показывать исходники CLR UDF, используя родственный .NET Reflector, но пока с этим проблемы, связанные с тем, что
Ссылки:Скачать Страничка SQLSearchExtender на лицокнига "Обсуждение" на форуме SQLTreeO Upd 2012.06.27 Исправлено падение под SSMS v.10.50.* А пока суть да дело, на сайте Redgate'а обновился SQLSearch с версии 1.1.4.3 до 1.1.6.1 и [FIXED] Помогает копирование x:\Program Files (x86)\SQLSearch2SQLTreeO\SQLite.Interop.dll и x:\Program Files (x86)\SQLSearch2SQLTreeO\System.Data.SQLite.dll в "x:\ProgramData\Red Gate\SQL Search\Active" и "x:\ProgramData\Red Gate\SQL Search\Source". Вот такая незадачка, буду разбираться. Использование JSON контроллера MVC в Visual Studio на шаблоне Empty Web Site и языке C#. История Visual Studio. Часть I. Quality Assurance Day: первая премьера Visual Studio 11 для тестировщиков. Rational Rose Technical Developer (Rational Rose RealTime). Продукты семейства IBM Rational Rhapsody. Главная » Visual Studio |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |