From 4e24f639502d1d414e45a723820c21951be2f228 Mon Sep 17 00:00:00 2001 From: qrort <31865255+qrort@users.noreply.github.com> Date: Mon, 8 Apr 2024 12:38:59 +0300 Subject: [PATCH] KIKIMR-18545: do not set not_null for default values (#3512) --- ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp | 22 ++++++++++++++----- .../tx/schemeshard/ut_export/ut_export.cpp | 2 -- ydb/core/ydb_convert/table_description.cpp | 10 +++++---- ydb/services/ydb/ydb_ut.cpp | 4 ---- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp b/ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp index 01a3c9bdb215..5252d6f1e6de 100644 --- a/ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp @@ -1966,8 +1966,8 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { {"Value3", "Pg('pgint2','',21,0,0)"} }; - const THashMap columnNullability = { - {"Key1", true}, + const THashMap columnNonNullability = { + {"Key1", false}, {"Key2", false}, {"Value1", false}, {"Value2", false}, @@ -1977,7 +1977,12 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { const auto& columns = describeTableResult.GetTableDescription().GetTableColumns(); for (const auto& column : columns) { UNIT_ASSERT_VALUES_EQUAL_C(column.Type.ToString(), columnTypes.at(column.Name), column.Name); - UNIT_ASSERT_VALUES_EQUAL_C(column.NotNull.value(), columnNullability.at(column.Name), column.Name); + bool isNotNull = columnNonNullability.at(column.Name); + if (isNotNull) { + UNIT_ASSERT_VALUES_EQUAL_C(column.NotNull.value(), true, column.Name); + } else { + UNIT_ASSERT_C(!column.NotNull.has_value() || !column.NotNull.value(), column.Name); + } } } @@ -1997,16 +2002,21 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } auto describeTableResult = session.DescribeTable("/Root/NotNullCheck").GetValueSync(); UNIT_ASSERT_C(describeTableResult.IsSuccess(), describeTableResult.GetIssues().ToString()); - const THashMap columnNullability = { + const THashMap columnNonNullability = { {"1", false}, - {"2", true}, + {"2", false}, {"3", false}, {"4", true}, }; const auto& columns = describeTableResult.GetTableDescription().GetTableColumns(); for (const auto& column : columns) { - UNIT_ASSERT_VALUES_EQUAL_C(column.NotNull.value(), columnNullability.at(column.Name), column.Name); + bool isNotNull = columnNonNullability.at(column.Name); + if (isNotNull) { + UNIT_ASSERT_VALUES_EQUAL_C(column.NotNull.value(), true, column.Name); + } else { + UNIT_ASSERT_C(!column.NotNull.has_value() || !column.NotNull.value(), column.Name); + } } { diff --git a/ydb/core/tx/schemeshard/ut_export/ut_export.cpp b/ydb/core/tx/schemeshard/ut_export/ut_export.cpp index 0408d35f5141..67d54ae2ec4f 100644 --- a/ydb/core/tx/schemeshard/ut_export/ut_export.cpp +++ b/ydb/core/tx/schemeshard/ut_export/ut_export.cpp @@ -365,7 +365,6 @@ Y_UNIT_TEST_SUITE(TExportToS3Tests) { } } } - not_null: false from_literal { type { optional_type { @@ -390,7 +389,6 @@ columns { } } } - not_null: false from_literal { type { optional_type { diff --git a/ydb/core/ydb_convert/table_description.cpp b/ydb/core/ydb_convert/table_description.cpp index fc8a40a8e8ad..a3e9eccf61d9 100644 --- a/ydb/core/ydb_convert/table_description.cpp +++ b/ydb/core/ydb_convert/table_description.cpp @@ -370,13 +370,15 @@ static Ydb::Type* AddColumn(Ydb::Table::ColumnMeta* newColumn, const TColumn& co pg->set_oid(NPg::PgTypeIdFromTypeDesc(typeDesc)); pg->set_typlen(0); pg->set_typmod(0); + if (column.GetNotNull()) { + newColumn->set_not_null(column.GetNotNull()); + } } else { NYql::NProto::TypeIds protoType; if (!NYql::NProto::TypeIds_Parse(column.GetType(), &protoType)) { throw NYql::TErrorException(NKikimrIssues::TIssuesIds::DEFAULT_ERROR) << "Got invalid type: " << column.GetType() << " for column: " << column.GetName(); } - if (column.GetNotNull()) { columnType = newColumn->mutable_type(); } else { @@ -392,7 +394,6 @@ static Ydb::Type* AddColumn(Ydb::Table::ColumnMeta* newColumn, const TColumn& co NMiniKQL::ExportPrimitiveTypeToProto(protoType, *columnType); } } - newColumn->set_not_null(column.GetNotNull()); return columnType; } @@ -410,13 +411,15 @@ Ydb::Type* AddColumn(Ydb::Table::ColumnMeta pg->set_oid(NPg::PgTypeIdFromTypeDesc(typeDesc)); pg->set_typlen(0); pg->set_typmod(0); + if (column.GetNotNull()) { + newColumn->set_not_null(column.GetNotNull()); + } } else { NYql::NProto::TypeIds protoType; if (!NYql::NProto::TypeIds_Parse(column.GetType(), &protoType)) { throw NYql::TErrorException(NKikimrIssues::TIssuesIds::DEFAULT_ERROR) << "Got invalid type: " << column.GetType() << " for column: " << column.GetName(); } - if (column.GetNotNull()) { columnType = newColumn->mutable_type(); } else { @@ -432,7 +435,6 @@ Ydb::Type* AddColumn(Ydb::Table::ColumnMeta NMiniKQL::ExportPrimitiveTypeToProto(protoType, *columnType); } } - newColumn->set_not_null(column.GetNotNull()); switch (column.GetDefaultValueCase()) { case NKikimrSchemeOp::TColumnDescription::kDefaultFromLiteral: { auto fromLiteral = newColumn->mutable_from_literal(); diff --git a/ydb/services/ydb/ydb_ut.cpp b/ydb/services/ydb/ydb_ut.cpp index dee74daf8e28..2ddc36dd71c2 100644 --- a/ydb/services/ydb/ydb_ut.cpp +++ b/ydb/services/ydb/ydb_ut.cpp @@ -1268,7 +1268,6 @@ columns { } } } - not_null: false } columns { name: "Value" @@ -1279,7 +1278,6 @@ columns { } } } - not_null: false } primary_key: "Key" partitioning_settings { @@ -1607,7 +1605,6 @@ columns { } } } - not_null: false } columns { name: "IValue" @@ -1618,7 +1615,6 @@ columns { } } } - not_null: false } primary_key: "Key" indexes {