diff --git a/ydb/core/kqp/provider/yql_kikimr_exec.cpp b/ydb/core/kqp/provider/yql_kikimr_exec.cpp index 78546a2058d0..42b62863492a 100644 --- a/ydb/core/kqp/provider/yql_kikimr_exec.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_exec.cpp @@ -1318,21 +1318,21 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer(); auto columnName = columnTuple.Item(0).Cast(); alter_columns->set_name(TString(columnName)); - auto alterColumnList = columnTuple.Item(1).Cast(); - if (TString(alterColumnList.Item(0).Cast()) = "setDefault") { + auto alterColumnAction = TString(alterColumnList.Item(0).Cast()); + if (alterColumnAction == "setDefault") { auto setDefault = alterColumnList.Item(1).Cast(); auto func = TString(setDefault.Item(0).Cast()); auto arg = TString(setDefault.Item(1).Cast()); if (func != "nextval") { - ctx.AddError(TIssue(ctx.GetPosition(alterColumnList.Pos()), + ctx.AddError(TIssue(ctx.GetPosition(setDefault.Pos()), TStringBuilder() << "Unsupported function to set default: " << func)); return SyncError(); } auto fromSequence = alter_columns->mutable_from_sequence(); fromSequence->set_name(arg); - } else { - auto families = columnTuple.Item(1).Cast(); + } else if (alterColumnAction == "setFamily") { + auto families = alterColumnList.Item(1).Cast(); if (families.Size() > 1) { ctx.AddError(TIssue(ctx.GetPosition(families.Pos()), "Unsupported number of families")); @@ -1341,6 +1341,10 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformerset_family(TString(family.Value())); } + } else { + ctx.AddError(TIssue(ctx.GetPosition(alterColumnList.Pos()), + TStringBuilder() << "Unsupported action to alter column")); + return SyncError(); } } } else if (name == "addColumnFamilies" || name == "alterColumnFamilies") { diff --git a/ydb/core/kqp/provider/yql_kikimr_type_ann.cpp b/ydb/core/kqp/provider/yql_kikimr_type_ann.cpp index aca9507393e8..6dd19301f2ac 100644 --- a/ydb/core/kqp/provider/yql_kikimr_type_ann.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_type_ann.cpp @@ -1361,8 +1361,10 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over << " Column: \"" << name << "\" does not exist")); return TStatus::Error; } - if (TString(columnTuple.Item(1).Cast().Item(0).Cast()) == "setDefault") { - auto setDefault = columnTuple.Item(1).Cast().Item(1).Cast(); + auto alterColumnList = columnTuple.Item(1).Cast(); + auto alterColumnAction = TString(alterColumnList.Item(0).Cast()); + if (alterColumnAction == "setDefault") { + auto setDefault = alterColumnList.Item(1).Cast(); auto func = TString(setDefault.Item(0).Cast()); auto arg = TString(setDefault.Item(1).Cast()); if (func != "nextval") { @@ -1375,15 +1377,19 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over TStringBuilder() << "Function nextval has exactly one argument")); return TStatus::Error; } - } else { - auto families = columnTuple.Item(1); - if (families.Cast().Size() > 1) { + } else if (alterColumnAction == "setFamily") { + auto families = alterColumnList.Item(1).Cast(); + if (families.Size() > 1) { ctx.AddError(TIssue(ctx.GetPosition(nameNode.Pos()), TStringBuilder() << "AlterTable : " << NCommon::FullTableName(table->Metadata->Cluster, table->Metadata->Name) << " Column: \"" << name << "\". Several column families for a single column are not yet supported")); return TStatus::Error; } + } else { + ctx.AddError(TIssue(ctx.GetPosition(nameNode.Pos()), + TStringBuilder() << "Unsupported action to alter column")); + return TStatus::Error; } } } else if (name == "addIndex") { diff --git a/ydb/library/yql/sql/v1/query.cpp b/ydb/library/yql/sql/v1/query.cpp index 28762c779389..495547b28d95 100644 --- a/ydb/library/yql/sql/v1/query.cpp +++ b/ydb/library/yql/sql/v1/query.cpp @@ -1335,7 +1335,8 @@ class TAlterTableNode final: public TAstListNode { for (const auto& family : col.Families) { familiesDesc = L(familiesDesc, BuildQuotedAtom(family.Pos, family.Name)); } - columnDesc = L(columnDesc, Q(familiesDesc)); + + columnDesc = L(columnDesc, Q(Y(Q("setFamily"), Q(familiesDesc)))); columns = L(columns, Q(columnDesc)); } actions = L(actions, Q(Y(Q("alterColumns"), Q(columns))));