aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/sql_query.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'yql/essentials/sql/v1/sql_query.cpp')
-rw-r--r--yql/essentials/sql/v1/sql_query.cpp102
1 files changed, 95 insertions, 7 deletions
diff --git a/yql/essentials/sql/v1/sql_query.cpp b/yql/essentials/sql/v1/sql_query.cpp
index b59ae88c4b..a860571698 100644
--- a/yql/essentials/sql/v1/sql_query.cpp
+++ b/yql/essentials/sql/v1/sql_query.cpp
@@ -191,7 +191,7 @@ static bool TransferSettingsEntry(std::map<TString, TNodePtr>& out,
ctx.Context().Error() << key.Name << " is not supported in ALTER";
return false;
}
-
+
if (!out.emplace(keyName, value).second) {
ctx.Context().Error() << "Duplicate transfer setting: " << key.Name;
}
@@ -1961,7 +1961,7 @@ bool TSqlQuery::Statement(TVector<TNodePtr>& blocks, const TRule_sql_stmt_core&
break;
}
case TRule_sql_stmt_core::kAltSqlStmtCore62: {
- // show_create_table_stmt: SHOW CREATE TABLE table_ref
+ // show_create_table_stmt: SHOW CREATE (TABLE | VIEW) table_ref
Ctx.BodyPart();
const auto& rule = core.GetAlt_sql_stmt_core62().GetRule_show_create_table_stmt1();
@@ -1969,8 +1969,16 @@ bool TSqlQuery::Statement(TVector<TNodePtr>& blocks, const TRule_sql_stmt_core&
if (!SimpleTableRefImpl(rule.GetRule_simple_table_ref4(), tr)) {
return false;
}
+ TString type;
+ if (auto typeToken = to_lower(rule.GetToken3().GetValue()); typeToken == "table") {
+ type = "showCreateTable";
+ } else if (typeToken == "view") {
+ type = "showCreateView";
+ } else {
+ YQL_ENSURE(false, "Unsupported SHOW CREATE statement type: " << typeToken);
+ }
- AddStatementToBlocks(blocks, BuildShowCreate(Ctx.Pos(), tr, Ctx.Scoped));
+ AddStatementToBlocks(blocks, BuildShowCreate(Ctx.Pos(), tr, type, Ctx.Scoped));
break;
}
case TRule_sql_stmt_core::ALT_NOT_SET:
@@ -2577,6 +2585,7 @@ void TSqlQuery::AlterTableDropChangefeed(const TRule_alter_table_drop_changefeed
params.DropChangefeeds.emplace_back(IdEx(node.GetRule_an_id3(), *this));
}
+/// @see EnumeratePragmas too
TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success) {
success = false;
const TString& prefix = OptIdPrefixAsStr(stmt.GetRule_opt_id_prefix_or_type2(), *this);
@@ -3521,14 +3530,20 @@ TNodePtr TSqlQuery::Build(const TRule_delete_stmt& stmt) {
TSourcePtr source = BuildTableSource(Ctx.Pos(), table);
+ const bool isBatch = stmt.HasBlock1();
TNodePtr options = nullptr;
+
if (stmt.HasBlock6()) {
+ if (isBatch) {
+ Ctx.Error(GetPos(stmt.GetToken2()))
+ << "BATCH DELETE is unsupported with RETURNING";
+ return nullptr;
+ }
+
options = ReturningList(stmt.GetBlock6().GetRule_returning_columns_list1());
options = options->Y(options);
}
- const bool isBatch = stmt.HasBlock1();
-
if (stmt.HasBlock5()) {
switch (stmt.GetBlock5().Alt_case()) {
case TRule_delete_stmt_TBlock5::kAlt1: {
@@ -3585,14 +3600,20 @@ TNodePtr TSqlQuery::Build(const TRule_update_stmt& stmt) {
return nullptr;
}
+ const bool isBatch = stmt.HasBlock1();
TNodePtr options = nullptr;
+
if (stmt.HasBlock5()) {
+ if (isBatch) {
+ Ctx.Error(GetPos(stmt.GetToken2()))
+ << "BATCH UPDATE is unsupported with RETURNING";
+ return nullptr;
+ }
+
options = ReturningList(stmt.GetBlock5().GetRule_returning_columns_list1());
options = options->Y(options);
}
- const bool isBatch = stmt.HasBlock1();
-
switch (stmt.GetBlock4().Alt_case()) {
case TRule_update_stmt_TBlock4::kAlt1: {
const auto& alt = stmt.GetBlock4().GetAlt1();
@@ -3925,4 +3946,71 @@ bool TSqlQuery::ParseTableStoreFeatures(std::map<TString, TDeferredAtom> & resul
return true;
}
+void EnumeratePragmas(std::function<void(std::string_view)> callback) {
+ callback("ClassicDivision");
+ callback("StrictJoinKeyTypes");
+ callback("DisableStrictJoinKeyTypes");
+ callback("CheckedOps");
+ callback("UnicodeLiterals");
+ callback("DisableUnicodeLiterals");
+ callback("WarnUntypedStringLiterals");
+ callback("DisableWarnUntypedStringLiterals");
+ callback("File");
+ callback("FileOption");
+ callback("Folder");
+ callback("Udf");
+ callback("Library");
+ callback("Package");
+ callback("PackageVersion");
+ callback("RefSelect");
+ callback("SampleSelect");
+ callback("AllowDotInAlias");
+ callback("OverrideLibrary");
+ callback("DirectRead");
+ callback("AutoCommit");
+ callback("UseTablePrefixForEach");
+ callback("PathPrefix");
+ callback("GroupByLimit");
+ callback("GroupByCubeLimit");
+ callback("SimpleColumns");
+ callback("DisableSimpleColumns");
+ callback("ResultRowsLimit");
+ callback("ResultSizeLimit");
+ callback("RuntimeLogLevel");
+ callback("Warning");
+ callback("Greetings");
+ callback("WarningMsg");
+ callback("ErrorMsg");
+ callback("AllowUnnamedColumns");
+ callback("WarnUnnamedColumns");
+ callback("DiscoveryMode");
+ callback("EnableSystemColumns");
+ callback("DqEngine");
+ callback("BlockEngine");
+ callback("JsonQueryReturnsJsonDocument");
+ callback("DisableJsonQueryReturnsJsonDocument");
+ callback("PositionalUnionAll");
+ callback("PqReadBy");
+ callback("DataWatermarks");
+ callback("FeatureR010");
+ callback("CostBasedOptimizer");
+ callback("Engine");
+ callback("yson.AutoConvert");
+ callback("yson.Strict");
+ callback("yson.DisableStrict");
+ callback("yson.CastToString");
+ callback("yson.DisableCastToString");
+}
+
+void EnumerateStmtContexts(std::function<void(std::string_view)> callback) {
+ callback("read");
+ callback("insert");
+ callback("replace");
+ callback("upsert");
+ callback("update");
+ callback("delete");
+ callback("create_table");
+ callback("create_view");
+}
+
} // namespace NSQLTranslationV1