13.04.2018, 16:19 | #1 |
Участник
|
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 |
Участник
|
Хороший джоб, но немножко велосипед
см. \Classes\SQLFormatting |
|
|
За это сообщение автора поблагодарили: AlGol (2), raniel (1). |
Теги |
ax, dynamics, dynamics ax, parser, sql, sql parser |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|