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