Skip to content

Commit

Permalink
Merge a32a93c into 65e45fc
Browse files Browse the repository at this point in the history
  • Loading branch information
gridnevvvit authored Apr 24, 2024
2 parents 65e45fc + a32a93c commit 9031594
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
31 changes: 26 additions & 5 deletions ydb/core/kqp/provider/yql_kikimr_type_ann.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ namespace {
return true;
}

bool ParseConstraintNode(TExprContext& ctx, TKikimrColumnMetadata& columnMeta, const TExprList& columnTuple, TCoNameValueTuple constraint, TKikimrConfiguration& config, bool isAlter = false) {
bool ParseConstraintNode(TExprContext& ctx, TKikimrColumnMetadata& columnMeta, const TExprList& columnTuple, TCoNameValueTuple constraint, TKikimrConfiguration& config, bool& needEval, bool isAlter = false) {
auto nameNode = columnTuple.Item(0).Cast<TCoAtom>();
auto typeNode = columnTuple.Item(1);

Expand Down Expand Up @@ -345,9 +345,23 @@ namespace {
}

if (!skipAnnotationValidation && !IsSameAnnotation(*defaultType, *actualType)) {
ctx.AddError(TIssue(ctx.GetPosition(constraint.Pos()), TStringBuilder() << "Default expr " << columnName
<< " type mismatch, expected: " << (*actualType) << ", actual: " << *(defaultType)));
auto constrPtr = constraint.Value().Cast().Ptr();
auto status = TryConvertTo(constrPtr, *type, ctx);
if (status == IGraphTransformer::TStatus::Error) {
ctx.AddError(TIssue(ctx.GetPosition(constraint.Pos()), TStringBuilder() << "Default expr " << columnName
<< " type mismatch, expected: " << (*actualType) << ", actual: " << *(defaultType)));
return false;
} else if (status == IGraphTransformer::TStatus::Repeat) {
auto evaluatedExpr = ctx.Builder(constrPtr->Pos())
.Callable("EvaluateExpr")
.Add(0, constrPtr)
.Seal()
.Build();

constraint.Ptr()->ChildRef(TCoNameValueTuple::idx_Value) = evaluatedExpr;
needEval = true;
return true;
}
}

if (columnMeta.IsDefaultKindDefined()) {
Expand Down Expand Up @@ -867,9 +881,15 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over
if (columnTuple.Size() > 2) {
const auto& columnConstraints = columnTuple.Item(2).Cast<TCoNameValueTuple>();
for(const auto& constraint: columnConstraints.Value().Cast<TCoNameValueTupleList>()) {
if (!ParseConstraintNode(ctx, columnMeta, columnTuple, constraint, SessionCtx->Config())) {
bool needEval = false;
if (!ParseConstraintNode(ctx, columnMeta, columnTuple, constraint, SessionCtx->Config(), needEval)) {
return TStatus::Error;
}

if (needEval) {
ctx.Step.Repeat(TExprStep::ExprEval);
return TStatus(TStatus::Repeat, true);
}
}
}

Expand Down Expand Up @@ -1282,7 +1302,8 @@ virtual TStatus HandleCreateTable(TKiCreateTable create, TExprContext& ctx) over
if (columnTuple.Size() > 2) {
const auto& columnConstraints = columnTuple.Item(2).Cast<TCoNameValueTuple>();
for(const auto& constraint: columnConstraints.Value().Cast<TCoNameValueTupleList>()) {
if (!ParseConstraintNode(ctx, columnMeta, columnTuple, constraint, SessionCtx->Config(), true)) {
bool needEval = false;
if (!ParseConstraintNode(ctx, columnMeta, columnTuple, constraint, SessionCtx->Config(), needEval, true)) {
return TStatus::Error;
}
}
Expand Down
3 changes: 2 additions & 1 deletion ydb/core/kqp/ut/pg/kqp_pg_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3743,6 +3743,7 @@ Y_UNIT_TEST_SUITE(KqpPg) {
d varchar(20) DEFAULT 'foo'::varchar(2),
e int DEFAULT NULL,
f bit varying(5) DEFAULT '1001',
g bigint DEFAULT 0 NOT NULL,
PRIMARY KEY(a)
);
)", NYdb::NQuery::TTxControl::NoTx(), settings).ExtractValueSync();
Expand All @@ -3762,7 +3763,7 @@ Y_UNIT_TEST_SUITE(KqpPg) {

UNIT_ASSERT_C(!result.GetResultSets().empty(), "results are empty");
CompareYson(R"(
[["1";"5";"7";"fo";#;"1001"]]
[["1";"5";"7";"fo";#;"1001";"0"]]
)", FormatResultSetYson(result.GetResultSet(0)));
}
}
Expand Down

0 comments on commit 9031594

Please sign in to comment.