AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.01.2016, 08:07   #1  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
SimpleQueryBuilder - простой Х++ конструктор читабельных T-SQL запросов
Предлагаю на суд общественности реализацию наглядного построителя текстовых запросов к внешним БД.

Преамбула

Наверняка многим приходилось сталкиваться с задачей формирования внешних SQL-запросов, и наверняка мало кто назовет такую задачу приятной. Особенно, если запрос длинный, "многоэтажный", а еще хуже - если приходится многократно дорабатывать такой хардкод. Разбираться во всех этих strfmt(...) (иногда вложенных) с десятками параметров - муторно. Того и гляди накосячишь.
Для пущей безопасности этого процесса в Аксапте есть семейство классов SQLBuilder*. Но на мой взгляд, код, написанный с его помощью, тоже получается громоздким.
В итоге появилась идея, набросок которой я тут публикую.

Что умеет SimpleQueryBuilder (SQB)?
  1. Формировать строку SQL-запроса путем последовательного вызова методов, соответствующих ключевым словам SQL. Например,
    X++:
    selectStr = ...select(...).from(...).where(...)...toString(); 
    insertStr = ...insert(...).into(...).values(...)...toString();
    При этом никаких соединений с БД он не устанавливает, сформированный запрос не выполняет. Только конкатенация текста.
  2. Умеет "подсказывать" синтаксис запроса с помощью IntelliSense (см. скриншот), ограничивая текущий контекст через набор интерфейсов. Например, после метода select() обязательно должен быть вызван from() (без этого просто не получится "достать" финальную строку). Аналогично, where() не получится впихнуть после order_by(), и т.п.
  3. В текущей версии в общих чертах реализован только оператор SELECT (но далеко не все его нюансы). INSERT, UPDATE и DELETE - отсутствуют.

Основные плюсы
  • Для относительно простых запросов код выглядит кучеряво Для сложных - пока не пробовал.
  • Легко начать пользоваться: пишем SimplyQueryBuilder::construct(), ставим точку, и дальше - все интуитивно понятно.
  • Неожиданный бонус от редактора Х++ - подсветка "синтаксиса" (опять см. скриншот).
  • Снижается риск ошибиться в "скелете" запроса (забыть "кусок", не туда скопипастить), так как он весь выписывается, по сути, в одну строку кода, которая либо скомпилируется, либо нет.
  • За счет того, что практически все параметры - строковые, в конечном итоге можно получить любой синтаксис (не предусмотренный в наборе методов).

Минусы
  • Строки, переданные в качестве параметров никак не проверяются. То есть нет никаких гарантий валидности итогового запроса.
  • Вложенные выражения (условия, подзапросы) не поддаются красивому выстраиванию в цепочку методов, следовательно их придется конструировать отдельными частями.
  • Предполагаю, что дорабатывать SQB под свои нужды будет неудобно из-за кучи переплетенных интерфейсов, которые в ряде случаев придется развязывать и связывать по-новому.
  • Ваши замечания? (критика приветствуется)

Во вложении - проект с набором классов и интерфейсов (у интерфейсов префикс SQB_*). Примеры использования - в классе SQBTutorial. Делалось и проверялось на AX2009, в 2012 скорее всего тоже заработает.

PS. Еще точнее - изначально делалось даже на Java для других нужд, а потом любопытство заставило попробовать адаптировать под Аксапту)
Миниатюры
Нажмите на изображение для увеличения
Название: SQB_sample_01.png
Просмотров: 723
Размер:	38.5 Кб
ID:	9490  
Вложения
Тип файла: xpo SimpleQueryBuilder.xpo (26.5 Кб, 669 просмотров)
За это сообщение автора поблагодарили: mazzy (10), macklakov (10), Logger (10), S.Kuskov (10).
Теги
download, t-sql, готовый пример, запросы, пример

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance - Analyzing key SQL Server configuration and database settings Blog bot DAX Blogs 0 28.09.2015 14:11
DAX 2009 - Трассировка долгих SQL-запросов в пакетном режиме N.D.P. DAX: Администрирование 4 18.03.2015 09:13
emeadaxsupport: AX Performance Troubleshooting Checklist Part 1A [Introduction and SQL Configuration] Blog bot DAX Blogs 0 05.09.2014 21:11
Как убрать знаки вопроса в мониторе запросов SQL? Shakr DAX: Программирование 15 09.09.2009 00:07
Просмотр SQL запросов к БД с помощью файла Log Anton Sk. DAX: База знаний и проекты 3 25.01.2002 16:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:23.