[function](nereids) support array_apply/array_repeat/group_uniq_array/ipv4numtostring (#25249)
nereids support functions: array_apply/array_repeat/group_uniq_array/ipv4numtostring
This commit is contained in:
@ -87,7 +87,7 @@ public class BuiltinAggregateFunctions implements FunctionHelper {
|
||||
agg(BitmapUnionCount.class, "bitmap_union_count"),
|
||||
agg(BitmapUnionInt.class, "bitmap_union_int"),
|
||||
agg(CollectList.class, "collect_list"),
|
||||
agg(CollectSet.class, "collect_set"),
|
||||
agg(CollectSet.class, "collect_set", "group_uniq_array"),
|
||||
agg(Count.class, "count"),
|
||||
agg(CountByEnum.class, "count_by_enum"),
|
||||
agg(GroupBitAnd.class, "group_bit_and"),
|
||||
|
||||
@ -27,6 +27,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncrypt;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncryptV2;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.AppendTrailingCharIfAbsent;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Array;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayApply;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayAvg;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayCompact;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayContains;
|
||||
@ -53,6 +54,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayPosition
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayProduct;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayRange;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayRemove;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayRepeat;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayReverseSort;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArraySlice;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArraySort;
|
||||
@ -183,6 +185,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.If;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Initcap;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.InnerProduct;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Instr;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4NumToString;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.JsonArray;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.JsonContains;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.JsonExtract;
|
||||
@ -414,6 +417,7 @@ public class BuiltinScalarFunctions implements FunctionHelper {
|
||||
scalar(AesEncryptV2.class, "aes_encrypt_v2"),
|
||||
scalar(AppendTrailingCharIfAbsent.class, "append_trailing_char_if_absent"),
|
||||
scalar(Array.class, "array"),
|
||||
scalar(ArrayApply.class, "array_apply"),
|
||||
scalar(ArrayAvg.class, "array_avg"),
|
||||
scalar(ArrayCompact.class, "array_compact"),
|
||||
scalar(ArrayContains.class, "array_contains"),
|
||||
@ -440,6 +444,7 @@ public class BuiltinScalarFunctions implements FunctionHelper {
|
||||
scalar(ArrayProduct.class, "array_product"),
|
||||
scalar(ArrayRange.class, "array_range"),
|
||||
scalar(ArrayRemove.class, "array_remove"),
|
||||
scalar(ArrayRepeat.class, "array_repeat"),
|
||||
scalar(ArrayReverseSort.class, "array_reverse_sort"),
|
||||
scalar(ArraySlice.class, "array_slice"),
|
||||
scalar(ArraySort.class, "array_sort"),
|
||||
@ -567,6 +572,7 @@ public class BuiltinScalarFunctions implements FunctionHelper {
|
||||
scalar(Initcap.class, "initcap"),
|
||||
scalar(InnerProduct.class, "inner_product"),
|
||||
scalar(Instr.class, "instr"),
|
||||
scalar(Ipv4NumToString.class, "ipv4numtostring", "inet_ntoa"),
|
||||
scalar(JsonArray.class, "json_array"),
|
||||
scalar(JsonObject.class, "json_object"),
|
||||
scalar(JsonQuote.class, "json_quote"),
|
||||
|
||||
@ -0,0 +1,88 @@
|
||||
// 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.exceptions.AnalysisException;
|
||||
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.literal.StringLikeLiteral;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.ArrayType;
|
||||
import org.apache.doris.nereids.types.VarcharType;
|
||||
import org.apache.doris.nereids.types.coercion.AnyDataType;
|
||||
import org.apache.doris.nereids.types.coercion.FollowToAnyDataType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* scalar function array_apply
|
||||
*/
|
||||
public class ArrayApply extends ScalarFunction
|
||||
implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable {
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.retArgType(0)
|
||||
.args(ArrayType.of(new AnyDataType(0)), VarcharType.SYSTEM_DEFAULT,
|
||||
new FollowToAnyDataType(0)));
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*/
|
||||
public ArrayApply(Expression arg0, Expression arg1, Expression arg2) {
|
||||
super("array_apply", arg0, arg1, arg2);
|
||||
if (!(arg1 instanceof StringLikeLiteral)) {
|
||||
throw new AnalysisException(
|
||||
"array_apply(arr, op, val): op support const value only.");
|
||||
} else {
|
||||
String op = ((StringLikeLiteral) arg1).getStringValue();
|
||||
if (! "=".equals(op) && !">".equals(op) && !"<".equals(op)
|
||||
&& !">=".equals(op) && !"<=".equals(op) && !"!=".equals(op)) {
|
||||
throw new AnalysisException(
|
||||
"array_apply(arr, op, val): op support =, >=, <=, >, <, !=, but we get " + op);
|
||||
}
|
||||
}
|
||||
if (!(arg2.isConstant())) {
|
||||
throw new AnalysisException(
|
||||
"array_apply(arr, op, val): val support const value only.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayApply withChildren(List<Expression> children) {
|
||||
Preconditions.checkArgument(children.size() == 3,
|
||||
"array_apply accept 3 args, but got %s (%s)",
|
||||
children.size(),
|
||||
children);
|
||||
return new ArrayApply(children.get(0), children.get(1), children.get(2));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitArrayApply(this, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FunctionSignature> getSignatures() {
|
||||
return SIGNATURES;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
// 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.AlwaysNotNullable;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.ArrayType;
|
||||
import org.apache.doris.nereids.types.BigIntType;
|
||||
import org.apache.doris.nereids.types.coercion.AnyDataType;
|
||||
import org.apache.doris.nereids.types.coercion.FollowToAnyDataType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ScalarFunction ArrayRepeat
|
||||
*/
|
||||
public class ArrayRepeat extends ScalarFunction
|
||||
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(ArrayType.of(new FollowToAnyDataType(0)))
|
||||
.args(new AnyDataType(0), BigIntType.INSTANCE));
|
||||
|
||||
public ArrayRepeat(Expression arg0, Expression arg1) {
|
||||
super("array_repeat", arg0, arg1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayRepeat withChildren(List<Expression> children) {
|
||||
Preconditions.checkArgument(children.size() == 2,
|
||||
"array_repeat accept 2 args, but got %s (%s)",
|
||||
children.size(),
|
||||
children);
|
||||
return new ArrayRepeat(children.get(0), children.get(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitArrayRepeat(this, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FunctionSignature> getSignatures() {
|
||||
return SIGNATURES;
|
||||
}
|
||||
}
|
||||
@ -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.BinaryExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
|
||||
import org.apache.doris.nereids.types.BigIntType;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
import org.apache.doris.nereids.types.SmallIntType;
|
||||
import org.apache.doris.nereids.types.TinyIntType;
|
||||
import org.apache.doris.nereids.types.VarcharType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* scalar function Ipv4NumToString
|
||||
*/
|
||||
public class Ipv4NumToString extends ScalarFunction
|
||||
implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable {
|
||||
|
||||
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
|
||||
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(TinyIntType.INSTANCE),
|
||||
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(SmallIntType.INSTANCE),
|
||||
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(IntegerType.INSTANCE),
|
||||
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(BigIntType.INSTANCE));
|
||||
|
||||
public Ipv4NumToString(Expression arg0) {
|
||||
super("ipv4numtostring", arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ipv4NumToString withChildren(List<Expression> children) {
|
||||
Preconditions.checkArgument(children.size() == 1,
|
||||
"ipv4numtostring accept 1 args, but got %s (%s)",
|
||||
children.size(),
|
||||
children);
|
||||
return new Ipv4NumToString(children.get(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FunctionSignature> getSignatures() {
|
||||
return SIGNATURES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitIpv4NumToString(this, context);
|
||||
}
|
||||
}
|
||||
@ -29,6 +29,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncrypt;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.AesEncryptV2;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.AppendTrailingCharIfAbsent;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Array;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayApply;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayAvg;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayCompact;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayContains;
|
||||
@ -53,6 +54,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayPosition
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayProduct;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayRange;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayRemove;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayRepeat;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayReverseSort;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArraySlice;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArraySort;
|
||||
@ -179,6 +181,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.If;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Initcap;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.InnerProduct;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Instr;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.Ipv4NumToString;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.JsonArray;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.JsonContains;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.JsonExtract;
|
||||
@ -424,6 +427,10 @@ public interface ScalarFunctionVisitor<R, C> {
|
||||
return visitScalarFunction(array, context);
|
||||
}
|
||||
|
||||
default R visitArrayApply(ArrayApply arrayApply, C context) {
|
||||
return visitScalarFunction(arrayApply, context);
|
||||
}
|
||||
|
||||
default R visitArrayAvg(ArrayAvg arrayAvg, C context) {
|
||||
return visitScalarFunction(arrayAvg, context);
|
||||
}
|
||||
@ -532,6 +539,10 @@ public interface ScalarFunctionVisitor<R, C> {
|
||||
return visitScalarFunction(arraySort, context);
|
||||
}
|
||||
|
||||
default R visitArrayRepeat(ArrayRepeat arrayRepeat, C context) {
|
||||
return visitScalarFunction(arrayRepeat, context);
|
||||
}
|
||||
|
||||
default R visitArraySum(ArraySum arraySum, C context) {
|
||||
return visitScalarFunction(arraySum, context);
|
||||
}
|
||||
@ -1060,6 +1071,10 @@ public interface ScalarFunctionVisitor<R, C> {
|
||||
return visitScalarFunction(instr, context);
|
||||
}
|
||||
|
||||
default R visitIpv4NumToString(Ipv4NumToString ipv4NumToString, C context) {
|
||||
return visitScalarFunction(ipv4NumToString, context);
|
||||
}
|
||||
|
||||
default R visitJsonArray(JsonArray jsonArray, C context) {
|
||||
return visitScalarFunction(jsonArray, context);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user