[function](bitmap) support bitmap_to_base64 and bitmap_from_base64 (#23759)

This commit is contained in:
TengJianPing
2023-09-02 00:58:48 +08:00
committed by GitHub
parent e0efda1234
commit 75e2bc8a25
11 changed files with 627 additions and 40 deletions

View File

@ -63,6 +63,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapContain
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapCount;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapEmpty;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapFromArray;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapFromBase64;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapFromString;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapHasAll;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapHasAny;
@ -76,6 +77,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapOrCount
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapSubsetInRange;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapSubsetLimit;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapToArray;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapToBase64;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapToString;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapXor;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapXorCount;
@ -410,6 +412,7 @@ public class BuiltinScalarFunctions implements FunctionHelper {
scalar(BitmapCount.class, "bitmap_count"),
scalar(BitmapEmpty.class, "bitmap_empty"),
scalar(BitmapFromArray.class, "bitmap_from_array"),
scalar(BitmapFromBase64.class, "bitmap_from_base64"),
scalar(BitmapFromString.class, "bitmap_from_string"),
scalar(BitmapHasAll.class, "bitmap_has_all"),
scalar(BitmapHasAny.class, "bitmap_has_any"),
@ -423,6 +426,7 @@ public class BuiltinScalarFunctions implements FunctionHelper {
scalar(BitmapSubsetInRange.class, "bitmap_subset_in_range"),
scalar(BitmapSubsetLimit.class, "bitmap_subset_limit"),
scalar(BitmapToArray.class, "bitmap_to_array"),
scalar(BitmapToBase64.class, "bitmap_to_base64"),
scalar(BitmapToString.class, "bitmap_to_string"),
scalar(BitmapXor.class, "bitmap_xor"),
scalar(BitmapXorCount.class, "bitmap_xor_count"),

View File

@ -0,0 +1,71 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BitmapType;
import org.apache.doris.nereids.types.StringType;
import org.apache.doris.nereids.types.VarcharType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import java.util.List;
/**
* ScalarFunction 'bitmap_from_string'. This class is generated by GenerateFunction.
*/
public class BitmapFromBase64 extends ScalarFunction
implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BitmapType.INSTANCE).args(VarcharType.SYSTEM_DEFAULT),
FunctionSignature.ret(BitmapType.INSTANCE).args(StringType.INSTANCE)
);
/**
* constructor with 1 argument.
*/
public BitmapFromBase64(Expression arg) {
super("bitmap_from_base64", arg);
}
/**
* withChildren.
*/
@Override
public BitmapFromBase64 withChildren(List<Expression> children) {
Preconditions.checkArgument(children.size() == 1);
return new BitmapFromBase64(children.get(0));
}
@Override
public List<FunctionSignature> getSignatures() {
return SIGNATURES;
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitBitmapFromBase64(this, context);
}
}

View File

@ -0,0 +1,69 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.doris.nereids.trees.expressions.functions.scalar;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BitmapType;
import org.apache.doris.nereids.types.StringType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import java.util.List;
/**
* ScalarFunction 'bitmap_to_base64'. This class is generated by GenerateFunction.
*/
public class BitmapToBase64 extends ScalarFunction
implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(StringType.INSTANCE).args(BitmapType.INSTANCE)
);
/**
* constructor with 1 argument.
*/
public BitmapToBase64(Expression arg) {
super("bitmap_to_base64", arg);
}
/**
* withChildren.
*/
@Override
public BitmapToBase64 withChildren(List<Expression> children) {
Preconditions.checkArgument(children.size() == 1);
return new BitmapToBase64(children.get(0));
}
@Override
public List<FunctionSignature> getSignatures() {
return SIGNATURES;
}
@Override
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitBitmapToBase64(this, context);
}
}

View File

@ -67,6 +67,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapContain
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapCount;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapEmpty;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapFromArray;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapFromBase64;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapFromString;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapHasAll;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapHasAny;
@ -80,6 +81,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapOrCount
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapSubsetInRange;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapSubsetLimit;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapToArray;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapToBase64;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapToString;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapXor;
import org.apache.doris.nereids.trees.expressions.functions.scalar.BitmapXorCount;
@ -550,6 +552,14 @@ public interface ScalarFunctionVisitor<R, C> {
return visitScalarFunction(bitmapFromString, context);
}
default R visitBitmapFromBase64(BitmapFromBase64 bitmapFromBase64, C context) {
return visitScalarFunction(bitmapFromBase64, context);
}
default R visitBitmapToBase64(BitmapToBase64 bitmapToBase64, C context) {
return visitScalarFunction(bitmapToBase64, context);
}
default R visitBitmapHasAll(BitmapHasAll bitmapHasAll, C context) {
return visitScalarFunction(bitmapHasAll, context);
}