diff options
Diffstat (limited to 'yql/essentials/sql/v1/sql_query.cpp')
-rw-r--r-- | yql/essentials/sql/v1/sql_query.cpp | 102 |
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 |