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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.04.2018, 16:19   #1  
Fanis Khalfin is offline
Fanis Khalfin
Участник
 
1 / 13 (1) ++
Регистрация: 13.04.2018
Cool SQL PARSER SPLITTER
Выкладываю очень простенький и очень нужный для аксапчан скриптик для парсинга SQL запросов, буду рад дальнейшим модификациям и дополнениям

Достаточно будет в откладчике нажать скопировать в буфер куерик и запустить джобик, он это приведет человеко-читабельный текст.

Код:
//khfa
static void KHFA_SQL_PARSER(Args _args)
{
    void prompt(FreeTxt     sqlQuery,
                NoYes       toXppFormat = NoYes::No)
    {
        Dialog              dlg;
        DialogField         dfSqlQuery;
        DialogField         dfSetXppFormat;

        FormStringControl   strCtrl;

        int                 selectStrNum;
        ;

        selectStrNum        = strscan(sqlQuery, 'SELECT ', 1, strLen(sqlQuery));

        sqlQuery            = substr(sqlQuery, selectStrNum, strLen(sqlQuery));

        sqlQuery            = strReplace(sqlQuery, 'SELECT ',           'SELECT\n\t');

        sqlQuery            = strReplace(sqlQuery, ' NOTEXISTS JOIN ',  '\n\nNOTEXISTSJOIN\n\t');
        sqlQuery            = strReplace(sqlQuery, ' EXISTS JOIN ',     '\n\nEXISTSJOIN\n\t');
        sqlQuery            = strReplace(sqlQuery, ' JOIN ',            '\n\nJOIN\n\t');

        sqlQuery            = strReplace(sqlQuery, 'NOTEXISTSJOIN',     'NOTEXISTS JOIN');
        sqlQuery            = strReplace(sqlQuery, 'EXISTSJOIN',        'EXISTS JOIN');

        sqlQuery            = strReplace(sqlQuery, ' FROM ',            '\n\n\tFROM ');
        sqlQuery            = strReplace(sqlQuery, ' ORDER BY ',        '\n\tORDER BY ');
        sqlQuery            = strReplace(sqlQuery, ' GROUP BY ',        '\n\tGROUP BY ');
        sqlQuery            = strReplace(sqlQuery, ' WHERE ',           '\n\n\tWHERE ');

        sqlQuery            = strReplace(sqlQuery, ' ON ',              '\n\n\tON ');
        sqlQuery            = strReplace(sqlQuery, ' AND ',             '\n\tAND ');
        sqlQuery            = strReplace(sqlQuery, ' OR ',              '\n\tOR ');

        if (toXppFormat)
        {
            sqlQuery        = strReplace(sqlQuery, ' ON ',              '\n\n\tWHERE ');
            sqlQuery        = strReplace(sqlQuery, '\tAND ',            '\t&& ');
            sqlQuery        = strReplace(sqlQuery, '\tOR ',             '\t|| ');
        }
        else
        {
            sqlQuery        = strReplace(sqlQuery, '\t&& ',                '\tAND ');
            sqlQuery        = strReplace(sqlQuery, '\t|| ',                '\tOR ');
        }

        dlg                 = new Dialog('Set query and click OK');

        dfSetXppFormat      = dlg.addFieldValue(enumstr(NoYes), toXppFormat, 'X++ Format', 'Parse To X++ Format');
        dfSqlQuery          = dlg.addFieldValue(extendedTypeStr(FreeTxt), sqlQuery, 'Query', 'Query');

        strCtrl             = dfSqlQuery.control();
        strCtrl             .widthValue(1300);
        strCtrl             .heightValue(600);
        
        System.Windows.Forms.Clipboard::SetText(sqlQuery);

        if (! dlg.run())
            return;
        
        prompt(dfSqlQuery.value(), dfSetXppFormat.value());
    }

    prompt(System.Windows.Forms.Clipboard::GetText(), NoYes::Yes);
}

Последний раз редактировалось Fanis Khalfin; 13.04.2018 в 16:30.
За это сообщение автора поблагодарили: Pokersky09 (1), Logger (1), raniel (1).
Старый 13.04.2018, 18:30   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Хороший джоб, но немножко велосипед

см.
\Classes\SQLFormatting
За это сообщение автора поблагодарили: AlGol (2), raniel (1).
Теги
ax, dynamics, dynamics ax, parser, sql, sql parser

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxhints: Dynamics AX Trace Parser vs SQL Server Profiler Blog bot DAX Blogs 0 03.10.2016 23:12
kurthatlevik: Master data concepts Blog bot DAX Blogs 0 18.02.2016 12:11
emeadaxsupport: AX Performance - Analyzing key SQL Server configuration and database settings Blog bot DAX Blogs 0 28.09.2015 14:11
emeadaxsupport: AX Performance Troubleshooting Checklist Part 1A [Introduction and SQL Configuration] Blog bot DAX Blogs 0 05.09.2014 21:11
emeadaxsupport: Trace Parser Tip - How to find a SQL statement across all sessions Blog bot DAX Blogs 0 24.12.2013 14:11

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

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

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