summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/format/sql_format.cpp
diff options
context:
space:
mode:
authorzhvv117 <[email protected]>2024-12-06 19:34:08 +0300
committerzhvv117 <[email protected]>2024-12-06 19:51:24 +0300
commit46bab3363b8f2952a4618c3b6d763b8f92724580 (patch)
treee8e2955640bdededfd2e62d5ef39073e350144f3 /yql/essentials/sql/v1/format/sql_format.cpp
parentfc049edd7fb71d559f889eff6657ce578dc4b159 (diff)
separate complex and multiline statements with a blank line
commit_hash:a5e96c76de71b92daf0469cf0e88dc79cd280d67
Diffstat (limited to 'yql/essentials/sql/v1/format/sql_format.cpp')
-rw-r--r--yql/essentials/sql/v1/format/sql_format.cpp31
1 files changed, 25 insertions, 6 deletions
diff --git a/yql/essentials/sql/v1/format/sql_format.cpp b/yql/essentials/sql/v1/format/sql_format.cpp
index 030ac13f41e..425f7cb6f15 100644
--- a/yql/essentials/sql/v1/format/sql_format.cpp
+++ b/yql/essentials/sql/v1/format/sql_format.cpp
@@ -463,7 +463,7 @@ public:
{
}
- TString Process(const NProtoBuf::Message& msg, bool& addLine) {
+ TString Process(const NProtoBuf::Message& msg, bool& addLineBefore, bool& addLineAfter, TMaybe<ui32>& stmtCoreAltCase) {
Scopes.push_back(EScope::Default);
MarkedTokens.reserve(ParsedTokens.size());
MarkTokens(msg);
@@ -480,7 +480,10 @@ public:
AddComment(text);
}
- addLine = AddLine.GetOrElse(true);
+ ui32 lines = OutLine - (OutColumn == 0 ? 1 : 0);
+ addLineBefore = AddLine.GetOrElse(true) || lines > 1;
+ addLineAfter = AddLine.GetOrElse(true) || lines - CommentLines > 1;
+ stmtCoreAltCase = StmtCoreAltCase;
return SB;
}
@@ -543,6 +546,10 @@ private:
Out(' ');
}
+ if (OutColumn == 0) {
+ ++CommentLines;
+ }
+
Out(text);
if (!text.StartsWith("--") &&
@@ -571,7 +578,9 @@ private:
MarkToken(token);
} else if (descr == TRule_sql_stmt_core::GetDescriptor()) {
if (AddLine.Empty()) {
- AddLine = !IsSimpleStatement(dynamic_cast<const TRule_sql_stmt_core&>(msg)).GetOrElse(false);
+ const auto& rule = dynamic_cast<const TRule_sql_stmt_core&>(msg);
+ AddLine = !IsSimpleStatement(rule).GetOrElse(false);
+ StmtCoreAltCase = rule.Alt_case();
}
} else if (descr == TRule_lambda_body::GetDescriptor()) {
Y_ENSURE(TokenIndex >= 1);
@@ -2725,9 +2734,11 @@ private:
ui32 LastLine = 0;
ui32 LastColumn = 0;
ui32 LastComment = 0;
+ ui32 CommentLines = 0;
i32 CurrentIndent = 0;
TVector<EScope> Scopes;
TMaybe<bool> AddLine;
+ TMaybe<ui32> StmtCoreAltCase;
ui64 InsideType = 0;
bool AfterNamespace = false;
bool AfterBracket = false;
@@ -2972,6 +2983,8 @@ public:
TVector<TTokenIterator> statements;
SplitByStatements(allTokens.begin(), allTokens.end(), statements);
TStringBuilder finalFormattedQuery;
+ bool prevAddLine = false;
+ TMaybe<ui32> prevStmtCoreAltCase;
for (size_t i = 1; i < statements.size(); ++i) {
TStringBuilder currentQueryBuilder;
for (auto it = statements[i - 1]; it != statements[i]; ++it) {
@@ -3022,8 +3035,11 @@ public:
}
TPrettyVisitor visitor(parsedTokens, comments);
- bool addLine;
- auto currentFormattedQuery = visitor.Process(*message, addLine);
+ bool addLineBefore = false;
+ bool addLineAfter = false;
+ TMaybe<ui32> stmtCoreAltCase;
+ auto currentFormattedQuery = visitor.Process(*message, addLineBefore, addLineAfter, stmtCoreAltCase);
+
TParsedTokenList stmtFormattedTokens;
auto onNextFormattedToken = [&](NSQLTranslation::TParsedToken&& token) {
stmtFormattedTokens.push_back(token);
@@ -3038,9 +3054,12 @@ public:
return false;
}
- if (addLine && !finalFormattedQuery.empty()) {
+ const bool differentStmtAltCase = prevStmtCoreAltCase.Defined() && stmtCoreAltCase != prevStmtCoreAltCase;
+ if ((addLineBefore || prevAddLine || differentStmtAltCase) && !finalFormattedQuery.empty()) {
finalFormattedQuery << "\n";
}
+ prevAddLine = addLineAfter;
+ prevStmtCoreAltCase = stmtCoreAltCase;
finalFormattedQuery << currentFormattedQuery;
if (parsedTokens.back().Name != "SEMICOLON") {