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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.04.2018, 10:32   #1  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Скрипт для конвертации select в queryRun
Топик про SQL PARSER SPLITTER напомнил.

Давным давно я сделал скрипт который конвертирует из axapta'овских select'ов в axapta'овскую же череду queryBuildDataSource и QueryBuildRange (писать select'ы легче и были задачи делать запросы где пользователь может использовать запятые и звездочки, что select'овский like не поддерживает)

Он на питоне, так как парсить текст на х++ это то ещё удовольствие.

Консольная версия : http://codepad.org/QeUzFAWw (построенный queryRun в конце после "Output")

Могу скинуть версию с gui если интересно.
За это сообщение автора поблагодарили: Stitch_MS (3), Pokersky09 (2), trud (3).
Старый 18.04.2018, 13:06   #2  
Pokersky09 is offline
Pokersky09
Участник
 
43 / 60 (3) ++++
Регистрация: 15.11.2012
Адрес: Turkey
Думаю будет полезно, если дополнить мануалом "как воспользоваться" всем этим
Старый 18.04.2018, 15:42   #3  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Цитата:
Сообщение от Pokersky09 Посмотреть сообщение
Думаю будет полезно, если дополнить мануалом "как воспользоваться" всем этим
Надо просто поменять select выражание в начале файла и перезапустить скрипт. Результат будет выведен в stdout.
Если нет питона - codepad.org или ideone позволяют запускать код с интернета.

Скрипт выдаст queryRun. В select правда ДАЛЕКО не всё поддерживается - скобок нет, join только inner и || тоже нет в явном виде (что не страшно, так как два && по одному полю создадут два queryRange'а, что по сути и является условием ИЛИ).Я тогда решил допиливать результат его работы руками легче чем доделывать полный парсер axapta'овских запросов, так как его основная цель - убрать рутину, нежели полностью всё конвертировать

В аттаче версия с гуем. В левом окошке вводится select, внизу волшебная кнопка. Если на неё нажать, в правой части будет текст queryRun'ов или ошибка. Работает на python 3.5.1.

Кстати, интересный факт про синтаксис аксапты. В ней нельзя делать array[x ? y : z], но можно array[(x ? y : z)]
Вложения
Тип файла: zip convert_select_to_qr.zip (6.0 Кб, 57 просмотров)
За это сообщение автора поблагодарили: belugin (5).
Старый 19.04.2018, 04:12   #4  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mayk Посмотреть сообщение
Он на питоне, так как парсить текст на х++ это то ещё удовольствие.
Ну кстати X++ то парсить довольно просто, вот код который вернет вам выделенный фрагмент текста в виде объектов во временной табличке(с типами и прочим).
если нужен просто лексический анализ, то можно использовать класс XppScanner

X++:
_treeMethodNode.AOTmakeXref(1);
    tmpxRefReferences = xRefCreate::makeTmp(appl.lastxRef());

    xppScanner::populateXRefTmpReferenceWithSymbols(tmpxRefReferences,origSource);

    while select tmpxRefReferences
        order by Line, Column
    {
питон выглядит солидно
За это сообщение автора поблагодарили: Logger (3), mayk (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxhints: Select statement on field Blog bot DAX Blogs 0 22.03.2016 09:11
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
dynamicsaxtraining: Select statement patterns Blog bot DAX Blogs 10 20.08.2010 14:01
QueryRun, аналогичный select'у Skvorcal DAX: Программирование 3 16.08.2010 12:46
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43

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

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

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