diff options
author | dcherednik <[email protected]> | 2023-02-01 12:22:09 +0300 |
---|---|---|
committer | dcherednik <[email protected]> | 2023-02-01 12:22:09 +0300 |
commit | 72345589f0c36d577a467ab01854e20bb7e23a13 (patch) | |
tree | 25a41bcacf9ee0e0dd873f4b4ac84e8fa8df1a6e | |
parent | 5d0507456f5218f848f2ba10495c0a60a0195a0f (diff) |
Additional tests for NULL comparation.
-rw-r--r-- | ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp | 136 |
1 files changed, 133 insertions, 3 deletions
diff --git a/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp b/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp index c8baea4fba2..7df70006762 100644 --- a/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp @@ -40,7 +40,8 @@ static void CreateSampleTables(TSession session) { (3u, 200u, "Eleven"), (3u, 300u, "Twelve"), (3u, 400u, "Thirteen"), - (3u, 500u, "Fourteen"); + (3u, 500u, "Fourteen"), + (3u, 600u, NULL); )", TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).GetValueSync().IsSuccess()); UNIT_ASSERT(session.ExecuteSchemeQuery(R"( @@ -58,6 +59,23 @@ static void CreateSampleTables(TSession session) { (Date("2019-07-01"), "Three"); )", TTxControl::BeginTx().CommitTx()).GetValueSync().IsSuccess()); + UNIT_ASSERT(session.ExecuteSchemeQuery(R"( + CREATE TABLE `/Root/TestJson` ( + Key1 Int32, + Key2 Int32, + Value Json, + PRIMARY KEY (Key1, Key2) + ); + )").GetValueSync().IsSuccess()); + + UNIT_ASSERT(session.ExecuteDataQuery(R"( + REPLACE INTO `/Root/TestJson` (Key1, Key2, Value) VALUES + (0, 0, NULL), + (0, 1, "[0]"), + (1, 0, NULL), + (1, 1, "[1]"); + )", TTxControl::BeginTx().CommitTx()).GetValueSync().IsSuccess()); + { auto builder = TTableBuilder() .AddNullableColumn("Key", EPrimitiveType::Uint32) @@ -354,6 +372,117 @@ Y_UNIT_TEST_SUITE(KqpRanges) { CompareYson(R"([[["One"]]])", FormatResultSetYson(result.GetResultSet(0))); } + Y_UNIT_TEST(IsNotNullSecondComponent) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateSampleTables(session); + auto result = session.ExecuteDataQuery(Q_(R"( + SELECT * FROM `/Root/TestNulls` WHERE + Key1 IS NULL AND Key2 IS NOT NULL + )"), + TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + CompareYson(R"([[#;[100u];["Two"]];[#;[200u];["Three"]]])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(IsNullInValue) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateSampleTables(session); + auto result = session.ExecuteDataQuery(Q_(R"( + SELECT * FROM `/Root/TestNulls` WHERE + Key1 = 3u AND Value IS NULL + )"), + TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + CompareYson(R"([ + [[3u];[600u];#] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(IsNullInJsonValue) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateSampleTables(session); + auto result = session.ExecuteDataQuery(Q_(R"( + SELECT * FROM `/Root/TestJson` WHERE + Key1 = 0 AND Value IS NULL + )"), + TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + CompareYson(R"([ + [[0];[0];#] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(IsNotNullInValue) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateSampleTables(session); + auto result = session.ExecuteDataQuery(Q_(R"( + SELECT * FROM `/Root/TestNulls` WHERE + Key1 = 3u AND Value IS NOT NULL + )"), + TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + CompareYson(R"([ + [[3u];[100u];["Ten"]]; + [[3u];[200u];["Eleven"]]; + [[3u];[300u];["Twelve"]]; + [[3u];[400u];["Thirteen"]]; + [[3u];[500u];["Fourteen"]] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(IsNotNullInJsonValue) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateSampleTables(session); + auto result = session.ExecuteDataQuery(Q_(R"( + SELECT * FROM `/Root/TestJson` WHERE + Key1 = 0 AND Value IS NOT NULL + )"), + TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + CompareYson(R"([ + [[0];[1];["[0]"]] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + + Y_UNIT_TEST(IsNotNullInJsonValue2) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateSampleTables(session); + auto result = session.ExecuteDataQuery(Q_(R"( + SELECT * FROM `/Root/TestJson` WHERE + Value IS NOT NULL + )"), + TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + CompareYson(R"([ + [[0];[1];["[0]"]]; + [[1];[1];["[1]"]] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + Y_UNIT_TEST(IsNullPartial) { TKikimrRunner kikimr; auto db = kikimr.GetTableClient(); @@ -402,7 +531,7 @@ Y_UNIT_TEST_SUITE(KqpRanges) { UNIT_ASSERT(result.IsSuccess()); CompareYson(R"([ - [["Seven"]];[["Eight"]];[["Nine"]];[["Ten"]];[["Eleven"]];[["Twelve"]];[["Thirteen"]];[["Fourteen"]] + [["Seven"]];[["Eight"]];[["Nine"]];[["Ten"]];[["Eleven"]];[["Twelve"]];[["Thirteen"]];[["Fourteen"]];[#] ])", FormatResultSetYson(result.GetResultSet(0))); } @@ -668,7 +797,8 @@ Y_UNIT_TEST_SUITE(KqpRanges) { [[3u];["Eleven"]]; [[3u];["Twelve"]]; [[3u];["Thirteen"]]; - [[3u];["Fourteen"]] + [[3u];["Fourteen"]]; + [[3u];#] ])", FormatResultSetYson(result.GetResultSet(0))); } } |