diff options
author | qrort <qrort@yandex-team.com> | 2023-07-04 13:58:22 +0300 |
---|---|---|
committer | qrort <qrort@yandex-team.com> | 2023-07-04 13:58:22 +0300 |
commit | 0a78431e3d51505091495c6a27559b1120f79b98 (patch) | |
tree | 9fcec5ab621f5369aba521fdbc1b0fb2ca305116 | |
parent | ebf95a11d27127815cbef0a35f6646943feb02d0 (diff) | |
download | ydb-0a78431e3d51505091495c6a27559b1120f79b98.tar.gz |
EnableNotNullDataColumns = true
-rw-r--r-- | ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp | 218 | ||||
-rw-r--r-- | ydb/core/protos/config.proto | 2 | ||||
-rw-r--r-- | ydb/services/ydb/ydb_bulk_upsert_ut.cpp | 7 |
3 files changed, 218 insertions, 9 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 2cf0b4bead..6ddd08b771 100644 --- a/ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp @@ -10,7 +10,7 @@ using namespace NYdb::NTable; Y_UNIT_TEST_SUITE(KqpNotNullColumns) { Y_UNIT_TEST(CreateTableWithDisabledNotNullDataColumns) { - TKikimrRunner kikimr(NKqp::TKikimrSettings().SetWithSampleTables(false)); + TKikimrRunner kikimr(NKqp::TKikimrSettings().SetWithSampleTables(false).SetEnableNotNullDataColumns(false)); auto client = kikimr.GetTableClient(); auto session = client.CreateSession().GetValueSync().GetSession(); @@ -566,6 +566,47 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } } + Y_UNIT_TEST(UpsertNotNullPg) { + auto settings = TKikimrSettings() + .SetWithSampleTables(false); + + TKikimrRunner kikimr(settings); + auto client = kikimr.GetTableClient(); + auto session = client.CreateSession().GetValueSync().GetSession(); + + { + const auto query = Q_(R"( + CREATE TABLE `/Root/TestUpsertNotNull` ( + Key Uint64, + Value PgText NOT NULL, + PRIMARY KEY (Key)) + )"); + + auto result = session.ExecuteSchemeQuery(query).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { + const auto query = Q_("UPSERT INTO `/Root/TestUpsertNotNull` (Key, Value) VALUES (1, 'Value1'pt)"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* missing not null column */ + const auto query = Q_("UPSERT INTO `/Root/TestUpsertNotNull` (Key) VALUES (2)"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_NO_COLUMN_DEFAULT_VALUE), result.GetIssues().ToString()); + } + + { /* set NULL to not null column */ + const auto query = Q_("UPSERT INTO `/Root/TestUpsertNotNull` (Key, Value) VALUES (3, PgCast(NULL, PgText))"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_COLUMN_TYPE), result.GetIssues().ToString()); + } + } + Y_UNIT_TEST(ReplaceNotNull) { auto settings = TKikimrSettings() .SetWithSampleTables(false) @@ -608,6 +649,48 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } } + Y_UNIT_TEST(ReplaceNotNullPg) { + auto settings = TKikimrSettings() + .SetWithSampleTables(false); + + TKikimrRunner kikimr(settings); + auto client = kikimr.GetTableClient(); + auto session = client.CreateSession().GetValueSync().GetSession(); + + { + const auto query = Q_(R"( + CREATE TABLE `/Root/TestReplaceNotNull` ( + Key Uint64, + Value PgVarchar NOT NULL, + PRIMARY KEY (Key)) + )"); + + auto result = session.ExecuteSchemeQuery(query).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { + const auto query = Q_("REPLACE INTO `/Root/TestReplaceNotNull` (Key, Value) VALUES (1, 'Value1'pv)"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* missing not null column */ + const auto query = Q_("REPLACE INTO `/Root/TestReplaceNotNull` (Key) VALUES (2)"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_NO_COLUMN_DEFAULT_VALUE), result.GetIssues().ToString()); + } + + { /* set NULL to not null column */ + const auto query = Q_("REPLACE INTO `/Root/TestReplaceNotNull` (Key, Value) VALUES (3, PgCast(NULL, PgVarchar))"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_COLUMN_TYPE), result.GetIssues().ToString()); + } + } + + Y_UNIT_TEST(UpdateNotNull) { auto settings = TKikimrSettings() .SetWithSampleTables(false) @@ -661,6 +744,58 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } } + Y_UNIT_TEST(UpdateNotNullPg) { + auto settings = TKikimrSettings() + .SetWithSampleTables(false); + + TKikimrRunner kikimr(settings); + auto client = kikimr.GetTableClient(); + auto session = client.CreateSession().GetValueSync().GetSession(); + + { + const auto query = Q_(R"( + CREATE TABLE `/Root/TestUpdateNotNull` ( + Key Uint64, + Value PgText NOT NULL, + PRIMARY KEY (Key)) + )"); + + auto result = session.ExecuteSchemeQuery(query).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* init table */ + const auto query = Q_(R"( + REPLACE INTO `/Root/TestUpdateNotNull` (Key, Value) VALUES + (1, 'Value1'pt), + (2, 'Value2'pt), + (3, 'Value3'pt); + )"); + + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* update not null column */ + const auto query = Q_("UPDATE `/Root/TestUpdateNotNull` SET Value = 'NewValue1'pt"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* update not null column */ + const auto query = Q_("UPDATE `/Root/TestUpdateNotNull` SET Value = 'NewValue1'pt WHERE Key = 1"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* set NULL to not null column */ + const auto query = Q_("UPDATE `/Root/TestUpdateNotNull` SET Value = PgCast(NULL, PgText) WHERE Key = 1"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_COLUMN_TYPE), result.GetIssues().ToString()); + } + } + Y_UNIT_TEST(UpdateOnNotNull) { auto settings = TKikimrSettings() .SetWithSampleTables(false) @@ -708,6 +843,53 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } } + Y_UNIT_TEST(UpdateOnNotNullPg) { + auto settings = TKikimrSettings() + .SetWithSampleTables(false) + .SetEnableNotNullDataColumns(true); + + TKikimrRunner kikimr(settings); + auto client = kikimr.GetTableClient(); + auto session = client.CreateSession().GetValueSync().GetSession(); + + { + const auto query = Q_(R"( + CREATE TABLE `/Root/TestUpdateOnNotNull` ( + Key Uint64, + Value PgText NOT NULL, + PRIMARY KEY (Key)) + )"); + + auto result = session.ExecuteSchemeQuery(query).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* init table */ + const auto query = Q_(R"( + REPLACE INTO `/Root/TestUpdateOnNotNull` (Key, Value) VALUES + (1, 'Value1'pt), + (2, 'Value2'pt), + (3, 'Value3'pt); + )"); + + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* update not null column */ + const auto query = Q_("UPDATE `/Root/TestUpdateOnNotNull` ON (Key, Value) VALUES (2, 'NewValue2'pt)"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { /* set NULL to not null column */ + const auto query = Q_("UPDATE `/Root/TestUpdateOnNotNull` ON (Key, Value) VALUES (2, PgCast(NULL, PgText))"); + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_COLUMN_TYPE), result.GetIssues().ToString()); + } + } + Y_UNIT_TEST(AlterAddNotNullColumn) { TKikimrRunner kikimr; auto client = kikimr.GetTableClient(); @@ -732,6 +914,31 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } } + Y_UNIT_TEST(AlterAddNotNullColumnPg) { + TKikimrRunner kikimr; + auto client = kikimr.GetTableClient(); + auto session = client.CreateSession().GetValueSync().GetSession(); + + { + const auto query = Q_(R"( + CREATE TABLE `/Root/TestAddNotNullColumn` ( + Key Uint64, + Value1 String, + PRIMARY KEY (Key)) + )"); + + auto result = session.ExecuteSchemeQuery(query).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { + const auto query = Q_("ALTER TABLE `/Root/TestAddNotNullColumn` ADD COLUMN Value2 PgInt2 NOT NULL"); + auto result = session.ExecuteSchemeQuery(query).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::BAD_REQUEST, result.GetIssues().ToString()); + } + } + + Y_UNIT_TEST(AlterDropNotNullColumn) { auto settings = TKikimrSettings() .SetWithSampleTables(false) @@ -803,7 +1010,11 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { } Y_UNIT_TEST(CreateIndexedTableWithDisabledNotNullDataColumns) { - TKikimrRunner kikimr; + auto settings = TKikimrSettings() + .SetWithSampleTables(false) + .SetEnableNotNullDataColumns(false); + + TKikimrRunner kikimr(settings); auto client = kikimr.GetTableClient(); auto session = client.CreateSession().GetValueSync().GetSession(); @@ -1309,9 +1520,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) { CREATE TABLE `/Root/TestTable` ( Key1 Int64 NOT NULL, Key2 Utf8 NOT NULL, + Key3 PgInt2 NOT NULL, Value1 Utf8, Value2 Bool, - PRIMARY KEY (Key1, Key2)); + PRIMARY KEY (Key1, Key2, Key3)); )").ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); } diff --git a/ydb/core/protos/config.proto b/ydb/core/protos/config.proto index f2df45d4ec..5c784ee380 100644 --- a/ydb/core/protos/config.proto +++ b/ydb/core/protos/config.proto @@ -783,7 +783,7 @@ message TFeatureFlags { // enable http handle for self termination optional bool EnableFailureInjectionTermination = 71 [default = false]; optional bool EnableChunkLocking = 72 [default = false]; - optional bool EnableNotNullDataColumns = 73 [default = false]; + optional bool EnableNotNullDataColumns = 73 [default = true]; optional bool EnableGrpcAudit = 74 [default = false]; reserved 75; // EnableKqpDataQueryStreamLookup optional bool EnableBorrowedSplitCompaction = 76 [default = true]; diff --git a/ydb/services/ydb/ydb_bulk_upsert_ut.cpp b/ydb/services/ydb/ydb_bulk_upsert_ut.cpp index 27b2199506..4abc9de797 100644 --- a/ydb/services/ydb/ydb_bulk_upsert_ut.cpp +++ b/ydb/services/ydb/ydb_bulk_upsert_ut.cpp @@ -230,17 +230,14 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsert) { TString tableName = "/Root/TestNotNullColumns"; - { /* create table with disabled not null data column */ + { /* create table with not null data column */ auto tableBuilder = client.GetTableBuilder(); tableBuilder .AddNonNullableColumn("Key", EPrimitiveType::Uint64) .AddNonNullableColumn("Value", EPrimitiveType::Uint64) .SetPrimaryKeyColumns({"Key"}); auto result = session.CreateTable(tableName, tableBuilder.Build()).ExtractValueSync(); - - Cerr << result.GetIssues().ToString() << Endl; - UNIT_ASSERT_EQUAL(result.IsTransportError(), false); - UNIT_ASSERT_EQUAL(result.GetStatus(), EStatus::PRECONDITION_FAILED); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); } { /* create table with not null primary key column */ |