Skip to content

Commit

Permalink
Better nullability using TAutoMap
Browse files Browse the repository at this point in the history
  • Loading branch information
jsjant committed Apr 23, 2024
1 parent 1d85ef9 commit 19404aa
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 61 deletions.
72 changes: 17 additions & 55 deletions ydb/library/yql/udfs/common/roaring/roaring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,6 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);

if (!args[0] || !args[1]) {
return TUnboxedValuePod();
}
try {
auto binaryString = args[1].AsStringRef();
auto bitmap = DeserializePortable(binaryString);
Expand Down Expand Up @@ -85,10 +81,6 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);

if (!args[0] || !args[1]) {
return TUnboxedValuePod();
}
try {
auto binaryString = args[1].AsStringRef();
auto bitmap = DeserializePortable(binaryString);
Expand Down Expand Up @@ -116,10 +108,6 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);

if (!args[0] || !args[1]) {
return TUnboxedValuePod();
}
try {
roaring_bitmap_and_inplace(GetBitmapFromArg(args[0]), GetBitmapFromArg(args[1]));
return args[0];
Expand All @@ -142,10 +130,6 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);

if (!args[0] || !args[1]) {
return TUnboxedValuePod();
}
try {
roaring_bitmap_or_inplace(GetBitmapFromArg(args[0]), GetBitmapFromArg(args[1]));
return args[0];
Expand Down Expand Up @@ -222,10 +206,6 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);
if (!args[0]) {
return TUnboxedValuePod();
}

try {
auto bitmap = GetBitmapFromArg(args[0]);

Expand All @@ -249,11 +229,6 @@ namespace {
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
Y_UNUSED(valueBuilder);

if (!args[0]) {
return TUnboxedValuePod();
}

try {
return TUnboxedValuePod(new TRoaringWrapper(args[0].AsStringRef()));
} catch (const std::exception& e) {
Expand All @@ -274,10 +249,6 @@ namespace {
private:
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
if (!args[0]) {
return TUnboxedValuePod();
}

try {
auto bitmap = GetBitmapFromArg(args[0]);
roaring_bitmap_run_optimize(bitmap);
Expand Down Expand Up @@ -307,10 +278,6 @@ namespace {
private:
TUnboxedValue Run(const IValueBuilder* valueBuilder,
const TUnboxedValuePod* args) const override {
if (!args[0]) {
return TUnboxedValuePod();
}

Y_UNUSED(valueBuilder);
try {
auto bitmap = GetBitmapFromArg(args[0]);
Expand Down Expand Up @@ -354,30 +321,25 @@ namespace {
Y_UNUSED(userType);

auto typesOnly = (flags & TFlags::TypesOnly);
auto roaringType = builder.Resource(RoaringResourceName);
auto optionalRoaringType = builder.Optional()->Item(roaringType).Build();

auto optionalStringType =
builder.Optional()->Item(builder.SimpleType<char*>()).Build();

if (TRoaringDeserialize::Name() == name) {
builder.Returns(optionalRoaringType).Args()->Add(optionalStringType);
builder.Returns<TAutoMap<TResource<RoaringResourceName>>>().Args()->Add<TAutoMap<char*>>();

if (!typesOnly) {
builder.Implementation(new TRoaringDeserialize());
}
} else if (TRoaringSerialize::Name() == name) {
builder.Returns(builder.SimpleType<char*>())
.Args()
->Add(optionalRoaringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>();

if (!typesOnly) {
builder.Implementation(new TRoaringSerialize());
}
} else if (TRoaringCardinality::Name() == name) {
builder.Returns(builder.SimpleType<ui32>())
.Args()
->Add(optionalRoaringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>();

if (!typesOnly) {
builder.Implementation(new TRoaringCardinality());
Expand All @@ -387,43 +349,43 @@ namespace {
builder.List()->Item(builder.SimpleType<ui32>()).Build();
builder.Returns(builder.Optional()->Item(ui32ListType).Build())
.Args()
->Add(optionalRoaringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>();

if (!typesOnly) {
builder.Implementation(new TRoaringUint32List());
}
} else if (TRoaringOrWithBinary::Name() == name) {
builder.Returns(optionalRoaringType)
builder.Returns<TAutoMap<TResource<RoaringResourceName>>>()
.Args()
->Add(optionalRoaringType)
.Add(optionalStringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>()
.Add<TAutoMap<char*>>();

if (!typesOnly) {
builder.Implementation(new TRoaringOrWithBinary());
}
} else if (TRoaringOr::Name() == name) {
builder.Returns(optionalRoaringType)
builder.Returns<TAutoMap<TResource<RoaringResourceName>>>()
.Args()
->Add(optionalRoaringType)
.Add(optionalRoaringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>()
.Add<TAutoMap<TResource<RoaringResourceName>>>();

if (!typesOnly) {
builder.Implementation(new TRoaringOr());
}
} else if (TRoaringAndWithBinary::Name() == name) {
builder.Returns(optionalRoaringType)
builder.Returns<TAutoMap<TResource<RoaringResourceName>>>()
.Args()
->Add(optionalRoaringType)
.Add(optionalStringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>()
.Add<TAutoMap<char*>>();

if (!typesOnly) {
builder.Implementation(new TRoaringAndWithBinary());
}
} else if (TRoaringAnd::Name() == name) {
builder.Returns(optionalRoaringType)
builder.Returns<TAutoMap<TResource<RoaringResourceName>>>()
.Args()
->Add(optionalRoaringType)
.Add(optionalRoaringType);
->Add<TAutoMap<TResource<RoaringResourceName>>>()
.Add<TAutoMap<TResource<RoaringResourceName>>>();

if (!typesOnly) {
builder.Implementation(new TRoaringAnd());
Expand All @@ -439,7 +401,7 @@ namespace {
}

private:
inline static const std::string RoaringResourceName = "roaring_bitmap";
inline static const char RoaringResourceName[] = "roaring_bitmap";

static void* RoaringMallocUdf(size_t size) {
auto allocationSize = size + 2 * sizeof(void*);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,21 @@
[
"OrCardinality";
[
"DataType";
"Uint32"
"OptionalType";
[
"DataType";
"Uint32"
]
]
]
]
]
];
"Data" = [
[
"3"
[
"3"
]
]
]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,37 @@
]
}
]
};
{
"Write" = [
{
"Type" = [
"ListType";
[
"StructType";
[
[
"AndWithBinaryListEmpty";
[
"OptionalType";
[
"ListType";
[
"DataType";
"Uint32"
]
]
]
]
]
]
];
"Data" = [
[
#
]
]
}
]
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,21 @@
[
"Serialized";
[
"DataType";
"String"
"OptionalType";
[
"DataType";
"String"
]
]
]
]
]
];
"Data" = [
[
":0\0\0\1\0\0\0\0\0\1\0\x10\0\0\0\n\0007\2"
[
":0\0\0\1\0\0\0\0\0\1\0\x10\0\0\0\n\0007\2"
]
]
]
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
SELECT Roaring::Uint32List(Roaring::And(Roaring::Deserialize(left), Roaring::Deserialize(right))) AS AndList FROM Input;
SELECT Roaring::Uint32List(Roaring::AndWithBinary(Roaring::Deserialize(right), left)) AS AndWithBinaryList FROM Input;
SELECT Roaring::Uint32List(Roaring::AndWithBinary(Roaring::Deserialize(right), NULL)) AS AndWithBinaryListEmpty FROM Input;

0 comments on commit 19404aa

Please sign in to comment.