aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-11-09 14:14:14 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-11-09 14:52:35 +0300
commit777996945d231824f11c0e833880f85b35856908 (patch)
treed0a495487f900422d373e94bb361d32eb791618c
parent74b052031b92e4552b9579309732942aa68948a5 (diff)
downloadydb-777996945d231824f11c0e833880f85b35856908.tar.gz
KIKIMR-19512 +test on new yql kernel.
-rw-r--r--ydb/core/tx/columnshard/engines/ut_program.cpp196
1 files changed, 189 insertions, 7 deletions
diff --git a/ydb/core/tx/columnshard/engines/ut_program.cpp b/ydb/core/tx/columnshard/engines/ut_program.cpp
index 8e5457c504..884c5739b5 100644
--- a/ydb/core/tx/columnshard/engines/ut_program.cpp
+++ b/ydb/core/tx/columnshard/engines/ut_program.cpp
@@ -77,9 +77,16 @@ Y_UNIT_TEST_SUITE(TestProgram) {
auto blockBoolType = Ctx.template MakeType<NYql::TBlockExprType>(Ctx.template MakeType<NYql::TDataExprType>(NYql::EDataSlot::Bool));
return ReqBuilder->AddBinaryOp(NYql::TKernelRequestBuilder::EBinaryOp::StringContains, blockStringType, blockStringType, blockBoolType);
}
+ case NYql::TKernelRequestBuilder::EBinaryOp::Equals:
+ case NYql::TKernelRequestBuilder::EBinaryOp::NotEquals:
+ {
+ auto blockLeftType = Ctx.template MakeType<NYql::TBlockExprType>(Ctx.template MakeType<NYql::TDataExprType>(NYql::EDataSlot::Int16));
+ auto blockRightType = Ctx.template MakeType<NYql::TBlockExprType>(Ctx.template MakeType<NYql::TDataExprType>(NYql::EDataSlot::Float));
+ auto blockBoolType = Ctx.template MakeType<NYql::TBlockExprType>(Ctx.template MakeType<NYql::TDataExprType>(NYql::EDataSlot::Bool));
+ return ReqBuilder->AddBinaryOp(operation, blockLeftType, blockRightType, blockBoolType);
+ }
default:
Y_ABORT("Not implemented");
-
}
}
@@ -136,7 +143,6 @@ Y_UNIT_TEST_SUITE(TestProgram) {
functionProto->SetKernelIdx(0);
functionProto->AddArguments()->SetName("sum");
functionProto->AddArguments()->SetName("vat");
- functionProto->SetId(NKikimrSSA::TProgram::TAssignment::EFunction::TProgram_TAssignment_EFunction_FUNC_STR_LENGTH);
}
{
auto* command = programProto.AddCommand();
@@ -188,7 +194,6 @@ Y_UNIT_TEST_SUITE(TestProgram) {
functionProto->SetKernelIdx(0);
functionProto->AddArguments()->SetName("string");
functionProto->AddArguments()->SetName("prefix");
- functionProto->SetId(NKikimrSSA::TProgram::TAssignment::EFunction::TProgram_TAssignment_EFunction_FUNC_STR_LENGTH);
}
{
auto* command = programProto.AddCommand();
@@ -225,6 +230,60 @@ Y_UNIT_TEST_SUITE(TestProgram) {
}
}
+ Y_UNIT_TEST(YqlKernelEndsWithScalar) {
+ TIndexInfo indexInfo = BuildTableInfo(testColumns, testKey);
+ TIndexColumnResolver columnResolver(indexInfo);
+
+ NKikimrSSA::TProgram programProto;
+ {
+ auto* command = programProto.AddCommand();
+ auto* constantProto = command->MutableAssign()->MutableConstant();
+ constantProto->SetBytes("amet.");
+ command->MutableAssign()->MutableColumn()->SetName("suffix");
+ }
+ {
+ auto* command = programProto.AddCommand();
+ auto* functionProto = command->MutableAssign()->MutableFunction();
+ functionProto->SetFunctionType(NKikimrSSA::TProgram::EFunctionType::TProgram_EFunctionType_YQL_KERNEL);
+ functionProto->SetKernelIdx(0);
+ functionProto->AddArguments()->SetName("string");
+ functionProto->AddArguments()->SetName("suffix");
+ }
+ {
+ auto* command = programProto.AddCommand();
+ auto* prjectionProto = command->MutableProjection();
+ auto* column = prjectionProto->AddColumns();
+ column->SetName("0");
+ }
+
+ {
+ TKernelsWrapper kernels;
+ kernels.Add(NYql::TKernelRequestBuilder::EBinaryOp::EndsWith, true);
+ programProto.SetKernels(kernels.Serialize());
+ const auto programSerialized = SerializeProgram(programProto);
+
+ TProgramContainer program;
+ TString errors;
+ UNIT_ASSERT_C(program.Init(columnResolver, NKikimrSchemeOp::EOlapProgramType::OLAP_PROGRAM_SSA_PROGRAM_WITH_PARAMETERS, programSerialized, errors), errors);
+
+ TTableUpdatesBuilder updates(NArrow::MakeArrowSchema({{"string", TTypeInfo(NTypeIds::Utf8) }}));
+ updates.AddRow().Add<std::string>("Lorem ipsum dolor sit amet.");
+ updates.AddRow().Add<std::string>("Lorem ipsum dolor sit.");
+
+ auto batch = updates.BuildArrow();
+ Cerr << batch->ToString() << Endl;
+ auto res = program.ApplyProgram(batch);
+ UNIT_ASSERT_C(res.ok(), res.ToString());
+
+ TTableUpdatesBuilder result(NArrow::MakeArrowSchema( { std::make_pair("0", TTypeInfo(NTypeIds::Uint8)) }));
+ result.AddRow().Add<ui8>(1);
+ result.AddRow().Add<ui8>(0);
+
+ auto expected = result.BuildArrow();
+ UNIT_ASSERT_VALUES_EQUAL(batch->ToString(), expected->ToString());
+ }
+ }
+
Y_UNIT_TEST(YqlKernelStartsWith) {
TIndexInfo indexInfo = BuildTableInfo(testColumns, testKey);
TIndexColumnResolver columnResolver(indexInfo);
@@ -236,8 +295,7 @@ Y_UNIT_TEST_SUITE(TestProgram) {
functionProto->SetFunctionType(NKikimrSSA::TProgram::EFunctionType::TProgram_EFunctionType_YQL_KERNEL);
functionProto->SetKernelIdx(0);
functionProto->AddArguments()->SetName("string");
- functionProto->AddArguments()->SetName("substring");
- functionProto->SetId(NKikimrSSA::TProgram::TAssignment::EFunction::TProgram_TAssignment_EFunction_FUNC_STR_LENGTH);
+ functionProto->AddArguments()->SetName("prefix");
}
{
auto* command = programProto.AddCommand();
@@ -256,7 +314,7 @@ Y_UNIT_TEST_SUITE(TestProgram) {
TString errors;
UNIT_ASSERT_C(program.Init(columnResolver, NKikimrSchemeOp::EOlapProgramType::OLAP_PROGRAM_SSA_PROGRAM_WITH_PARAMETERS, programSerialized, errors), errors);
- TTableUpdatesBuilder updates(NArrow::MakeArrowSchema({{"string", TTypeInfo(NTypeIds::Utf8) }, {"substring", TTypeInfo(NTypeIds::Utf8) }}));
+ TTableUpdatesBuilder updates(NArrow::MakeArrowSchema({{"string", TTypeInfo(NTypeIds::Utf8) }, {"prefix", TTypeInfo(NTypeIds::Utf8) }}));
updates.AddRow().Add<std::string>("Lorem ipsum dolor sit amet.").Add<std::string>("Lorem");
updates.AddRow().Add<std::string>("Lorem ipsum dolor sit amet.").Add<std::string>("amet.");
@@ -271,8 +329,77 @@ Y_UNIT_TEST_SUITE(TestProgram) {
auto expected = result.BuildArrow();
UNIT_ASSERT_VALUES_EQUAL(batch->ToString(), expected->ToString());
}
+ }
+
+ Y_UNIT_TEST(YqlKernelEndsWith) {
+ TIndexInfo indexInfo = BuildTableInfo(testColumns, testKey);
+ TIndexColumnResolver columnResolver(indexInfo);
+
+ NKikimrSSA::TProgram programProto;
+
+ {
+ auto* command = programProto.AddCommand();
+ auto* functionProto = command->MutableAssign()->MutableFunction();
+ functionProto->SetFunctionType(NKikimrSSA::TProgram::EFunctionType::TProgram_EFunctionType_YQL_KERNEL);
+ functionProto->SetKernelIdx(0);
+ functionProto->AddArguments()->SetName("string");
+ functionProto->AddArguments()->SetName("suffix");
+ }
+ {
+ auto* command = programProto.AddCommand();
+ auto* prjectionProto = command->MutableProjection();
+ auto* column = prjectionProto->AddColumns();
+ column->SetName("0");
+ }
+
+ {
+ TKernelsWrapper kernels;
+ kernels.Add(NYql::TKernelRequestBuilder::EBinaryOp::EndsWith);
+ programProto.SetKernels(kernels.Serialize());
+ const auto programSerialized = SerializeProgram(programProto);
+
+ TProgramContainer program;
+ TString errors;
+ UNIT_ASSERT_C(program.Init(columnResolver, NKikimrSchemeOp::EOlapProgramType::OLAP_PROGRAM_SSA_PROGRAM_WITH_PARAMETERS, programSerialized, errors), errors);
+
+ TTableUpdatesBuilder updates(NArrow::MakeArrowSchema({{"string", TTypeInfo(NTypeIds::Utf8) }, {"suffix", TTypeInfo(NTypeIds::Utf8) }}));
+ updates.AddRow().Add<std::string>("Lorem ipsum dolor sit amet.").Add<std::string>("Lorem");
+ updates.AddRow().Add<std::string>("Lorem ipsum dolor sit amet.").Add<std::string>("amet.");
+
+ auto batch = updates.BuildArrow();
+ auto res = program.ApplyProgram(batch);
+ UNIT_ASSERT_C(res.ok(), res.ToString());
+
+ TTableUpdatesBuilder result(NArrow::MakeArrowSchema( { std::make_pair("0", TTypeInfo(NTypeIds::Uint8)) }));
+ result.AddRow().Add<ui8>(0);
+ result.AddRow().Add<ui8>(1);
+
+ auto expected = result.BuildArrow();
+ UNIT_ASSERT_VALUES_EQUAL(batch->ToString(), expected->ToString());
+ }
+ }
+
+ Y_UNIT_TEST(YqlKernelContains) {
+ TIndexInfo indexInfo = BuildTableInfo(testColumns, testKey);
+ TIndexColumnResolver columnResolver(indexInfo);
+
+ NKikimrSSA::TProgram programProto;
+
+ {
+ auto* command = programProto.AddCommand();
+ auto* functionProto = command->MutableAssign()->MutableFunction();
+ functionProto->SetFunctionType(NKikimrSSA::TProgram::EFunctionType::TProgram_EFunctionType_YQL_KERNEL);
+ functionProto->SetKernelIdx(0);
+ functionProto->AddArguments()->SetName("string");
+ functionProto->AddArguments()->SetName("substring");
+ }
+ {
+ auto* command = programProto.AddCommand();
+ auto* prjectionProto = command->MutableProjection();
+ auto* column = prjectionProto->AddColumns();
+ column->SetName("0");
+ }
- // Test with binary data
{
TKernelsWrapper kernels;
kernels.Add(NYql::TKernelRequestBuilder::EBinaryOp::StringContains);
@@ -305,6 +432,61 @@ Y_UNIT_TEST_SUITE(TestProgram) {
}
}
+ Y_UNIT_TEST(YqlKernelEquals) {
+ TIndexInfo indexInfo = BuildTableInfo(testColumns, testKey);
+ TIndexColumnResolver columnResolver(indexInfo);
+
+ NKikimrSSA::TProgram programProto;
+
+ {
+ auto* command = programProto.AddCommand();
+ auto* functionProto = command->MutableAssign()->MutableFunction();
+ functionProto->SetFunctionType(NKikimrSSA::TProgram::EFunctionType::TProgram_EFunctionType_YQL_KERNEL);
+ functionProto->SetKernelIdx(0);
+ functionProto->AddArguments()->SetName("lhs");
+ functionProto->AddArguments()->SetName("rhs");
+ }
+ {
+ auto* command = programProto.AddCommand();
+ auto* prjectionProto = command->MutableProjection();
+ auto* column = prjectionProto->AddColumns();
+ column->SetName("0");
+ }
+
+ {
+ TKernelsWrapper kernels;
+ kernels.Add(NYql::TKernelRequestBuilder::EBinaryOp::Equals);
+ programProto.SetKernels(kernels.Serialize());
+ const auto programSerialized = SerializeProgram(programProto);
+
+ TProgramContainer program;
+ TString errors;
+ UNIT_ASSERT_C(program.Init(columnResolver, NKikimrSchemeOp::EOlapProgramType::OLAP_PROGRAM_SSA_PROGRAM_WITH_PARAMETERS, programSerialized, errors), errors);
+
+ TTableUpdatesBuilder updates(NArrow::MakeArrowSchema({{"lhs", TTypeInfo(NTypeIds::Int16) }, {"rhs", TTypeInfo(NTypeIds::Float) }}));
+ updates.AddRow().Add<i16>(-2).Add<float>(-2.f);
+ updates.AddRow().Add<i16>(-1).Add<float>(-1.1f);
+ updates.AddRow().Add<i16>(0).Add<float>(0.f);
+ updates.AddRow().Add<i16>(1).Add<float>(2.f);
+ updates.AddRow().Add<i16>(2).Add<float>(2.f);
+
+ auto batch = updates.BuildArrow();
+ Cerr << batch->ToString() << Endl;
+ auto res = program.ApplyProgram(batch);
+ UNIT_ASSERT_C(res.ok(), res.ToString());
+
+ TTableUpdatesBuilder result(NArrow::MakeArrowSchema( { std::make_pair("0", TTypeInfo(NTypeIds::Uint8)) }));
+ result.AddRow().Add<ui8>(1);
+ result.AddRow().Add<ui8>(0);
+ result.AddRow().Add<ui8>(1);
+ result.AddRow().Add<ui8>(0);
+ result.AddRow().Add<ui8>(1);
+
+ auto expected = result.BuildArrow();
+ UNIT_ASSERT_VALUES_EQUAL(batch->ToString(), expected->ToString());
+ }
+ }
+
void JsonExistsImpl(bool isBinaryType) {
TIndexInfo indexInfo = BuildTableInfo(testColumns, testKey);
TIndexColumnResolver columnResolver(indexInfo);