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)));          }      }  | 
