Показать сообщение отдельно
Старый 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).