aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2023-07-04 13:58:22 +0300
committerqrort <qrort@yandex-team.com>2023-07-04 13:58:22 +0300
commit0a78431e3d51505091495c6a27559b1120f79b98 (patch)
tree9fcec5ab621f5369aba521fdbc1b0fb2ca305116
parentebf95a11d27127815cbef0a35f6646943feb02d0 (diff)
downloadydb-0a78431e3d51505091495c6a27559b1120f79b98.tar.gz
EnableNotNullDataColumns = true
-rw-r--r--ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp218
-rw-r--r--ydb/core/protos/config.proto2
-rw-r--r--ydb/services/ydb/ydb_bulk_upsert_ut.cpp7
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 */