aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@ydb.tech>2023-02-27 16:41:06 +0300
committervvvv <vvvv@ydb.tech>2023-02-27 16:41:06 +0300
commit5f9c0053cca0cb19e392a93b48c4d3020f00a1e2 (patch)
treeb49fcbea2464126906ef099eb074228480e32197
parent961957a343b6076cb28628e391e68310d00b80d5 (diff)
downloadydb-5f9c0053cca0cb19e392a93b48c4d3020f00a1e2.tar.gz
additional line after complex statements
-rw-r--r--ydb/library/yql/sql/v1/format/sql_format.cpp108
-rw-r--r--ydb/library/yql/sql/v1/format/sql_format_ut.cpp402
2 files changed, 288 insertions, 222 deletions
diff --git a/ydb/library/yql/sql/v1/format/sql_format.cpp b/ydb/library/yql/sql/v1/format/sql_format.cpp
index 82c14cafabb..fbe07af20d7 100644
--- a/ydb/library/yql/sql/v1/format/sql_format.cpp
+++ b/ydb/library/yql/sql/v1/format/sql_format.cpp
@@ -265,7 +265,9 @@ public:
{
}
- TString Process(const NProtoBuf::Message& msg) {
+ TString Process(const NProtoBuf::Message& msg, bool& addLine) {
+ addLine = true;
+ IsSimpleStatement.emplace_back();
Scopes.push_back(EScope::Default);
Visit(msg);
for (; LastComment < Comments.size(); ++LastComment) {
@@ -273,6 +275,12 @@ public:
AddComment(text);
}
+ Y_ENSURE(IsSimpleStatement.size() == 1);
+ if (IsSimpleStatement.front() && *IsSimpleStatement.front()) {
+ addLine = false;
+ }
+
+ IsSimpleStatement.pop_back();
return SB;
}
@@ -351,7 +359,60 @@ private:
}
}
+ void MarkAsSimple() {
+ Y_ENSURE(!IsSimpleStatement.empty());
+ if (!IsSimpleStatement.back()) {
+ IsSimpleStatement.back() = true;
+ }
+ }
+
+ void MarkAsComplex() {
+ Y_ENSURE(!IsSimpleStatement.empty());
+ if (!IsSimpleStatement.back()) {
+ IsSimpleStatement.back() = false;
+ }
+ }
+
+ void HandleNestedStmt(const TRule_sql_stmt_core& msg, bool& addLine) {
+ addLine = true;
+ IsSimpleStatement.emplace_back();
+ Visit(msg);
+ Y_ENSURE(!IsSimpleStatement.empty());
+ if (IsSimpleStatement.back() && *IsSimpleStatement.back()) {
+ addLine = false;
+ }
+
+ IsSimpleStatement.pop_back();
+ }
+
+ template <typename T>
+ void VisitRepeated(const ::google::protobuf::RepeatedPtrField<T>& field) {
+ for (const auto& m : field) {
+ Visit(m);
+ }
+ }
+
+ void VisitDefineActionOrSubqueryBody(const TRule_define_action_or_subquery_body& msg) {
+ VisitRepeated(msg.GetBlock1());
+ if (msg.HasBlock2()) {
+ const auto& b = msg.GetBlock2();
+ bool addLine;
+ HandleNestedStmt(b.GetRule_sql_stmt_core1(), addLine);
+ for (auto block : b.GetBlock2()) {
+ VisitRepeated(block.GetBlock1());
+ if (addLine) {
+ Out('\n');
+ }
+
+ HandleNestedStmt(block.GetRule_sql_stmt_core2(), addLine);
+ }
+
+ VisitRepeated(b.GetBlock3());
+ }
+ }
+
void VisitPragma(const TRule_pragma_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitKeyword(msg.GetToken1());
@@ -368,10 +429,7 @@ private:
const auto& alt2 = msg.GetBlock4().GetAlt2();
VisitKeyword(alt2.GetToken1());
Visit(alt2.GetRule_pragma_value2());
- for (const auto& b : alt2.GetBlock3()) {
- Visit(b);
- }
-
+ VisitRepeated(alt2.GetBlock3());
VisitKeyword(alt2.GetToken4());
} else {
Visit(msg.GetBlock4());
@@ -446,6 +504,7 @@ private:
Visit(msg.GetToken2());
switch (msg.GetBlock3().Alt_case()) {
case TRule_named_nodes_stmt::TBlock3::kAlt1: {
+ MarkAsSimple();
const auto& alt = msg.GetBlock3().GetAlt1();
Visit(alt);
break;
@@ -526,12 +585,14 @@ private:
}
void VisitDropTable(const TRule_drop_table_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_drop_table_stmt::GetDescriptor(), msg);
}
void VisitUse(const TRule_use_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_use_stmt::GetDescriptor(), msg);
@@ -566,6 +627,7 @@ private:
}
void VisitCommit(const TRule_commit_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_commit_stmt::GetDescriptor(), msg);
@@ -698,24 +760,28 @@ private:
}
void VisitRollback(const TRule_rollback_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_rollback_stmt::GetDescriptor(), msg);
}
void VisitDeclare(const TRule_declare_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_declare_stmt::GetDescriptor(), msg);
}
void VisitImport(const TRule_import_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_import_stmt::GetDescriptor(), msg);
}
void VisitExport(const TRule_export_stmt& msg) {
+ MarkAsSimple();
PosFromToken(msg.GetToken1());
NewLine();
VisitAllFields(TRule_export_stmt::GetDescriptor(), msg);
@@ -745,6 +811,7 @@ private:
VisitKeyword(msg.GetToken1());
switch (msg.GetBlock2().Alt_case()) {
case TRule_do_stmt_TBlock2::kAlt1: { // CALL
+ MarkAsSimple();
const auto& alt = msg.GetBlock2().GetAlt1().GetRule_call_action1();
Visit(alt.GetBlock1());
AfterInvokeExpr = true;
@@ -797,6 +864,7 @@ private:
}
void VisitIf(const TRule_if_stmt& msg) {
+ MarkAsComplex();
if (msg.HasBlock1()) {
PosFromToken(msg.GetBlock1().GetToken1());
} else {
@@ -825,6 +893,7 @@ private:
}
void VisitFor(const TRule_for_stmt& msg) {
+ MarkAsComplex();
if (msg.HasBlock1()) {
PosFromToken(msg.GetBlock1().GetToken1());
} else {
@@ -1060,10 +1129,7 @@ private:
}
Visit(msg.GetRule_named_single_source3());
- for (const auto& block : msg.GetBlock4()) {
- Visit(block);
- }
-
+ VisitRepeated(msg.GetBlock4());
if (msg.HasBlock5()) {
NewLine();
const auto& block5 = msg.GetBlock5();
@@ -1098,9 +1164,7 @@ private:
void VisitReduceCore(const TRule_reduce_core& msg) {
Visit(msg.GetToken1());
Visit(msg.GetRule_named_single_source2());
- for (const auto& block : msg.GetBlock3()) {
- Visit(block);
- }
+ VisitRepeated(msg.GetBlock3());
if (msg.HasBlock4()) {
NewLine();
@@ -1584,10 +1648,7 @@ private:
void VisitLambdaBody(const TRule_lambda_body& msg) {
PushCurrentIndent();
NewLine();
- for (const auto& block : msg.GetBlock1()) {
- Visit(block);
- }
-
+ VisitRepeated(msg.GetBlock1());
for (const auto& block : msg.GetBlock2()) {
Visit(block);
NewLine();
@@ -1595,9 +1656,7 @@ private:
Visit(msg.GetToken3());
Visit(msg.GetRule_expr4());
- for (const auto& block : msg.GetBlock5()) {
- Visit(block);
- }
+ VisitRepeated(msg.GetBlock5());
PopCurrentIndent();
NewLine();
@@ -1685,6 +1744,7 @@ private:
ui32 LastComment = 0;
i32 CurrentIndent = 0;
TVector<EScope> Scopes;
+ TVector<TMaybe<bool>> IsSimpleStatement;
ui64 InsideType = 0;
bool AfterNamespace = false;
bool AfterBracket = false;
@@ -1754,6 +1814,7 @@ TStaticData::TStaticData()
{TRule_bitcast_expr::GetDescriptor(), MakeFunctor(&TVisitor::VisitBitCastExpr)},
{TRule_ext_order_by_clause::GetDescriptor(), MakeFunctor(&TVisitor::VisitExtOrderByClause)},
{TRule_key_expr::GetDescriptor(), MakeFunctor(&TVisitor::VisitKeyExpr)},
+ {TRule_define_action_or_subquery_body::GetDescriptor(), MakeFunctor(&TVisitor::VisitDefineActionOrSubqueryBody)},
{TRule_pragma_stmt::GetDescriptor(), MakeFunctor(&TVisitor::VisitPragma)},
{TRule_select_stmt::GetDescriptor(), MakeFunctor(&TVisitor::VisitSelect)},
@@ -1875,12 +1936,13 @@ public:
NYql::TIssues parserIssues;
auto message = NSQLTranslationV1::SqlAST(currentQuery, "Query", parserIssues, NSQLTranslation::SQL_MAX_PARSER_ERRORS, parsedSettings.AnsiLexer, parsedSettings.Arena);
if (!message) {
- finalFormattedQuery << currentQuery;
+ finalFormattedQuery << currentQuery << "\n";
continue;
}
TVisitor visitor(comments);
- auto currentFormattedQuery = visitor.Process(*message);
+ bool addLine;
+ auto currentFormattedQuery = visitor.Process(*message, addLine);
TParsedTokenList stmtFormattedTokens;
auto onNextFormattedToken = [&](NSQLTranslation::TParsedToken&& token) {
stmtFormattedTokens.push_back(token);
@@ -1899,6 +1961,10 @@ public:
if (!currentFormattedQuery.EndsWith(";\n")) {
finalFormattedQuery << ";\n";
}
+
+ if (addLine) {
+ finalFormattedQuery << "\n";
+ }
}
formattedQuery = finalFormattedQuery;
diff --git a/ydb/library/yql/sql/v1/format/sql_format_ut.cpp b/ydb/library/yql/sql/v1/format/sql_format_ut.cpp
index 222784f3671..53e82aa2ea5 100644
--- a/ydb/library/yql/sql/v1/format/sql_format_ut.cpp
+++ b/ydb/library/yql/sql/v1/format/sql_format_ut.cpp
@@ -54,7 +54,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(DotAfterDigits) {
TCases cases = {
- {"select a.1 .b from plato.foo;","SELECT\n\ta.1 .b\nFROM plato.foo;\n"},
+ {"select a.1 .b from plato.foo;","SELECT\n\ta.1 .b\nFROM plato.foo;\n\n"},
};
TSetup setup;
@@ -63,9 +63,9 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(DropRole) {
TCases cases = {
- {"use plato;drop user user,user,user;","USE plato;\nDROP USER user, user, user;\n"},
- {"use plato;drop group if exists user;","USE plato;\nDROP GROUP IF EXISTS user;\n"},
- {"use plato;drop group user,;","USE plato;\nDROP GROUP user,;\n"},
+ {"use plato;drop user user,user,user;","USE plato;\nDROP USER user, user, user;\n\n"},
+ {"use plato;drop group if exists user;","USE plato;\nDROP GROUP IF EXISTS user;\n\n"},
+ {"use plato;drop group user,;","USE plato;\nDROP GROUP user,;\n\n"},
};
TSetup setup;
@@ -74,8 +74,8 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(CreateUser) {
TCases cases = {
- {"use plato;create user user;","USE plato;\nCREATE USER user;\n"},
- {"use plato;create user user encrypted password 'foo';","USE plato;\nCREATE USER user ENCRYPTED PASSWORD 'foo';\n"},
+ {"use plato;create user user;","USE plato;\nCREATE USER user;\n\n"},
+ {"use plato;create user user encrypted password 'foo';","USE plato;\nCREATE USER user ENCRYPTED PASSWORD 'foo';\n\n"},
};
TSetup setup;
@@ -84,7 +84,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(CreateGroup) {
TCases cases = {
- {"use plato;create group user;","USE plato;\nCREATE GROUP user;\n"},
+ {"use plato;create group user;","USE plato;\nCREATE GROUP user;\n\n"},
};
TSetup setup;
@@ -93,9 +93,9 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(AlterUser) {
TCases cases = {
- {"use plato;alter user user rename to user;","USE plato;\nALTER USER user RENAME TO user;\n"},
- {"use plato;alter user user encrypted password 'foo';","USE plato;\nALTER USER user ENCRYPTED PASSWORD 'foo';\n"},
- {"use plato;alter user user with encrypted password 'foo';","USE plato;\nALTER USER user WITH ENCRYPTED PASSWORD 'foo';\n"},
+ {"use plato;alter user user rename to user;","USE plato;\nALTER USER user RENAME TO user;\n\n"},
+ {"use plato;alter user user encrypted password 'foo';","USE plato;\nALTER USER user ENCRYPTED PASSWORD 'foo';\n\n"},
+ {"use plato;alter user user with encrypted password 'foo';","USE plato;\nALTER USER user WITH ENCRYPTED PASSWORD 'foo';\n\n"},
};
TSetup setup;
@@ -104,10 +104,10 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(AlterGroup) {
TCases cases = {
- {"use plato;alter group user add user user;","USE plato;\nALTER GROUP user ADD USER user;\n"},
- {"use plato;alter group user drop user user;","USE plato;\nALTER GROUP user DROP USER user;\n"},
- {"use plato;alter group user add user user, user,;","USE plato;\nALTER GROUP user ADD USER user, user,;\n"},
- {"use plato;alter group user rename to user;","USE plato;\nALTER GROUP user RENAME TO user;\n"},
+ {"use plato;alter group user add user user;","USE plato;\nALTER GROUP user ADD USER user;\n\n"},
+ {"use plato;alter group user drop user user;","USE plato;\nALTER GROUP user DROP USER user;\n\n"},
+ {"use plato;alter group user add user user, user,;","USE plato;\nALTER GROUP user ADD USER user, user,;\n\n"},
+ {"use plato;alter group user rename to user;","USE plato;\nALTER GROUP user RENAME TO user;\n\n"},
};
TSetup setup;
@@ -165,9 +165,9 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Values) {
TCases cases = {
- {"values (1);","VALUES\n\t(1);\n"},
- {"values (1,2),(3,4);","VALUES\n\t(1, 2),\n\t(3, 4);\n"},
- {"values ('a\nb');","VALUES\n\t('a\nb');\n"},
+ {"values (1);","VALUES\n\t(1);\n\n"},
+ {"values (1,2),(3,4);","VALUES\n\t(1, 2),\n\t(3, 4);\n\n"},
+ {"values ('a\nb');","VALUES\n\t('a\nb');\n\n"},
};
TSetup setup;
@@ -189,7 +189,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
TCases cases = {
{"$x=1","$x = 1;\n"},
{"$x,$y=(2,3)","$x, $y = (2, 3);\n"},
- {"$a = select 1 union all select 2","$a =\n\tSELECT\n\t\t1\n\tUNION ALL\n\tSELECT\n\t\t2;\n"},
+ {"$a = select 1 union all select 2","$a =\n\tSELECT\n\t\t1\n\tUNION ALL\n\tSELECT\n\t\t2;\n\n"},
};
TSetup setup;
@@ -208,31 +208,31 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(CreateTable) {
TCases cases = {
- {"create table user(user int32)","CREATE TABLE user (\n\tuser int32\n);\n"},
- {"create table user(user int32,user bool ?)","CREATE TABLE user (\n\tuser int32,\n\tuser bool?\n);\n"},
- {"create table user(user int32) with (user=user)","CREATE TABLE user (\n\tuser int32\n)\nWITH (user = user);\n"},
- {"create table user(primary key (user))","CREATE TABLE user (\n\tPRIMARY KEY (user)\n);\n"},
- {"create table user(primary key (user,user))","CREATE TABLE user (\n\tPRIMARY KEY (user, user)\n);\n"},
- {"create table user(partition by (user))","CREATE TABLE user (\n\tPARTITION BY (user)\n);\n"},
- {"create table user(partition by (user,user))","CREATE TABLE user (\n\tPARTITION BY (user, user)\n);\n"},
- {"create table user(order by (user asc))","CREATE TABLE user (\n\tORDER BY (user ASC)\n);\n"},
- {"create table user(order by (user desc,user))","CREATE TABLE user (\n\tORDER BY (user DESC, user)\n);\n"},
+ {"create table user(user int32)","CREATE TABLE user (\n\tuser int32\n);\n\n"},
+ {"create table user(user int32,user bool ?)","CREATE TABLE user (\n\tuser int32,\n\tuser bool?\n);\n\n"},
+ {"create table user(user int32) with (user=user)","CREATE TABLE user (\n\tuser int32\n)\nWITH (user = user);\n\n"},
+ {"create table user(primary key (user))","CREATE TABLE user (\n\tPRIMARY KEY (user)\n);\n\n"},
+ {"create table user(primary key (user,user))","CREATE TABLE user (\n\tPRIMARY KEY (user, user)\n);\n\n"},
+ {"create table user(partition by (user))","CREATE TABLE user (\n\tPARTITION BY (user)\n);\n\n"},
+ {"create table user(partition by (user,user))","CREATE TABLE user (\n\tPARTITION BY (user, user)\n);\n\n"},
+ {"create table user(order by (user asc))","CREATE TABLE user (\n\tORDER BY (user ASC)\n);\n\n"},
+ {"create table user(order by (user desc,user))","CREATE TABLE user (\n\tORDER BY (user DESC, user)\n);\n\n"},
{"create table user(index user global unique sync with (user=user,user=user) on (user,user))",
- "CREATE TABLE user (\n\tINDEX user GLOBAL UNIQUE SYNC WITH (user = user, user = user) ON (user, user)\n);\n"},
+ "CREATE TABLE user (\n\tINDEX user GLOBAL UNIQUE SYNC WITH (user = user, user = user) ON (user, user)\n);\n\n"},
{"create table user(index user global async with (user=user,) on (user))",
- "CREATE TABLE user (\n\tINDEX user GLOBAL ASYNC WITH (user = user,) ON (user)\n);\n"},
+ "CREATE TABLE user (\n\tINDEX user GLOBAL ASYNC WITH (user = user,) ON (user)\n);\n\n"},
{"create table user(index user local on (user) cover (user))",
- "CREATE TABLE user (\n\tINDEX user LOCAL ON (user) COVER (user)\n);\n"},
+ "CREATE TABLE user (\n\tINDEX user LOCAL ON (user) COVER (user)\n);\n\n"},
{"create table user(index user local on (user) cover (user,user))",
- "CREATE TABLE user (\n\tINDEX user LOCAL ON (user) COVER (user, user)\n);\n"},
+ "CREATE TABLE user (\n\tINDEX user LOCAL ON (user) COVER (user, user)\n);\n\n"},
{"create table user(family user (user='foo'))",
- "CREATE TABLE user (\n\tFAMILY user (user = 'foo')\n);\n"},
+ "CREATE TABLE user (\n\tFAMILY user (user = 'foo')\n);\n\n"},
{"create table user(family user (user='foo',user='bar'))",
- "CREATE TABLE user (\n\tFAMILY user (user = 'foo', user = 'bar')\n);\n"},
+ "CREATE TABLE user (\n\tFAMILY user (user = 'foo', user = 'bar')\n);\n\n"},
{"create table user(changefeed user with (user='foo'))",
- "CREATE TABLE user (\n\tCHANGEFEED user WITH (user = 'foo')\n);\n"},
+ "CREATE TABLE user (\n\tCHANGEFEED user WITH (user = 'foo')\n);\n\n"},
{"create table user(changefeed user with (user='foo',user='bar'))",
- "CREATE TABLE user (\n\tCHANGEFEED user WITH (user = 'foo', user = 'bar')\n);\n"},
+ "CREATE TABLE user (\n\tCHANGEFEED user WITH (user = 'foo', user = 'bar')\n);\n\n"},
{"create table user(foo int32, bar bool ?) inherits (s3:$cluster.xxx) partition by hash(a,b,hash) with (inherits=interval('PT1D') ON logical_time) tablestore tablestore",
"CREATE TABLE user (\n"
"\tfoo int32,\n"
@@ -241,14 +241,14 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
"INHERITS (s3: $cluster.xxx)\n"
"PARTITION BY HASH (a, b, hash)\n"
"WITH (inherits = interval('PT1D') ON logical_time)\n"
- "TABLESTORE tablestore;\n"},
+ "TABLESTORE tablestore;\n\n"},
{"create table user(foo int32, bar bool ?) partition by hash(a,b,hash) with (tiering='some')",
"CREATE TABLE user (\n"
"\tfoo int32,\n"
"\tbar bool?\n"
")\n"
"PARTITION BY HASH (a, b, hash)\n"
- "WITH (tiering = 'some');\n"}
+ "WITH (tiering = 'some');\n\n"}
};
TSetup setup;
@@ -258,15 +258,15 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(ObjectOperations) {
TCases cases = {
{"alter oBject usEr (TYpe abcde) Set (a = b)",
- "ALTER OBJECT usEr (TYPE abcde) SET (a = b);\n"},
+ "ALTER OBJECT usEr (TYPE abcde) SET (a = b);\n\n"},
{"creAte oBject usEr (tYpe abcde) With (a = b)",
- "CREATE OBJECT usEr (TYPE abcde) WITH (a = b);\n"},
+ "CREATE OBJECT usEr (TYPE abcde) WITH (a = b);\n\n"},
{"creAte oBject usEr (tYpe abcde) With a = b",
- "CREATE OBJECT usEr (TYPE abcde) WITH a = b;\n"},
+ "CREATE OBJECT usEr (TYPE abcde) WITH a = b;\n\n"},
{"dRop oBject usEr (tYpe abcde) With (aeEE)",
- "DROP OBJECT usEr (TYPE abcde) WITH (aeEE);\n"},
+ "DROP OBJECT usEr (TYPE abcde) WITH (aeEE);\n\n"},
{"dRop oBject usEr (tYpe abcde) With aeEE",
- "DROP OBJECT usEr (TYPE abcde) WITH aeEE;\n"}
+ "DROP OBJECT usEr (TYPE abcde) WITH aeEE;\n\n"}
};
TSetup setup;
@@ -276,7 +276,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(TypeSelection) {
TCases cases = {
{"Select tYpe.* frOm Table tYpe",
- "SELECT\n\ttYpe.*\nFROM Table\n\ttYpe;\n"}
+ "SELECT\n\ttYpe.*\nFROM Table\n\ttYpe;\n\n"}
};
TSetup setup;
@@ -286,55 +286,55 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(AlterTable) {
TCases cases = {
{"alter table user add user int32",
- "ALTER TABLE user\n\tADD user int32;\n"},
+ "ALTER TABLE user\n\tADD user int32;\n\n"},
{"alter table user add user int32, add user bool ?",
- "ALTER TABLE user\n\tADD user int32,\n\tADD user bool?;\n"},
+ "ALTER TABLE user\n\tADD user int32,\n\tADD user bool?;\n\n"},
{"alter table user add column user int32",
- "ALTER TABLE user\n\tADD COLUMN user int32;\n"},
+ "ALTER TABLE user\n\tADD COLUMN user int32;\n\n"},
{"alter table user drop user",
- "ALTER TABLE user\n\tDROP user;\n"},
+ "ALTER TABLE user\n\tDROP user;\n\n"},
{"alter table user drop column user",
- "ALTER TABLE user\n\tDROP COLUMN user;\n"},
+ "ALTER TABLE user\n\tDROP COLUMN user;\n\n"},
{"alter table user alter column user set family user",
- "ALTER TABLE user\n\tALTER COLUMN user SET FAMILY user;\n"},
+ "ALTER TABLE user\n\tALTER COLUMN user SET FAMILY user;\n\n"},
{"alter table user add family user(user='foo')",
- "ALTER TABLE user\n\tADD FAMILY user (user = 'foo');\n"},
+ "ALTER TABLE user\n\tADD FAMILY user (user = 'foo');\n\n"},
{"alter table user alter family user set user 'foo'",
- "ALTER TABLE user\n\tALTER FAMILY user SET user 'foo';\n"},
+ "ALTER TABLE user\n\tALTER FAMILY user SET user 'foo';\n\n"},
{"alter table user set user user",
- "ALTER TABLE user\n\tSET user user;\n"},
+ "ALTER TABLE user\n\tSET user user;\n\n"},
{"alter table user set (user=user)",
- "ALTER TABLE user\n\tSET (user = user);\n"},
+ "ALTER TABLE user\n\tSET (user = user);\n\n"},
{"alter table user set (user=user,user=user)",
- "ALTER TABLE user\n\tSET (user = user, user = user);\n"},
+ "ALTER TABLE user\n\tSET (user = user, user = user);\n\n"},
{"alter table user reset(user)",
- "ALTER TABLE user\n\tRESET (user);\n"},
+ "ALTER TABLE user\n\tRESET (user);\n\n"},
{"alter table user reset(user, user)",
- "ALTER TABLE user\n\tRESET (user, user);\n"},
+ "ALTER TABLE user\n\tRESET (user, user);\n\n"},
{"alter table user add index user local on (user)",
- "ALTER TABLE user\n\tADD INDEX user LOCAL ON (user);\n"},
+ "ALTER TABLE user\n\tADD INDEX user LOCAL ON (user);\n\n"},
{"alter table user drop index user",
- "ALTER TABLE user\n\tDROP INDEX user;\n"},
+ "ALTER TABLE user\n\tDROP INDEX user;\n\n"},
{"alter table user rename to user",
- "ALTER TABLE user\n\tRENAME TO user;\n"},
+ "ALTER TABLE user\n\tRENAME TO user;\n\n"},
{"alter table user add changefeed user with (user = 'foo')",
- "ALTER TABLE user\n\tADD CHANGEFEED user WITH (user = 'foo');\n"},
+ "ALTER TABLE user\n\tADD CHANGEFEED user WITH (user = 'foo');\n\n"},
{"alter table user alter changefeed user disable",
- "ALTER TABLE user\n\tALTER CHANGEFEED user DISABLE;\n"},
+ "ALTER TABLE user\n\tALTER CHANGEFEED user DISABLE;\n\n"},
{"alter table user alter changefeed user set(user='foo')",
- "ALTER TABLE user\n\tALTER CHANGEFEED user SET (user = 'foo');\n"},
+ "ALTER TABLE user\n\tALTER CHANGEFEED user SET (user = 'foo');\n\n"},
{"alter table user drop changefeed user",
- "ALTER TABLE user\n\tDROP CHANGEFEED user;\n"},
+ "ALTER TABLE user\n\tDROP CHANGEFEED user;\n\n"},
{"alter table user add changefeed user with (initial_scan = tRUe)",
- "ALTER TABLE user\n\tADD CHANGEFEED user WITH (initial_scan = TRUE);\n"},
+ "ALTER TABLE user\n\tADD CHANGEFEED user WITH (initial_scan = TRUE);\n\n"},
{"alter table user add changefeed user with (initial_scan = FaLsE)",
- "ALTER TABLE user\n\tADD CHANGEFEED user WITH (initial_scan = FALSE);\n"},
+ "ALTER TABLE user\n\tADD CHANGEFEED user WITH (initial_scan = FALSE);\n\n"},
{"alter table user add changefeed user with (retention_period = Interval(\"P1D\"))",
- "ALTER TABLE user\n\tADD CHANGEFEED user WITH (retention_period = Interval(\"P1D\"));\n"},
+ "ALTER TABLE user\n\tADD CHANGEFEED user WITH (retention_period = Interval(\"P1D\"));\n\n"},
{"alter table user add changefeed user with (virtual_timestamps = TruE)",
- "ALTER TABLE user\n\tADD CHANGEFEED user WITH (virtual_timestamps = TRUE);\n"},
+ "ALTER TABLE user\n\tADD CHANGEFEED user WITH (virtual_timestamps = TRUE);\n\n"},
{"alter table user add changefeed user with (virtual_timestamps = fAlSe)",
- "ALTER TABLE user\n\tADD CHANGEFEED user WITH (virtual_timestamps = FALSE);\n"},
+ "ALTER TABLE user\n\tADD CHANGEFEED user WITH (virtual_timestamps = FALSE);\n\n"},
};
TSetup setup;
@@ -346,7 +346,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
{"do $a(1,2,3)",
"DO $a(1, 2, 3);\n"},
{"do begin values(1); end do;",
- "DO BEGIN\n\tVALUES\n\t\t(1);\nEND DO;\n"},
+ "DO BEGIN\n\tVALUES\n\t\t(1);\nEND DO;\n\n"},
};
TSetup setup;
@@ -366,9 +366,9 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
"process $c(); "
"end define",
"DEFINE ACTION $a() AS\n\tDEFINE ACTION $b() AS\n\t\t"
- "VALUES\n\t\t\t(1);\n\tEND DEFINE;\n\t"
+ "VALUES\n\t\t\t(1);\n\tEND DEFINE;\n\n\t"
"DEFINE SUBQUERY $c() AS\n\t\tSELECT\n\t\t\t1;\n\t"
- "END DEFINE;\n\tDO $b();\n\tPROCESS $c();\nEND DEFINE;\n"},
+ "END DEFINE;\n\n\tDO $b();\n\tPROCESS $c();\nEND DEFINE;\n\n"},
};
TSetup setup;
@@ -378,14 +378,14 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(If) {
TCases cases = {
{"evaluate if 1=1 do $a()",
- "EVALUATE IF 1 = 1\n\tDO $a();\n"},
+ "EVALUATE IF 1 = 1\n\tDO $a();\n\n"},
{"evaluate if 1=1 do $a() else do $b()",
- "EVALUATE IF 1 = 1\n\tDO $a()\nELSE\n\tDO $b();\n"},
+ "EVALUATE IF 1 = 1\n\tDO $a()\nELSE\n\tDO $b();\n\n"},
{"evaluate if 1=1 do begin select 1; end do",
- "EVALUATE IF 1 = 1\n\tDO BEGIN\n\t\tSELECT\n\t\t\t1;\n\tEND DO;\n"},
+ "EVALUATE IF 1 = 1\n\tDO BEGIN\n\t\tSELECT\n\t\t\t1;\n\tEND DO;\n\n"},
{"evaluate if 1=1 do begin select 1; end do else do begin select 2; end do",
"EVALUATE IF 1 = 1\n\tDO BEGIN\n\t\tSELECT\n\t\t\t1;\n\tEND DO\n"
- "ELSE\n\tDO BEGIN\n\t\tSELECT\n\t\t\t2;\n\tEND DO;\n"},
+ "ELSE\n\tDO BEGIN\n\t\tSELECT\n\t\t\t2;\n\tEND DO;\n\n"},
};
TSetup setup;
@@ -395,13 +395,13 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(For) {
TCases cases = {
{"evaluate for $x in [] do $a($x)",
- "EVALUATE FOR $x IN []\n\tDO $a($x);\n"},
+ "EVALUATE FOR $x IN []\n\tDO $a($x);\n\n"},
{"evaluate for $x in [] do $a($x) else do $b()",
- "EVALUATE FOR $x IN []\n\tDO $a($x)\nELSE\n\tDO $b();\n"},
+ "EVALUATE FOR $x IN []\n\tDO $a($x)\nELSE\n\tDO $b();\n\n"},
{"evaluate for $x in [] do begin select $x; end do",
- "EVALUATE FOR $x IN []\n\tDO BEGIN\n\t\tSELECT\n\t\t\t$x;\n\tEND DO;\n"},
+ "EVALUATE FOR $x IN []\n\tDO BEGIN\n\t\tSELECT\n\t\t\t$x;\n\tEND DO;\n\n"},
{"evaluate for $x in [] do begin select $x; end do else do begin select 2; end do",
- "EVALUATE FOR $x IN []\n\tDO BEGIN\n\t\tSELECT\n\t\t\t$x;\n\tEND DO\nELSE\n\tDO BEGIN\n\t\tSELECT\n\t\t\t2;\n\tEND DO;\n"},
+ "EVALUATE FOR $x IN []\n\tDO BEGIN\n\t\tSELECT\n\t\t\t$x;\n\tEND DO\nELSE\n\tDO BEGIN\n\t\tSELECT\n\t\t\t2;\n\tEND DO;\n\n"},
};
TSetup setup;
@@ -411,29 +411,29 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Update) {
TCases cases = {
{"update user on default values",
- "UPDATE user\nON DEFAULT VALUES;\n"},
+ "UPDATE user\nON DEFAULT VALUES;\n\n"},
{"update user on values (1),(2)",
- "UPDATE user\nON\nVALUES\n\t(1),\n\t(2);\n"},
+ "UPDATE user\nON\nVALUES\n\t(1),\n\t(2);\n\n"},
{"update user on select 1 as x, 2 as y",
- "UPDATE user\nON\nSELECT\n\t1 AS x,\n\t2 AS y;\n"},
+ "UPDATE user\nON\nSELECT\n\t1 AS x,\n\t2 AS y;\n\n"},
{"update user on (x) values (1),(2),(3)",
- "UPDATE user\nON (\n\tx\n)\nVALUES\n\t(1),\n\t(2),\n\t(3);\n"},
+ "UPDATE user\nON (\n\tx\n)\nVALUES\n\t(1),\n\t(2),\n\t(3);\n\n"},
{"update user on (x,y) values (1,2),(2,3),(3,4)",
- "UPDATE user\nON (\n\tx,\n\ty\n)\nVALUES\n\t(1, 2),\n\t(2, 3),\n\t(3, 4);\n"},
+ "UPDATE user\nON (\n\tx,\n\ty\n)\nVALUES\n\t(1, 2),\n\t(2, 3),\n\t(3, 4);\n\n"},
{"update user on (x) select 1",
- "UPDATE user\nON (\n\tx\n)\nSELECT\n\t1;\n"},
+ "UPDATE user\nON (\n\tx\n)\nSELECT\n\t1;\n\n"},
{"update user on (x,y) select 1,2",
- "UPDATE user\nON (\n\tx,\n\ty\n)\nSELECT\n\t1,\n\t2;\n"},
+ "UPDATE user\nON (\n\tx,\n\ty\n)\nSELECT\n\t1,\n\t2;\n\n"},
{"update user set x=1",
- "UPDATE user\nSET\n\tx = 1;\n"},
+ "UPDATE user\nSET\n\tx = 1;\n\n"},
{"update user set (x)=(1)",
- "UPDATE user\nSET\n(\n\tx\n) = (\n\t1\n);\n"},
+ "UPDATE user\nSET\n(\n\tx\n) = (\n\t1\n);\n\n"},
{"update user set (x,y)=(1,2)",
- "UPDATE user\nSET\n(\n\tx,\n\ty\n) = (\n\t1,\n\t2\n);\n"},
+ "UPDATE user\nSET\n(\n\tx,\n\ty\n) = (\n\t1,\n\t2\n);\n\n"},
{"update user set (x,y)=(select 1,2)",
- "UPDATE user\nSET\n(\n\tx,\n\ty\n) = (\n\tSELECT\n\t\t1,\n\t\t2\n);\n"},
+ "UPDATE user\nSET\n(\n\tx,\n\ty\n) = (\n\tSELECT\n\t\t1,\n\t\t2\n);\n\n"},
{"update user set x=1,y=2 where z=3",
- "UPDATE user\nSET\n\tx = 1,\n\ty = 2\nWHERE z = 3;\n"},
+ "UPDATE user\nSET\n\tx = 1,\n\ty = 2\nWHERE z = 3;\n\n"},
};
TSetup setup;
@@ -443,15 +443,15 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Delete) {
TCases cases = {
{"delete from user",
- "DELETE FROM user;\n"},
+ "DELETE FROM user;\n\n"},
{"delete from user where 1=1",
- "DELETE FROM user\nWHERE 1 = 1;\n"},
+ "DELETE FROM user\nWHERE 1 = 1;\n\n"},
{"delete from user on select 1 as x, 2 as y",
- "DELETE FROM user\nON\nSELECT\n\t1 AS x,\n\t2 AS y;\n"},
+ "DELETE FROM user\nON\nSELECT\n\t1 AS x,\n\t2 AS y;\n\n"},
{"delete from user on (x) values (1)",
- "DELETE FROM user\nON (\n\tx\n)\nVALUES\n\t(1);\n"},
+ "DELETE FROM user\nON (\n\tx\n)\nVALUES\n\t(1);\n\n"},
{"delete from user on (x,y) values (1,2), (3,4)",
- "DELETE FROM user\nON (\n\tx,\n\ty\n)\nVALUES\n\t(1, 2),\n\t(3, 4);\n"},
+ "DELETE FROM user\nON (\n\tx,\n\ty\n)\nVALUES\n\t(1, 2),\n\t(3, 4);\n\n"},
};
TSetup setup;
@@ -461,39 +461,39 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Into) {
TCases cases = {
{"insert into user select 1 as x",
- "INSERT INTO user\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO user\nSELECT\n\t1 AS x;\n\n"},
{"insert or abort into user select 1 as x",
- "INSERT OR ABORT INTO user\nSELECT\n\t1 AS x;\n"},
+ "INSERT OR ABORT INTO user\nSELECT\n\t1 AS x;\n\n"},
{"insert or revert into user select 1 as x",
- "INSERT OR REVERT INTO user\nSELECT\n\t1 AS x;\n"},
+ "INSERT OR REVERT INTO user\nSELECT\n\t1 AS x;\n\n"},
{"insert or ignore into user select 1 as x",
- "INSERT OR IGNORE INTO user\nSELECT\n\t1 AS x;\n"},
+ "INSERT OR IGNORE INTO user\nSELECT\n\t1 AS x;\n\n"},
{"upsert into user select 1 as x",
- "UPSERT INTO user\nSELECT\n\t1 AS x;\n"},
+ "UPSERT INTO user\nSELECT\n\t1 AS x;\n\n"},
{"replace into user select 1 as x",
- "REPLACE INTO user\nSELECT\n\t1 AS x;\n"},
+ "REPLACE INTO user\nSELECT\n\t1 AS x;\n\n"},
{"insert into user(x) values (1)",
- "INSERT INTO user (\n\tx\n)\nVALUES\n\t(1);\n"},
+ "INSERT INTO user (\n\tx\n)\nVALUES\n\t(1);\n\n"},
{"insert into user(x,y) values (1,2)",
- "INSERT INTO user (\n\tx,\n\ty\n)\nVALUES\n\t(1, 2);\n"},
+ "INSERT INTO user (\n\tx,\n\ty\n)\nVALUES\n\t(1, 2);\n\n"},
{"insert into plato.user select 1 as x",
- "INSERT INTO plato.user\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO plato.user\nSELECT\n\t1 AS x;\n\n"},
{"insert into @user select 1 as x",
- "INSERT INTO @user\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO @user\nSELECT\n\t1 AS x;\n\n"},
{"insert into $user select 1 as x",
- "INSERT INTO $user\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO $user\nSELECT\n\t1 AS x;\n\n"},
{"insert into @$user select 1 as x",
- "INSERT INTO @$user\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO @$user\nSELECT\n\t1 AS x;\n\n"},
{"upsert into user erase by (x,y) values (1)",
- "UPSERT INTO user\n\tERASE BY (\n\t\tx,\n\t\ty\n\t)\nVALUES\n\t(1);\n"},
+ "UPSERT INTO user\n\tERASE BY (\n\t\tx,\n\t\ty\n\t)\nVALUES\n\t(1);\n\n"},
{"insert into user with truncate select 1 as x",
- "INSERT INTO user\n\tWITH truncate\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO user\n\tWITH truncate\nSELECT\n\t1 AS x;\n\n"},
{"insert into user with (truncate,inferscheme='1') select 1 as x",
- "INSERT INTO user\n\tWITH (truncate, inferscheme = '1')\nSELECT\n\t1 AS x;\n"},
+ "INSERT INTO user\n\tWITH (truncate, inferscheme = '1')\nSELECT\n\t1 AS x;\n\n"},
{"insert into user with schema Struct<user:int32> select 1 as user",
- "INSERT INTO user\n\tWITH SCHEMA Struct<user: int32>\nSELECT\n\t1 AS user;\n"},
+ "INSERT INTO user\n\tWITH SCHEMA Struct<user: int32>\nSELECT\n\t1 AS user;\n\n"},
{"insert into user with schema (int32 as user) select 1 as user",
- "INSERT INTO user\n\tWITH SCHEMA (int32 AS user)\nSELECT\n\t1 AS user;\n"},
+ "INSERT INTO user\n\tWITH SCHEMA (int32 AS user)\nSELECT\n\t1 AS user;\n\n"},
};
TSetup setup;
@@ -503,21 +503,21 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Process) {
TCases cases = {
{"process user",
- "PROCESS user;\n"},
+ "PROCESS user;\n\n"},
{"process user using $f() as user",
- "PROCESS user\nUSING $f() AS user;\n"},
+ "PROCESS user\nUSING $f() AS user;\n\n"},
{"process user,user using $f()",
- "PROCESS user, user\nUSING $f();\n"},
+ "PROCESS user, user\nUSING $f();\n\n"},
{"process user using $f() where 1=1 having 1=1 assume order by user",
- "PROCESS user\nUSING $f()\nWHERE 1 = 1\nHAVING 1 = 1\nASSUME ORDER BY\n\tuser;\n"},
+ "PROCESS user\nUSING $f()\nWHERE 1 = 1\nHAVING 1 = 1\nASSUME ORDER BY\n\tuser;\n\n"},
{"process user using $f() union all process user using $f()",
- "PROCESS user\nUSING $f()\nUNION ALL\nPROCESS user\nUSING $f();\n"},
+ "PROCESS user\nUSING $f()\nUNION ALL\nPROCESS user\nUSING $f();\n\n"},
{"process user using $f() with foo=bar",
- "PROCESS user\nUSING $f()\nWITH foo = bar;\n"},
+ "PROCESS user\nUSING $f()\nWITH foo = bar;\n\n"},
{"discard process user using $f()",
- "DISCARD PROCESS user\nUSING $f();\n"},
+ "DISCARD PROCESS user\nUSING $f();\n\n"},
{"process user using $f() into result user",
- "PROCESS user\nUSING $f()\nINTO RESULT user;\n"},
+ "PROCESS user\nUSING $f()\nINTO RESULT user;\n\n"},
};
TSetup setup;
@@ -527,25 +527,25 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Reduce) {
TCases cases = {
{"reduce user on user using $f()",
- "REDUCE user\nON\n\tuser\nUSING $f();\n"},
+ "REDUCE user\nON\n\tuser\nUSING $f();\n\n"},
{"reduce user on user, using $f()",
- "REDUCE user\nON\n\tuser,\nUSING $f();\n"},
+ "REDUCE user\nON\n\tuser,\nUSING $f();\n\n"},
{"discard reduce user on user using $f();",
- "DISCARD REDUCE user\nON\n\tuser\nUSING $f();\n"},
+ "DISCARD REDUCE user\nON\n\tuser\nUSING $f();\n\n"},
{"reduce user on user using $f() into result user",
- "REDUCE user\nON\n\tuser\nUSING $f()\nINTO RESULT user;\n"},
+ "REDUCE user\nON\n\tuser\nUSING $f()\nINTO RESULT user;\n\n"},
{"reduce user on user using all $f()",
- "REDUCE user\nON\n\tuser\nUSING ALL $f();\n"},
+ "REDUCE user\nON\n\tuser\nUSING ALL $f();\n\n"},
{"reduce user on user using $f() as user",
- "REDUCE user\nON\n\tuser\nUSING $f() AS user;\n"},
+ "REDUCE user\nON\n\tuser\nUSING $f() AS user;\n\n"},
{"reduce user,user on user using $f()",
- "REDUCE user, user\nON\n\tuser\nUSING $f();\n"},
+ "REDUCE user, user\nON\n\tuser\nUSING $f();\n\n"},
{"reduce user on user,user using $f()",
- "REDUCE user\nON\n\tuser,\n\tuser\nUSING $f();\n"},
+ "REDUCE user\nON\n\tuser,\n\tuser\nUSING $f();\n\n"},
{"reduce user on user using $f() where 1=1 having 1=1 assume order by user",
- "REDUCE user\nON\n\tuser\nUSING $f()\nWHERE 1 = 1\nHAVING 1 = 1\nASSUME ORDER BY\n\tuser;\n"},
+ "REDUCE user\nON\n\tuser\nUSING $f()\nWHERE 1 = 1\nHAVING 1 = 1\nASSUME ORDER BY\n\tuser;\n\n"},
{"reduce user presort user,user on user using $f();",
- "REDUCE user\nPRESORT\n\tuser,\n\tuser\nON\n\tuser\nUSING $f();\n"},
+ "REDUCE user\nPRESORT\n\tuser,\n\tuser\nON\n\tuser\nUSING $f();\n\n"},
};
TSetup setup;
@@ -555,111 +555,111 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Select) {
TCases cases = {
{"select 1",
- "SELECT\n\t1;\n"},
+ "SELECT\n\t1;\n\n"},
{"select 1,",
- "SELECT\n\t1,;\n"},
+ "SELECT\n\t1,;\n\n"},
{"select 1 as x",
- "SELECT\n\t1 AS x;\n"},
+ "SELECT\n\t1 AS x;\n\n"},
{"select *",
- "SELECT\n\t*;\n"},
+ "SELECT\n\t*;\n\n"},
{"select a.*",
- "SELECT\n\ta.*;\n"},
+ "SELECT\n\ta.*;\n\n"},
{"select * without a",
- "SELECT\n\t*\n\tWITHOUT\n\t\ta;\n"},
+ "SELECT\n\t*\n\tWITHOUT\n\t\ta;\n\n"},
{"select * without a,b",
- "SELECT\n\t*\n\tWITHOUT\n\t\ta,\n\t\tb;\n"},
+ "SELECT\n\t*\n\tWITHOUT\n\t\ta,\n\t\tb;\n\n"},
{"select * without a,",
- "SELECT\n\t*\n\tWITHOUT\n\t\ta,;\n"},
+ "SELECT\n\t*\n\tWITHOUT\n\t\ta,;\n\n"},
{"select 1 from user",
- "SELECT\n\t1\nFROM user;\n"},
+ "SELECT\n\t1\nFROM user;\n\n"},
{"select 1 from plato.user",
- "SELECT\n\t1\nFROM plato.user;\n"},
+ "SELECT\n\t1\nFROM plato.user;\n\n"},
{"select 1 from $user",
- "SELECT\n\t1\nFROM $user;\n"},
+ "SELECT\n\t1\nFROM $user;\n\n"},
{"select 1 from @user",
- "SELECT\n\t1\nFROM @user;\n"},
+ "SELECT\n\t1\nFROM @user;\n\n"},
{"select 1 from @$user",
- "SELECT\n\t1\nFROM @$user;\n"},
+ "SELECT\n\t1\nFROM @$user;\n\n"},
{"select 1 from user view user",
- "SELECT\n\t1\nFROM user\n\tVIEW user;\n"},
+ "SELECT\n\t1\nFROM user\n\tVIEW user;\n\n"},
{"select 1 from user as user",
- "SELECT\n\t1\nFROM user\n\tAS user;\n"},
+ "SELECT\n\t1\nFROM user\n\tAS user;\n\n"},
{"select 1 from user as user(user)",
- "SELECT\n\t1\nFROM user\n\tAS user (\n\t\tuser\n\t);\n"},
+ "SELECT\n\t1\nFROM user\n\tAS user (\n\t\tuser\n\t);\n\n"},
{"select 1 from user as user(user, user)",
- "SELECT\n\t1\nFROM user\n\tAS user (\n\t\tuser,\n\t\tuser\n\t);\n"},
+ "SELECT\n\t1\nFROM user\n\tAS user (\n\t\tuser,\n\t\tuser\n\t);\n\n"},
{"select 1 from user with user=user",
- "SELECT\n\t1\nFROM user\n\tWITH user = user;\n"},
+ "SELECT\n\t1\nFROM user\n\tWITH user = user;\n\n"},
{"select 1 from user with (user=user, user=user)",
- "SELECT\n\t1\nFROM user\n\tWITH (user = user, user = user);\n"},
+ "SELECT\n\t1\nFROM user\n\tWITH (user = user, user = user);\n\n"},
{"select 1 from user sample 0.1",
- "SELECT\n\t1\nFROM user\n\tSAMPLE 0.1;\n"},
+ "SELECT\n\t1\nFROM user\n\tSAMPLE 0.1;\n\n"},
{"select 1 from user tablesample system(0.1)",
- "SELECT\n\t1\nFROM user\n\tTABLESAMPLE SYSTEM (0.1);\n"},
+ "SELECT\n\t1\nFROM user\n\tTABLESAMPLE SYSTEM (0.1);\n\n"},
{"select 1 from user tablesample bernoulli(0.1) repeatable(10)",
- "SELECT\n\t1\nFROM user\n\tTABLESAMPLE BERNOULLI (0.1) REPEATABLE (10);\n"},
+ "SELECT\n\t1\nFROM user\n\tTABLESAMPLE BERNOULLI (0.1) REPEATABLE (10);\n\n"},
{"select 1 from user flatten columns",
- "SELECT\n\t1\nFROM user\n\tFLATTEN COLUMNS;\n"},
+ "SELECT\n\t1\nFROM user\n\tFLATTEN COLUMNS;\n\n"},
{"select 1 from user flatten list by user",
- "SELECT\n\t1\nFROM user\n\tFLATTEN LIST BY\n\t\tuser;\n"},
+ "SELECT\n\t1\nFROM user\n\tFLATTEN LIST BY\n\t\tuser;\n\n"},
{"select 1 from user flatten list by (user,user)",
- "SELECT\n\t1\nFROM user\n\tFLATTEN LIST BY (\n\t\tuser,\n\t\tuser\n\t);\n"},
+ "SELECT\n\t1\nFROM user\n\tFLATTEN LIST BY (\n\t\tuser,\n\t\tuser\n\t);\n\n"},
{"select 1 from $user(1,2)",
- "SELECT\n\t1\nFROM $user(1, 2);\n"},
+ "SELECT\n\t1\nFROM $user(1, 2);\n\n"},
{"select 1 from $user(1,2) view user",
- "SELECT\n\t1\nFROM $user(1, 2)\n\tVIEW user;\n"},
+ "SELECT\n\t1\nFROM $user(1, 2)\n\tVIEW user;\n\n"},
{"select 1 from range('a','b')",
- "SELECT\n\t1\nFROM range('a', 'b');\n"},
+ "SELECT\n\t1\nFROM range('a', 'b');\n\n"},
{"from user select 1",
- "FROM user\nSELECT\n\t1;\n"},
+ "FROM user\nSELECT\n\t1;\n\n"},
{"select * from user as a join user as b on a.x=b.y",
- "SELECT\n\t*\nFROM user\n\tAS a\nJOIN user\n\tAS b\nON a.x = b.y;\n"},
+ "SELECT\n\t*\nFROM user\n\tAS a\nJOIN user\n\tAS b\nON a.x = b.y;\n\n"},
{"select * from user as a join user as b using(x)",
- "SELECT\n\t*\nFROM user\n\tAS a\nJOIN user\n\tAS b\nUSING (x);\n"},
+ "SELECT\n\t*\nFROM user\n\tAS a\nJOIN user\n\tAS b\nUSING (x);\n\n"},
{"select * from any user as a full join user as b on a.x=b.y",
- "SELECT\n\t*\nFROM ANY user\n\tAS a\nFULL JOIN user\n\tAS b\nON a.x = b.y;\n"},
+ "SELECT\n\t*\nFROM ANY user\n\tAS a\nFULL JOIN user\n\tAS b\nON a.x = b.y;\n\n"},
{"select * from user as a left join any user as b on a.x=b.y",
- "SELECT\n\t*\nFROM user\n\tAS a\nLEFT JOIN ANY user\n\tAS b\nON a.x = b.y;\n"},
+ "SELECT\n\t*\nFROM user\n\tAS a\nLEFT JOIN ANY user\n\tAS b\nON a.x = b.y;\n\n"},
{"select * from any user as a right join any user as b on a.x=b.y",
- "SELECT\n\t*\nFROM ANY user\n\tAS a\nRIGHT JOIN ANY user\n\tAS b\nON a.x = b.y;\n"},
+ "SELECT\n\t*\nFROM ANY user\n\tAS a\nRIGHT JOIN ANY user\n\tAS b\nON a.x = b.y;\n\n"},
{"select * from user as a cross join user as b",
- "SELECT\n\t*\nFROM user\n\tAS a\nCROSS JOIN user\n\tAS b;\n"},
+ "SELECT\n\t*\nFROM user\n\tAS a\nCROSS JOIN user\n\tAS b;\n\n"},
{"select 1 from user where key = 1",
- "SELECT\n\t1\nFROM user\nWHERE key = 1;\n"},
+ "SELECT\n\t1\nFROM user\nWHERE key = 1;\n\n"},
{"select 1 from user having count(*) = 1",
- "SELECT\n\t1\nFROM user\nHAVING count(*) = 1;\n"},
+ "SELECT\n\t1\nFROM user\nHAVING count(*) = 1;\n\n"},
{"select 1 from user group by key",
- "SELECT\n\t1\nFROM user\nGROUP BY\n\tkey;\n"},
+ "SELECT\n\t1\nFROM user\nGROUP BY\n\tkey;\n\n"},
{"select 1 from user group compact by key, value as v",
- "SELECT\n\t1\nFROM user\nGROUP COMPACT BY\n\tkey,\n\tvalue AS v;\n"},
+ "SELECT\n\t1\nFROM user\nGROUP COMPACT BY\n\tkey,\n\tvalue AS v;\n\n"},
{"select 1 from user group by key with combine",
- "SELECT\n\t1\nFROM user\nGROUP BY\n\tkey\n\tWITH combine;\n"},
+ "SELECT\n\t1\nFROM user\nGROUP BY\n\tkey\n\tWITH combine;\n\n"},
{"select 1 from user order by key asc",
- "SELECT\n\t1\nFROM user\nORDER BY\n\tkey ASC;\n"},
+ "SELECT\n\t1\nFROM user\nORDER BY\n\tkey ASC;\n\n"},
{"select 1 from user order by key, value desc",
- "SELECT\n\t1\nFROM user\nORDER BY\n\tkey,\n\tvalue DESC;\n"},
+ "SELECT\n\t1\nFROM user\nORDER BY\n\tkey,\n\tvalue DESC;\n\n"},
{"select 1 from user assume order by key",
- "SELECT\n\t1\nFROM user\nASSUME ORDER BY\n\tkey;\n"},
+ "SELECT\n\t1\nFROM user\nASSUME ORDER BY\n\tkey;\n\n"},
{"select 1 from user window w1 as (), w2 as ()",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t),\n\tw2 AS (\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t),\n\tw2 AS (\n\t);\n\n"},
{"select 1 from user window w1 as (user)",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tuser\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tuser\n\t);\n\n"},
{"select 1 from user window w1 as (partition by user)",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tPARTITION BY\n\t\t\tuser\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tPARTITION BY\n\t\t\tuser\n\t);\n\n"},
{"select 1 from user window w1 as (partition by user, user)",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tPARTITION BY\n\t\t\tuser,\n\t\t\tuser\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tPARTITION BY\n\t\t\tuser,\n\t\t\tuser\n\t);\n\n"},
{"select 1 from user window w1 as (order by user asc)",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tORDER BY\n\t\t\tuser ASC\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tORDER BY\n\t\t\tuser ASC\n\t);\n\n"},
{"select 1 from user window w1 as (order by user, user desc)",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tORDER BY\n\t\t\tuser,\n\t\t\tuser DESC\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tORDER BY\n\t\t\tuser,\n\t\t\tuser DESC\n\t);\n\n"},
{"select 1 from user window w1 as (rows between 1 preceding and 1 following)",
- "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING\n\t);\n"},
+ "SELECT\n\t1\nFROM user\nWINDOW\n\tw1 AS (\n\t\tROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING\n\t);\n\n"},
{"select 1 limit 10",
- "SELECT\n\t1\nLIMIT 10;\n"},
+ "SELECT\n\t1\nLIMIT 10;\n\n"},
{"select 1 limit 10 offset 5",
- "SELECT\n\t1\nLIMIT 10 OFFSET 5;\n"},
+ "SELECT\n\t1\nLIMIT 10 OFFSET 5;\n\n"},
{ "select 1 union all select 2",
- "SELECT\n\t1\nUNION ALL\nSELECT\n\t2;\n" },
+ "SELECT\n\t1\nUNION ALL\nSELECT\n\t2;\n\n" },
};
TSetup setup;
@@ -671,7 +671,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
{"declare $_x AS list<int32>??;declare $_y AS int32 ? ? ;select 1<>2, 1??2,"
"formattype(list<int32>), formattype(resource<user>),formattype(tuple<>), formattype(tuple< >), formattype(int32 ? ? )",
"DECLARE $_x AS list<int32>??;\nDECLARE $_y AS int32??;\nSELECT\n\t1 <> 2,\n\t1 ?? 2,\n\tformattype(list<int32>),"
- "\n\tformattype(resource<user>),\n\tformattype(tuple<>),\n\tformattype(tuple< >),\n\tformattype(int32??" ");\n"
+ "\n\tformattype(resource<user>),\n\tformattype(tuple<>),\n\tformattype(tuple< >),\n\tformattype(int32??" ");\n\n"
},
};
@@ -684,7 +684,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
{"$f=($a,$b)->{$x=$a+$b;return $a*$x};$g=($a,$b?)->($a+$b??0);select $f(10,4),$g(1,2);",
"$f = ($a, $b) -> {\n\t$x = $a + $b;\n\tRETURN $a * $x\n};\n"
"$g = ($a, $b?) -> ($a + $b ?? 0);\n"
- "SELECT\n\t$f(10, 4),\n\t$g(1, 2);\n"},
+ "SELECT\n\t$f(10, 4),\n\t$g(1, 2);\n\n"},
};
TSetup setup;
@@ -694,13 +694,13 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(NestedSelect) {
TCases cases = {
{"$x=select 1",
- "$x =\n\tSELECT\n\t\t1;\n"},
+ "$x =\n\tSELECT\n\t\t1;\n\n"},
{"$x=(select 1)",
- "$x = (\n\tSELECT\n\t\t1\n);\n"},
+ "$x = (\n\tSELECT\n\t\t1\n);\n\n"},
{"select 1 in (select 1)",
- "SELECT\n\t1 IN (\n\t\tSELECT\n\t\t\t1\n\t);\n"},
+ "SELECT\n\t1 IN (\n\t\tSELECT\n\t\t\t1\n\t);\n\n"},
{"select 1 in ((select 1))",
- "SELECT\n\t1 IN (\n\t\t(\n\t\t\tSELECT\n\t\t\t\t1\n\t\t)\n\t);\n"},
+ "SELECT\n\t1 IN (\n\t\t(\n\t\t\tSELECT\n\t\t\t\t1\n\t\t)\n\t);\n\n"},
};
TSetup setup;
@@ -709,8 +709,8 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(Cast) {
TCases cases = {
- {"select cast(1 as string)","SELECT\n\tCAST(1 AS string);\n"},
- {"select bitcast(1 as int32)","SELECT\n\tBITCAST(1 AS int32);\n"},
+ {"select cast(1 as string)","SELECT\n\tCAST(1 AS string);\n\n"},
+ {"select bitcast(1 as int32)","SELECT\n\tBITCAST(1 AS int32);\n\n"},
};
TSetup setup;
@@ -719,9 +719,9 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(StructLiteral) {
TCases cases = {
- {"select <||>","SELECT\n\t<||>;\n"},
- {"select <|a:1|>","SELECT\n\t<|a: 1|>;\n"},
- {"select <|a:1,b:2|>","SELECT\n\t<|a: 1, b: 2|>;\n"},
+ {"select <||>","SELECT\n\t<||>;\n\n"},
+ {"select <|a:1|>","SELECT\n\t<|a: 1|>;\n\n"},
+ {"select <|a:1,b:2|>","SELECT\n\t<|a: 1, b: 2|>;\n\n"},
};
TSetup setup;
@@ -731,11 +731,11 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(TableHints) {
TCases cases = {
{"select * from plato.T with schema(foo int32, bar list<string>) where key is not null",
- "SELECT\n\t*\nFROM plato.T\n\tWITH SCHEMA (foo int32, bar list<string>)\nWHERE key IS NOT NULL;\n"},
+ "SELECT\n\t*\nFROM plato.T\n\tWITH SCHEMA (foo int32, bar list<string>)\nWHERE key IS NOT NULL;\n\n"},
{"select * from plato.T with schema struct<foo:integer, Bar:list<string?>> where key<0",
- "SELECT\n\t*\nFROM plato.T\n\tWITH SCHEMA struct<foo: integer, Bar: list<string?>>\nWHERE key < 0;\n"},
+ "SELECT\n\t*\nFROM plato.T\n\tWITH SCHEMA struct<foo: integer, Bar: list<string?>>\nWHERE key < 0;\n\n"},
{"select * from plato.T with (foo=bar, x=$y, a=(a, b, c), u='aaa', schema (foo int32, bar list<string>))",
- "SELECT\n\t*\nFROM plato.T\n\tWITH (foo = bar, x = $y, a = (a, b, c), u = 'aaa', SCHEMA (foo int32, bar list<string>));\n"},
+ "SELECT\n\t*\nFROM plato.T\n\tWITH (foo = bar, x = $y, a = (a, b, c), u = 'aaa', SCHEMA (foo int32, bar list<string>));\n\n"},
};
TSetup setup;
@@ -745,7 +745,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(BoolAsVariableName) {
TCases cases = {
{"$ False = True; select $ False;",
- "$False = TRUE;\nSELECT\n\t$False;\n"},
+ "$False = TRUE;\nSELECT\n\t$False;\n\n"},
};
TSetup setup;
@@ -755,7 +755,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(WithSchemaEquals) {
TCases cases = {
{"select * from plato.T with (format= csv_with_names, schema=(year int32 Null, month String, day String not null, a Utf8, b Uint16));",
- "SELECT\n\t*\nFROM plato.T\n\tWITH (format = csv_with_names, SCHEMA = (year int32 NULL, month String, day String NOT NULL, a Utf8, b Uint16));\n"},
+ "SELECT\n\t*\nFROM plato.T\n\tWITH (format = csv_with_names, SCHEMA = (year int32 NULL, month String, day String NOT NULL, a Utf8, b Uint16));\n\n"},
};
TSetup setup;
@@ -765,7 +765,7 @@ Y_UNIT_TEST_SUITE(CheckSqlFormatter) {
Y_UNIT_TEST(SquareBrackets) {
TCases cases = {
{"select a[0]",
- "SELECT\n\ta[0];\n"},
+ "SELECT\n\ta[0];\n\n"},
};
TSetup setup;